From 04214a487a0d58bfd5c5158db224d32ef9845ab4 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Mon, 7 Apr 2025 16:09:07 +0100 Subject: [PATCH 01/38] staging changes to docs --- docs/docs/01-introduction/01-introduction.md | 24 +++-- docs/docs/01-introduction/02-key-features.md | 39 -------- .../docs/01-introduction/02-sprinter-stash.md | 90 ++++++++++++++++++ docs/docs/01-introduction/03-flow.md | 57 ----------- .../docs/01-introduction/03-sprinter-solve.md | 79 +++++++++++++++ .../Sprinter DOCS.code-workspace | 10 ++ docs/static/img/sprinter-header.png | Bin 0 -> 877266 bytes 7 files changed, 193 insertions(+), 106 deletions(-) delete mode 100644 docs/docs/01-introduction/02-key-features.md create mode 100644 docs/docs/01-introduction/02-sprinter-stash.md delete mode 100644 docs/docs/01-introduction/03-flow.md create mode 100644 docs/docs/01-introduction/03-sprinter-solve.md create mode 100644 docs/docs/01-introduction/Sprinter DOCS.code-workspace create mode 100644 docs/static/img/sprinter-header.png diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index 49061bc..5fe7b8c 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -6,21 +6,25 @@ sidebar_position: 1 ---
- Sprinter Logo Black - Sprinter Logo White + Sprinter Logo Black + Sprinter Logo White
-# Welcome To The Sprinter Docs -Sprinter is a **fast, smooth, interoperable intent execution engine**. Our aim is to make multichain interactions feel like one. In doing so, we enhance cross-chain UX _for all_ as a first-class citizen in both existing and upcoming web3 technologies. +# What is Sprinter? -## What's Next +Sprinter combines solving-as-a-service infrastructure with credit-based cross-chain liquidity. It enables solvers to borrow and execute on-chain actions without pre-funded inventory, while giving dApps and protocols access to best-in-class execution routes, powered by the Project Blanc advanced solving technology. -- If you're new to Sprinter, begin with [Quick Start](../02-quick-start.md). -- Explore detailed examples and advanced usage in the [SDK Documentation](../sdk). +## Sprinter’s Core Products -Stay tuned for the complete source code. +### Sprinter Stash -## Need Assistance? +A cross-chain credit protocol providing liquidity access to solvers and market makers without requiring collateral. Liquidity providers deposit USDC into the protocol, earning returns through solver fees and passive yield strategies. -If you have questions about Sprinter, the code, the docs, or have a business inquiry, please reach out to us on [Discord](https://discord.gg/Qdf6GyNB5J) or via email at [requests@buildwithsygma.com](mailto:requests@buildwithsygma.com). +### Sprinter Solve + +A solving-as-a-service platform that offers a request-for-quote (RFQ) based swap API for our partners. It enables dApps, wallets, and protocols to improve execution quality, optimize pricing, and enhance user experience. + +### Need to Chat to us? + +If you have questions about Sprinter, the code, the docs, or have a partnership inquiry, please reach out to us on [Telegram](https://t.me/sprinter_tech/1) or via email at [hello@sprinter.tech](mailto:hello@sprinter.tech). diff --git a/docs/docs/01-introduction/02-key-features.md b/docs/docs/01-introduction/02-key-features.md deleted file mode 100644 index 2a17399..0000000 --- a/docs/docs/01-introduction/02-key-features.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: features -title: Key Features -sidebar_position: 2 ---- - -Sprinter provides execution for chain abstracton providers by operating a large cluster of solvers that are designed to: - -- ⚖️ simplify cross-chain balance aggregation and transaction management -- 🔀 automatically provide optimized execution paths by determining the fastest and cheapest paths for a transfer, regardless of layer -- 🥰 provide the ultimate UX buff to users, applications, protocols, and wallets -- ⚙️ be unopinionated about account types (EOAs or smart contract accounts) - -## 🏃‍♀️ Fast - -- **Extensive Route Search**: Our solvers explore a wide array of routes to access deeper liquidity pools. -- **Execution Guarantee**: Ensures transaction execution through our advanced mechanism. -- **Just-in-Time (JIT) Liquidity**: Provides JIT liquidity and capital fronting to facilitate transactions efficiently. - -## 🥃 Smooth - -- **Flexible Account Compatibility**: Supports both externally owned accounts (EOA) and smart contract wallets. -- **Minimized Slippage**: Quotes are derived from multiple pools across various intent protocols to minimize slippage. -- **One-Click Solutions**: Enables seamless and straightforward one-click solutions for user convenience. - -## 🤝 Interoperable - -- **Multi-Protocol Integration**: Our solvers integrate with multiple protocols to enhance functionality. -- **Account Type Agnostic**: Operates seamlessly regardless of account type. -- **Wallet Implementation Agnostic**: Functions efficiently with various wallet implementations. -- **Flexible Capital Fronting**: Capable of fronting capital across different networks as needed. - -## 💳 Capital Efficient - -The Sprinter solver engine creates capital efficiency across the cross-chain transaction flow by bearing equivocation risk for users and intent providers. In effect, this optimizes the transaction supply chain for the user since we create the destination calldata. - -## ↔️ Horizontal Scaling - -Just as the explosion of the EVM L2 ecosystem has brought about horizontal scalability for the entire Ethereum ecosystem, Sprinter amplifies this effect by facilitating movement of funds between all chains. diff --git a/docs/docs/01-introduction/02-sprinter-stash.md b/docs/docs/01-introduction/02-sprinter-stash.md new file mode 100644 index 0000000..5139909 --- /dev/null +++ b/docs/docs/01-introduction/02-sprinter-stash.md @@ -0,0 +1,90 @@ +--- +id: sprinter-stash +title: Sprinter Stash +sidebar_position: 2 +--- + +# Sprinter Stash + +Sprinter Stash is a cross-chain credit liquidity protocol that uses a just-in-time liquidity management system to efficiently allocate funds across multiple blockchains. + +## How Sprinter Stash Works + +- **Liquidity Providers** deposit USDC on Base into the protocol’s liquidity hub and receive `spUSDC-LP` tokens in return. +- **Liquidity Management** is dynamic—funds are allocated across supported chains based on solver demand. +- **Solvers** borrow liquidity instantly, without collateral, enabling seamless cross-chain execution. +- After fills are completed, the Stash receives funds on the source chain, repays the credit, and distributes profits to LPs and solvers. + +## Stash Rewards + +- **LPs earn dynamic rewards**: + - Base APY from supply on lending protocols (e.g., Aave) + - SPRNT staking rewards with multiplier boosts for longer locks + - Earlybird incentives + +Sprinter Stash is powered by **Sprinter Solve**. + + + +## Features & Utility + +### For Solvers + +- Reduce capital requirements by borrowing liquidity on demand. +- Eliminate need to manage inventory across chains. +- Improve execution efficiency with shared liquidity access. + +### For LPs + +- Earn passive yield and solver-generated fees. +- Participate in liquidity mining campaigns for SPRNT rewards. +- Benefit from protocol-managed inventory strategies. + + + +## Utilizing Sprinter Stash + +### As a Liquidity Provider + +1. Visit [app.sprinter.tech](https://app.sprinter.tech) +2. Connect your wallet (e.g., MetaMask) +3. Deposit USDC and stake LP tokens +4. Monitor rewards, pool stats, or withdraw liquidity + +### As a Solver + +1. Request API access via [Google Form](#) +2. Review API Docs +3. Query borrow rates +4. Borrow funds and execute swaps +5. Repay liquidity post-transaction + + + +## Stash API Endpoints + +```ts +// Example Endpoints (see Swagger for full list) + +GET /v1/liquidity/protocol/{protocol}/deposit/{txHash}/request +GET /v1/liquidity/protocol/{protocol}/type/{type}/quote +``` + +➡️ _To integrate Swagger: use `@theme/ApiDoc` component or embed link to OpenAPI spec._ + + +## Supported Networks + +- Arbitrum +- Optimism +- Base +- Ethereum Mainnet (coming soon) + +## Supported Assets + +- Stablecoins: USDC, DAI, USDT +- Blue-Chip: WETH, WBTC + +Want to request support for a new chain or asset? [Submit a request](#). + + diff --git a/docs/docs/01-introduction/03-flow.md b/docs/docs/01-introduction/03-flow.md deleted file mode 100644 index 58f518f..0000000 --- a/docs/docs/01-introduction/03-flow.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: flow -title: Sprinter x Application Flow -sidebar_position: 3 ---- - -The following section showcases how cross-chain balances and transactions are managed in a Sprinter-integrated application flow. - -### 1. Prepare User - -Before using Sprinter, the user must authenticate or connect to the decentralized application (dApp). This step is handled by your application, ensuring that the user is authenticated and their wallet is connected. - -### 2. Balance Aggregation - -Once the user is prepared, Sprinter can optionally aggregate the user's balances across multiple blockchains. This involves fetching data from different networks and consolidating it into a single view. - -### 3. Get Quote - -The next step is to get the transaction quote. This provides the necessary information for the dApp to execute the required transactions. Sprinter finds the best single-hop cross-bridge transaction to optimize this process. - -### 4. Execute Transaction - -After obtaining the transaction quote, the dApp executes the transaction. Sprinter provides the best options for the transaction, but the actual execution and transaction status monitoring is handled by the dApp. - -### 5. Error Handling - -Error handling is managed by the dApp. Sprinter ensures that it provides accurate data and options, but the dApp is responsible for handling any errors that may arise during the transaction process. - -## Diagram of the Sprinter Flow - -Below is a simplified diagram illustrating the Sprinter application flow: - -```plaintext -+------------------------+ -| Prepare User (Auth) | -+-----------+------------+ - | - v -+------------------------+ -| Balance Aggregation | -+-----------+------------+ - | - v -+------------------------+ -| Get Quote | -+-----------+------------+ - | - v -+------------------------+ -| Execute Transaction | -+-----------+------------+ - | - v -+------------------------+ -| Error Handling | -+------------------------+ -``` diff --git a/docs/docs/01-introduction/03-sprinter-solve.md b/docs/docs/01-introduction/03-sprinter-solve.md new file mode 100644 index 0000000..0f4be44 --- /dev/null +++ b/docs/docs/01-introduction/03-sprinter-solve.md @@ -0,0 +1,79 @@ +--- +id: solve +title: Sprinter Solve +sidebar_position: 3 +--- +# Sprinter Solve + +Sprinter Solve enables efficient execution of intent-based swaps through an RFQ-based Swap API. It’s powered by the Sprinter Solver, built on top of Project Blanc. + +## Key Benefits + +- **Best Price:** Finds optimal routes and prices with MEV protection and low slippage. +- **Fast Integration:** Dedicated API that can be integrated in hours. +- **Cross-chain Liquidity:** Leverages Sprinter Stash for real-time liquidity allocation. +- **Zero Collateral:** Solvers execute transactions without upfront capital. +- **Support:** 24/7 support with flexible SLAs. + +--- + +## Features & Utility + +### For dApps & Wallets + +- Seamless swap and bridge execution +- Better UX with reliable pricing + +### For Intent-Based Protocols + +- Competitive solver participation +- Access solver liquidity via unified API + +### For Solvers + +- Compete for fills and maximize returns +- Access credit without holding capital +- Simplify operations with automation + +--- + +## Getting Started + +### Accessing the Solve API + +- **Mainnet:** `https://swaps.sprinter.tech/mainnet` +- **Base:** `https://swaps.sprinter.tech/base` + +### Authentication + +All requests must include: + +```http +X-API-Key: +``` + +### Basic Usage Flow + +1. Request API key via [Google Form](#) +2. Call `/v2/route` to get quote + execution data +3. Send transaction using `swap_call_data` + +--- + +## Limitations + +- Supported networks: Ethereum, Base +- Rate limit: ~25 req/s per client (contact us to raise) +- No on-chain simulation (must simulate client-side) + +--- + +## Solver API Endpoints + +```ts +// Reference: https://github.com/sprintertech/ass/blob/dev/swap/docs/openapi.yml + +GET /v2/route +``` + + diff --git a/docs/docs/01-introduction/Sprinter DOCS.code-workspace b/docs/docs/01-introduction/Sprinter DOCS.code-workspace new file mode 100644 index 0000000..eadec59 --- /dev/null +++ b/docs/docs/01-introduction/Sprinter DOCS.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": "../../.." + }, + { + "path": "../../.." + } + ] +} \ No newline at end of file diff --git a/docs/static/img/sprinter-header.png b/docs/static/img/sprinter-header.png new file mode 100644 index 0000000000000000000000000000000000000000..45a23c09602913d2e0b361498d4f99345ca2e2a7 GIT binary patch literal 877266 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 z zL$BmG1xteik}VQ7a~(u8hwmte(p22-HfHFJGNk89d5g>z-gpEY4ywcLSc}DLWZmuT z1oGH^SeeNU^-1wPdh)%8TOo^e2OFf9^I2;(rxjXZsjmVXens^?k;>|6^Rr5ZG+1~< zo!@H}uChZ3Fgod8O^Ovvq1PC7*ZU*}6ngj^gw33S`1)QZvRhVP=mGcibmWvP^hRM5 zH?A?Ws+N?*ABBRu69c3csfq-a=+&U+RlDjrYkEx6V}-1vYzE(QU&$F6ye(zMv-3C} zem%onRrY0{#D)f`8bvLLR5L%MlbUFMUwqn~i$@P4>zMA$K($-Y)pA^i;({u0t8uH4pR#AyE8|m^09r*yL!A5l zpyGul@37^!A$Y_~`WNuhuaamZl|^ksKHW{Xc&DRc;o_oYGCrENHr?pt3u^*`&LAuJ zLs^ncn02~6WbCs0r@&)a=Pa8h{=IVdyS?b=3lfNi9i^#t>YOFw%okFl=4^&_V^%HQ zB~AY0M9qR%ASVBt)9LW`og3;skfR|_0Rd6;q1b3Lf=Q=Sg-$e{qRuH|)<4D8p%G(! z;j4r_rq%ACouqsnpK?K<^~#VJ)>kszw$MSaAHW#W!?M-aS8uZFCUfYa$H!gYOT-`g z!gn}W&QeR})MIpD`gIp{lAju09v4r8U~;tpHh96?UhWTU`nT4~VeO)u>VggOaSYv$ z223^_Q>*fnrQ#TY4%K;#7St7ld+~OiBAy(;7>Fjd-j56NV zhB8M_G*BdoE8m<4p9d%mTG)&&gNDUYSi+8;+`WglU1Z;!p?#92P2XO=x1E`iP|UC> zs%;Wg6z-(WI2KRQu0Otg2id-Vzr!l?Qin|Pkom*ec3aTb59f71!p3Zwd9N)>AFhb3 z9ULX~-$YNMfMRFh#?#iTfaSLEolq85MXZTh#w(>@oUw7L>{Cox-4|Df!_>o5zH zt0gwtyJ=cP`KmB%^}ak0J*UMiF{1)&gf~(%lT+Ng>5Zr2rcY1__#ZKSIVf|>uL2*j= z!WN+CUihrdI@c;Z(xSS>x#KBu0&|gHP|(Ina4y;IQX9}EM)9>*rzU1F$s)~=yEPSy zp1KFobJp#CSG{Pm;tSXp?GI*IRGQ?Dp(tR$-;1Xx@R`-C+v+_)t$zZE^1@p|UaFgP z{G#$S3-NVYq%^-NEqkV1gXNv_qt#mmaXK_h?dr0ZK%e@7abgdrg%sOcR~IIw5dUCD zAh|v`t)oRqz^(hm;6k_0?0Up}gH->r;B535r+QBiurcWXzV4M7Oh{REe!Gvcv8mv9 zVefv2ZzR?qp&{G0yU2o)H$}1%39y%j%I(2*qc*^O&(NH)cZpl4M0-UOlI04OW4w=Q z5i)`qbiQBNf&GM;!v*uYj(($43U}me=ihK%Nuav)DkMWzcFLk*SUXGDIzBN11>MeQE_D|r1L;W39OT0pDbiy{5FDsLfjZEw6=!gL#SBUV&-ndi zGlBT{x^Fp#F61*4!lAAin`m8l^Jpm*{((gH7-WPQ&hC=w+;1;$yz}K=PpdCkd!QS4RiIdzy_4Kx(lI@BmV}c)zQuH-{*y)C4z9RxUrvwVA z2dA!8Y@zb^F)cZ_yyZQ45|`gPN92p`sIBPgNoKYqK01G?wtu>(r@10X8D~r~@zhx% zJ=sa1W%uI;hb({NWf4V-MV&A2ey8`wey1MX^)3ZS+7v1|@?DJm&>)c$kQt2oK+SS5 zlnCgWVnzi%mUe9!?0y%5ji>15foNX6Zz9{HV=-scl|XBpOVq8XupX^z_iFI;?Cngx zSpvijEjChz;Zy2wR`-^$R`nK@=W@x_fE09TE{#^G$4yFT+609$6YRNaSoO0DcgH%) z#{&9o;wW@dVO-#D+n~BinVOrll@lBVUGFmLo9%B1q=r`B96eb7H&r8_-+|?AL8Qslg zdk)xro|9eyzK90_kS+$GANg!tSm|Q0IrE^vSBy;yhv3~3!ggq7!;0;US#J@T{{;w~ zQ6zgP@OXs7`yRLe6;T&%LLaKo40sbmVMx9FP3gcu(rn7~>sBd~1sUygxMoa9M&OE% zj`1a3sou0pef^D}m0`W9@FP+}Hw&%zGX!rFAx4j8$rt!(`8yNsWWSyFqTMa^Q~E3J z#H+{udVnwIK(1&J0U%PJ4 z(}I1NZGAuktU8li{n!*~CK5j-GgjV((2Ig{tsu~Pqu8#~NHgqwYEy;aJ`3;}beLMC zX39ONALB8;+ujy$NLrD{O4h7ERzkU}fI8jptm>9aphP_PE`rx!dUn~!B4gH_A6Y)s z+JHNAitp3DLU;g1WhEMG{LIA<5kEYM=%=;L;8#h(-@zI1<6&243=%tTb)DwxdnL(_ z5XLylAFk=&StX>#ru^!ca~eWaz67BPN$Y-R(J1N>rzQE_NVkqvf8T>q12BoXl$KLJ zzq=pkvu6l-QM_eGyAc>Fy&7+ASG<0wkb=UL(7q8UosXNsal~2M82PjZ6zJ7)OpUWY z)pv9k>fi%?i&ytz85rq#(ksXNt=lva8$lt((%$|QScn9VK~6c!M2$73P%M8V3=9qy z{}#+oSv@*x3!20rcqK~!v512)L=576&(VJnUn9AM_ruCMqbMD^x!p0{Ie7NJncDxU#lL?GaR#kMP5D8%kLvh;S4xpI z{;egS`qow70KduMyDd-HZinr5lJ$;tc+hXv_V*e8exjsW0FC9zCQZkXd4hczmVc|RwKzDvQSaD_{|9W{?binyp>ouq|Hx^bvB+k1KQavTOCatZ_= zXlQ(6@$MkPxGc1wrtrPyoBK($KV})E*TjQ5THIs2=R!jlo|IR3S!bPIK9zM_j&aO~ zn!Np1K%2F=+;nfnc+y4q8c8|}gdsm3H8^qClvO{J+!$(S>%UsihdaEJ5D%e8YijsD zQjlROyqMR!$o;|4!b!UD1=01o*I%-mAnrq2Hy`(IJ=gx}6c)%z^lJre%?ehz z_t}%I-KXQdue3A1lMcM0Qd{?K9RGY}@#qX%z3;-M>uuW#p(MMdQnImNy`e%uN4G9q zG4D)1%1-04KlkLvcc7?h5)cKM5kq`~mZ#uq4pc5O` zg*B+(;Va`ho_Z=TN0p%&x%(QmWnmLR>feD1oY1UmBco+te7{bX6F)RSY{9nO=#fcC z%ghtc%SqzB{a^labz08>+*K^TWiI?>NmLL2QR&dUkCD?|IZ`a2qm1J?apE>Bk7mIx zu=;D;bB%*Ygr=UYz|^Chn2D^&i1RH*y+nrjasPmEKj&xyVaDGtA zB&3s7uV0FkJjt>R7g-@K(pts{ zPxeKdd+>*;fRPl@A4vtU?R}#``mybbCq2m%j1RmV2M^gmDv4-$;4}p|Lq}il2C$F# z;kW|xb&W2D84O8cYBrc(H3faFuY1-pdNz3Z&B`J3N|K3JDJe9QE39_!n4u{JEGIc7 z_bym*^>gengAl`hc?Gf@RZz!!{1V*Lt!NT(+)hbm|k})*dYz zIFJ}xV~U(sv=b&Bom0EI-_J*-z5CWPY*ZMziQxajC+6VvFm-n0!czEYzUHXzPbs!) z8-VKRwbIIzegl;jXf8vZ++pwDgRr^VC!r-`-}gx6sT3p2dfzSsb#I zu8~UIBZHR8pKS6f1{OogzQ2|`oKt;k6Ix(zCTzarf{|?jmpE|C*v{M9I_;Mi1O*k0 zqIwwf1lO9s4#;`NX~f4 zbT)<(S|(=95>XJA{_2rl~{~oH(Tbv82ZvQ3cph6`;S5u6#wkDo?1`+-r8;{H-nx z<0EhFeW)ZFvo9EkVTygiC_6vS(!~%tS`Xy8UXSZ3a{k5~^wdDAxBmcJ1_}*ZL7#;o z5nKiI2Qg-_F4T@D^`M5mn0b3j14h@^!ellyY}NpyXCf?e#dPG?*< zM7dH`_3?L8>`-cMv@|=JPu7XeOeW#syo#(#j%{&HZ~c6~4Kx)=Xc<&IsB%VcH_M>X z6*BtT_nw4{Q-lGp(Uou*qa42UD;mk;CaCQ`QgY}4WxLr|y zS1GP2=7Wjxz6@^HcGJIDoJm9Z0?TatZqmG&XTuK}VT`XYFZx=V8{(Px)pd*s}fH zIWw$u?5pzY%Dr8qtJ*rB^x(BDjkbN&x`?-5w>rcvE8RD%OgysHPL`_o=U{+y&x<4t zc{1(lujh1_)x#egIoT<*sNM@ndbebA$>l(_fM^{^|HAN^2uWX+m)lLFx;T)FD?e>; zd^+OxT>X+!%%}(InTN6S-G^WGt$MqjL$A#bg{f~QZGEz7Fnq@CREWMSI2?u|WS?2_ z@Gpgw5VR7_`-BT~KFD_Z33ui1HJ{p9-f|_Z`C~eRBxlG=+DyDAM*fc^@lPw-shPU+ zI|w|2z~T%78lJ~ahV?Bnt`6BI817mXD}utOrTWY5zE9=fdD+0O(2u;B0e0(a;8N`^ zi(404a1alll19-j6&sos_kI@As}v6|j3%^fJ!xw-GBpXgVO=&{jVX)OD!QO++f`OZ zj4FMqGA$$0fn@;p1*K^xNb^!N&1cXd!+R_ETU?zjzpuIG*z!9r(>q0oxJgD^Jyg(U z(5@7D)s=!Wi0+y+(m3MjkmPEyuge9fSy)VGlzYZY4OB?3&GQ1`t)bl{3!VYNbd}L?L_*lgstsw&GFb6z%8%Vd z$u4A!8+_tKY}c$$Uc-QKswZe7>_oJ$w<@?tm(k-V~%;a0D zC;0+zRW$ba1t$6?2TBB2-THU#ag#GYrO*u8MsAK74?WUe|A{Ptu&Vi6V*SUb=SZ>x zxh(HTH1eFx%|d>00gx-+hyPn5}1GJY}9`*VUL+Gw)wHlz|;|97)F5E9t462|@K_&*fh#t)4u>DePr zKy|p8$rk9|x!;wAktv|N8*;neqDlwLvqPsMT(hWOm#@B6#fpBn#JC@lUd+737vN0U4A=h{8l zyniZv`|)>!0Fox{5`a{LU;e+mT)N%=;W$hGo!sKBCu>Bhx063YO0xPL2eF35kJ&@3 zC6yekOzX}G!E&!oIG(Y0yxNr*m+oY~GtxS@cN~F+(lRU>Pw&Vcl3K71y2weXNP^^3 zsp@*~Da4P6lC0Bt2nTK!eS8k#;*nE=tG`Bd%F+7$n=+EI5#fHUij683eRBR~kf2^w zNzc;u@tkl#*W)fcQd~{(4aQa?v1t$8ep(3wP*1`t$+%|B7o&YbeSEIv4egKheJ$*I zdk;Q}27on{%`t2rS$(D(9@P9rOcn3CUe8AaB|m zUwzHhJ}JtEgL5T3TykR-;dpj%I9x7(v;76Fwi!lFBrkX84>^ zsKZF9@&19nLEI~n!^gHn!3^tug9`&{x#_d#P&92~xkiudz=tMa7aitnPZ*u=2Ce(# zzi@WBU!=YwO02nHgeG;I(4YLFZ_WDBa`2Z?+J%r-2jWRL8?FJS_B@R(NZRdj$b|VbftW z_M10kGWZ4#J}AW*7}+krU2Ag<1r&uBV&lgzjI~sBb*E+q}FmD(Lwo!s*WU-@KQRxmq}3fY*ZXgik~LM3LQhBiTIKNWMDTT0Uv0h2cJdKYa_a zK`#{erMM~TIrOl{XRWX?_|4N?L2&oiSWSQan&arMdbNpu(}{k^b~oJ17Ya2H;7A9R zmFB@zsHHWSl{d*k>o^CM1ax3+W~AAOj<$^j zHH}nPHGg+svV5+vU=jfMJW7o<8!C;X&C1rpe&uM_J}LAy+SaZ6P>z4v1&m;BF~54Z zsJbfZ@q*~f_%yKp%ffX}O%WNz^ z_7$sxlt>zl*FKQ*n--P2*SyHkYixe{zT|Pn4#dOvq#nyL-GK^WU!@K8KAyESHj4qb zbF#jf3q8ML)EUa^=oa~%TH9&GZ>J2d;KRg;P3C@U zTPb)op!$gvsUitlw`h4^tC8pM!dLf~F=(et-=}y5Y0W;_hC4T_OJb$w#8P{YGe@?TDqwtL!?!Z3d;)+t#Joo-DIO zomvOD&A>boUR2c!AXwH?qSD(jVQybL`w_&4CVa_~yDuw7-Fb3^cUv^n9*wGIM=M4L zhgaxwD6se>EkryiQ|J+~cmCeO#P1+!9D1;0TIQ@JEv+y0b=LP@l05=^)pNSaO#lVd zqFy^#w^dYV(uSNbgMXn8)EB(kvDk4~xh{=sFoAXmMyVDkjGaHd01-J<8Z|Y3Y2zB% z!*M(y%3J7ETI}aobDejqo&S?xp=~zRQigu&EY+k~&d`AeS8~;~h~LrnrO{?!h0{sC zfW+aPpN-mN*vUx!6LDo$*`&lsS0#j}!GAujqe zDTl8|=Z2_2SU>g2si5+PAuaod+?i!nxcWEFE@uabdM(244k=%{)?^cczm3lxBJXUT zETSBApk%Q+=BIeA3{!&q5n}#`2LDlT-1yt3*Zwn>z#(Vrxmy?yD#nweppJ9w$wiR; zca7sWAC!A|>d;j3 zS$KvO9vAtfu)Vt-zl#099qT_@?@5xA^T%hKke!{YBfInQuk??^%` zk3#z%?{y1cz&(kyhLX&{?&JP@G6j5mVT*=D;0L{?cB!cDyccxmHKxmlJRZWTEu;S} z51$I;03ft|$+n*73U%H9_AT^(m4!_SGeoonS*HTT7g5J?{@&_LwHRIh*pKg*|7wz? zhhOgNXYb0GmjAE9WlH1U!X?@AgzUTXr)J2=^*YHZ$8(^%V^WQUt^b{mzgx1R;N1RQK9$hDyroXA0&~V5UMELqef9CdGyJ}zKehg| zVAWrhI`+3^e7Db#;m=I3%=xz*d_RzUGe51?%PTnEf7!Vy|7)ZADL>ZEw zKDq};1w-n~s2h?Gl*fyMlMmdhFypjv4@{U;ok2zjeNcA{X#20f|UdW1`b@h_D+ihl<^n=CcsOdp%AVV(^cId5-rlr}c zw_T7a`Q&w4mswPOq>E0m!ZyXNiVa~r%5*)c2abA}nW7kVanHanjSTsq)|_KXa%N`Y zsTqqnk{mHZsT!ge~$c|q9M@-N+SIOEXjPe^Ouob5|p6ayOlnI?co$#>IsONE!a)2_c8 zP8}V{lb(H+i>;yx-ofJzluMj8BHcqt04d25TuJ?gDD$SQvtJb(_12+`($UT}954Yu z&!Na~t4V=9WqBV_J7eAP2$U1!waEP28w$&8wE23T)?AvD!G8er*yPNBa#}l zdTnCm3Ok~byETncS*+h1eK0y#_EoGJ2 zw?@3q?-1G!Rkl9L`a*K{9uz=%Ehe-I1unU0@R+BLFW+Bu3W7E> zKUp81%~;GViLVkE?r3|gz{>Bd`i$v<=Tkz`>ylLt4Qv z!7&X6bT++u@gjLC;@oM%l*Q6DSv?$ZI%`PUl=R9vTe96Nq=jJh?P>|lLBTiC4U08$ z5F7Nd;rA`c-MpGzr^yRC$S}kfP_BO-c#ksf=u%3oQs4V2;FO!R=}1srtl691PWzsB z$=z~Flk=ed0MHY&UOhB+AMlj9?2Q6N&C+r7I9LnFhGe0F-C@goHn}`(EyR5-{%CQv z-9fHJ7whysR`a~Bw5eT2(WIl#DGv=IF_R?}@=&3(ONHvLvJuj&1uILj zwK4VLdtSvfQ!UA2^$|D)bqxszl^navP+AL-qvID*k7-94%I#Y_@5yQI zH%niScDhS-tF0|`%Jjq;?Nrco4k2|3sLc>N`}vv^yqE0SQej}o8y4{|OF^36=~_1EwAAQTpht|a|I+~=~u#EzdGhwLr zY#)^I7OtfBg+=NR)Ap9)IuG`M9o);FJBu9=>+1!p+}@rR?-V&+@6u76rd)pJEfScw zymOJQ&UhsZ&nmIv(INoQfV*o)YqF1)_x>q_H& z+$plXc95E>VOllr4XV|n^Wx5oJg~NWS>GpMTlM4?W$+V#8g8c~R0Uxr0DPUa#@qIM zSo+{zX2qd*DU5g5j-UQ)*CYMei>pG$`Y&A{g?gJ;Ncg`v#stPH5>Ufv9=4}~MERnb3d0<@wru0HhZxG}$!r7W@K!X;TO+MX zjDA2PDdC4Uw>O`9&%o$r@1RmDA7%6Ejul*NQJj7MPPd-mk%zP?*L*bfir-4hqlUlm zaD2MNRabn*$L@Mp!$m|@s59fOEsmF4xgCJ9Cv5xtf|3}H7HDJcpqjbcq~yKFz&&{y z+P!u#0w~rf7^qTH*Ec(DIM)5Hg(3Z#%T1F0n8a938?xYQrxqj(ei;+L)8x6#j!XNb zx3Nf$q4ZObLjA~hVaQCR>J6~p5=KmMq&0^CIt$5zOY2~mgSE8svH?Y{H~&A%-aD+R ztnC-pagNh06vddk)CZSI<7T-#)ep%=gty4_g!Q za^Kqh`l?c`{tHkx^}6g1)poTrCWy7D4BK{WbCVPoK&QgE=BN!5+`I#@;pKF$SWqr1 zWHSR>3xrNqATDApi@PkpTRbS7gFfGm{d6Xg_=99?hsoCrMAW5Ktwj{ImqXI~WmYO~ zv*;PZAOc=R`eP_s4J!V4umJ9XxYkPT=USC#!U6*${NG~cWFQaJ&83p;)n(6_syG$(_V<2vgTIOE6aFtqu zNh-b=WUmDpXAE83L>XYw@)a`sgyjK(eDQ^Cnd`(T9iFlPM=E3(b0AY1qwILPz2f9&7$fNgFBEns$SEN;# zuYbIAwz&Dm{pConz&B)(Q}>=e^bIb!WHELP`6!&%S`M0v*fg8{ z-MiGovM)7jMeLS0wDJd(EIa+vi|pl|va|NlH`y=WvD72XBgMdQ37ZG6k`K?I?bJIC!W+W_%6n_l_v={^L?zlSD2Ze%nXfMjgY)wAEW&*foWXR-jeUB*Sqz1LdRUzu5@}DfAaR4T zG@|Pw%%^@;b{=GxgxuMWqOHQa3k)F2PUgly`MBFOJUv22k7zOKeGz*v4D4>U&{r6J zrz8)uW4EJd6N?rw#(7`tPo0t;WV&FY18tr^Y(&tAxbgvj?xc75O>h#9r%+LW5QXcQ z7C8a;!|jB!P4gX4Ftm^@KH68lKeljzn95#>p>49+y`pVp-Z!2S5m|tI>!$h+AO7t* zrQvd13EV)osQ@8Y(^+>Jr}V0P7EUXN8B>^l>xXZfQWr;RUHnhoPZfxHiu|>>i;iUrm~b&!w4zr+9^^0b!7hWj#2EVhUw-n768Rx&>~3&#EV5r= zyzTg*Go$ts`nky7wV?|0A@>@;s7Bt!2tPr6iK&ZssuoK`3Msa_YE~=FZTq8-KQSwF zClw8gsc__6AG({2_jKKgBkyzXBli{(tlG}QHQi-`1;(BcQxEGGha5ERYq#V?7_FEk?cyLdr z6K~_Ip`mSD-LHIi@p7O|P3Bse(!L{<1v|_-9oR!n2o7@u*he#+6RmB54tbDdhWJoG+j2D+*%G13($0g3h$rQC4Pu# z3f5<{iO&@Dx~&75TP>}Sa&5Zvl-k`|ek>u>#T>Z5khjWcmK z7OkbU7e*%D)aWcX?LKq8Z{fm|8M^BJN+EoP7;`<$!c8$HaM8hisUp+dmK{-(Xo?l9 z4vQCp>P;%y5%%+Yg&8~$@JI9~yB4SG7jvKx!+c^-rUy&1Nuc6AAsA9em2H_c7p^2M zPHp6G>KuB)oE&GX;BE^DYLq(sO>d~Sa>Rz~K5Mq=~72vI9KJpmuG3`dZN_Dw~ZgLio{+(`e`3Pg*pnStgJ3txun}aC%9V6O`ePzsbP;y!g+kLZf!JzR)Gzq%UKo5JrUxT!=e|D0mZE)uz3NBVCG0I=v zcfj}#A*g*G0#P0Uk)&UOnC+It$Kn$Z87_Osn3XWr*+xG-&u$WMqGvV!xqK7hK4&$s zY26oAVO#Ur8!xOed?(QGRs>-2>+!f)FWfD6EfnSn^OK2(j&jB%X}!nhZ>_#?O}?-@ zguD*#%Dz&5=)B2sZ5MeCk=^uXQR}7+XxMb7i?{x|q4W3Tv6d=JMTKEAH4{r9dlRc+ zgDF+h(`KOK`Qnz}_V)5UW-9cV8_LUDujw@lhVC{CjTjmwkLEnC#tEnKg@f8H9PDmR z3zq|BQA#%%CAXD=7_-{@7M`pb?MYSl`n#};y7b5))Gch!nsbW^I185_stgdA#qwwT zI7IRwWxdjaPvlG~i_F$eVf`LT1lnkMa|Rk?4Z&o^QI_tbN33wo?*;?_ z`MG7V<1?9N=ewZ~v~*bASHCC6UTF6FV9K1FPCh5^N>?U=a?bk-M(hT4;XgfI9Qseg z#UBOLtv^L@f69osFmeBtjOYr=d*(e_u8E5pX!dta*1YBQ6J9wYuTH0eap^2YfAaW1 z$~H|0N+q%Wgo^(D(l5ss+utYqxjYU!d|KhfKUI73N_GE0F~VQz@DC{+L9AZD!+{^7 z2v7scPx$4Rp?;p?zgDKmE$l@Q-T*Dw|9;hN&-0&&8m0ZwW-gf$8N{od^A@;?Ny+le2{GHr=A$KZjVQKMT3ZU4=)HEZqW zjQ6UAV3kJU|BSiPLECA~ehb^2qvb{UT&`+jS-lBZu|Oz z@$clTTbf)lYp$kn;+}{!2eFx-zin?`ZumtdEOscu?J5+@5$8f3kE+sZEwp{g&uWW1 z77z9X!wznUZlB%(U*v{R!=Kq4wSB&mQFloyw&wN9wlN5N2&ad^JAhD8bCW86$fS#L z1(|WUT5WHd$@_@#J&~~0uVF*H4Hq^z@8_{?xp*?;ytmDHgW!oh6(Lbs&RFLN>U^Bf78ou5D*~x1*NkW(9v(50Voab$1 zQRqhVd&o_WeEVy;+JYid>$mkXrjggRk~}|;^a$N|8n(eMGbe%4EZj}-2?7!hDp$syU1_wmh<@NMvz{Krv5RoX!B z-Fx-bsh}i|-O*9)ITyOa3&MrkUF4t%g3p_n)-uGBdq` z+vh;N_XsFkzrELTmK0(KaTuAZgcEFKvZ*b8^*K^2!{GrH?`xY_ zCu0>3#Gdh5!A`kXR3Qf7H_5#{ec4D_sjP$E`euY5&BOvFQr#Ex2=%;x6>B;}ominW z6ApcT7;k`cJ#E|{BXF4ozH4KK_UJHT^Zt#)k?)gp+~ZDxn-&&Ty(EMDa?5M z@hl&NdAW2*xed_&mBzVI(8~(R7IK`TW?q&OV&p3kGfR!~m`%&1M+!~5rwfjsus(VW zo9VtE$?1Zd|2preV5(Y~rF<+s-RuJ1;rHND=;u;#}N1MuUiRn3_fa8#(EbA%uIkKikgn% zny`*%Bh^C^TeZ8AFKUe(7oQGZnH)3Vlb|;*=);;2?-tyZY#pdsWj5ZcrmSUsc>F=> zM*R!1>mI}IXe+@GEs)=a>LH4l)T##XVbC&rXhu7(2SOQguFX7q9DeMre-z97W^BM2 zbh2^ur6O4qq1|@l99PCn?b&cykg2kniFkE=CXq!gAZr+d!dk%YpJYLr%Ly$shB%by z^TboccKJgdHzj>z{wC9Mz%ZAtvJk`iaPoJJdh;oN`PUzH-?<%4kx_x>-&o;d`RXtf z(?QjjG+5UwwSMihvtfR>)mU*)w?#pg_|mG}z`4#xGZjh6{z|xdkg^u2^zj52XLHyb7*GBH|Tt-p1Sc-VR z_=g;b?YMthJ}c<;h#NW7-3{#w%JhhE=e}!l2{7j4K)X3}w6JMU1B4I1FdtFc;Jeh= z8(tNsv?1zOkk%b2;hAyLp8MlHp?QM*sFI%(A$@80xj=iF^5!rx-I?PR4twOY5I5Kr{EPItwW!*p^1s> zL2GU|==56<^Poo@zobM;h(S$5kS5@D`{+Fmuwlo&tyS-JUql~5QM^Dxf4KqFoT zRUyMtT8dCe@a&-E?+qjmOif+$fvI&5F^R}AuE`)IC!Y(>*&G^R+PXEkfE*lZJOaRhkTc)&@7Tth{-^1`76Dxlq@a7iFxpZ@&t^;uC%ew{MW7einJ8 zz&$R8s+}HFHuYWUIZ;Fht5EH{_a>>b<);qqNXZkr10)ylgB*(@{Geg~?-~@_zA+n3 zmqudT6nRd6VsiW^Dqd3e%l@d~MG~s`37jrE>qgQoApgSRy|6}4u67m@XFi$$1MgSK zD$WT6|Go8iF*^1Omlr(M0L>)Rue)1-rh^3K$?5;ZjQ{=N|8*Gv3Rzh66 z#x#D4`kH&v|6$#lPu2NR9QI8={Aaen=zm)RXY}Ov?m|9uW_WcAM(O9K&>ZlO3FL^u zI9<}VfbtRT`p19ue_z;Dw6JUc-^-R5xNmAzDf6I$_!(Z6E3qF1UYINCO5q%-_ z*QWw5`9SxA|7{&QD}N4spt0+7mJjd`{bz1IosN*lx9h_OWr_2R@uXl%EEajGxI=82 z#I)zLy>4Dg6x*TXUra882`*DRm^Mafcj(WSz{8E`)|xO;9CxB>V9O?dSjvfT%45+1 z5SP*1q^xysNyHa@fZa^3R*x05*n}G9 zPmvy!oWjOz^zK6zRl56gPNer)ArWt-zb#62sz6l(?x@^pA;G&HzIjg!wv3vL5v}KZ_VIF&gYzA#TcZJsi)1kLD@f0hBt`c zymly7pFS`rgA5jMQhey?$*ba%jYW#ELYC#V3Ktu-wck@d=tKmrM_w81|03POAEgvr zHpE4Gxc2h3c=gytPNYBm?%wi!p`)x!jC|68iTLcOGjrHPPrN~9#)nm*=^ObKbOHRa zLcqN)D-FQoVLM>;=!K7VT4JV3w=UaQW>s;JJJv0e)dj=y+|QQ-Mz%n({RBhRq^?O| zwQw)DS_#_vBuSabIm!F}$(B2J4_G7V0iQtWN&q1|&;@WMecGX<=cH|T>;7C#12kqr zO+(hLLuJgny2GCQg?ot@!TPNup=FmCUOzq>#27zxy<*at&6zgDDINLp~fyzqW=@nKoUPzFfZOxu)#g5+^Xd( z1I&|vI@WHRoKXwt7}VHiSUJdwsZ6lH1e0AUcxtk!;${$>;&Cd0 zcnP6*3B*=%{-J?oY*~N!g`(WC>XO9`XL@kN%5N1ZZ`cO26e8r$-#5dg?RE>nYjw0$ zYpNHY#GlS~V*#VC^%NDez1J-3eiuV_nxG`{_c$2dhXU^Z;o`OSCa-CU$k2|=YpE`W?$ zBQ$w$5zRqb2q*LKtb#bSLhaxH^BrEGl0x|>ol`i4wvxeOp(1n7G6iyw+l$CV=6RZ8 zEBFEl=hCM!_Ucai)64z$lSBivf|PKHb@jz;nC&gY`XKNpKo@(OXsUsCxc6fVa}aTB z(E#FmR#8C5?Dx%wyvi!?DIL2SsMc%}XZ;)%(Kvm0rXg&}3L$ZL?+^d7Y!**Ddxfmf zi1onZ9)Y~D%9Xz2>csUKy~G=fPTa_veCatBbsTdR^n5XCSv>)b#Y+Im*x})#FGbS_ z>yE6zCxqLErhaq#7WxVsQ@X1~z~jKOW{U?a>?maGeJsb0<`}A;HoDV6sksF&qYeHR zR9sL$*)S%U?04k{dJK(|4AJyf8ZP#49MD1sDm4 z$yDzn@x>owu%s13M{5uT!5+S@R;!xRZaqz2_7`mr)l3=+ZQSbw0Om6Lx9g_+lusee>ufedub*5MxEtfwGhmkg7Bf6L#H3f1wfob5cbzY@N4J1MpxVkyy<3*(b<*9NOwf zE>_2h>d>vhX>Zr|7B_6g_S91HM-nJ*k7I*li%q9aql(Y}?*8?e_2B$LeMk`g+l@AY ztb^JKzrLK}XPl2wT1>=jaIUP~H;r(fC;U7eb<6FZ*^+S)Nc(x2^v|Bd3EmaXMc(iE zWkZ`{x_GZp#8ZUa+na`~Im>!c@acPvO$@01c(=x7DFaGs`l0G$Z&86Yf6K|Xed)Vfd z&l6%^9c^aji}In?N>InPD>H1n#oR7LaBXb)vJ5``p#HK{aV}G0hqUhypOjGYn*gvW zevx^9bQNg8Y!q}_Mr<@Z_Lx4m{o4FhtXFHI9acVilVx)8>Rc%|L6FoL+=iyDU|~(Q zxQ?=y+FrqT8?3%SFixtQmT z=J-@In3@(yNwec+Sqb@C2EmDXleY@x_L6#zR)b71+)J^dJD~*!Gu$w4mH;BtO+MKW zL!7HteR+qwd01F_zB7SL#a${6MtIg~psN87oI@hs4cMf)N{sQ9GqVo3n&n2R((1tS zGqqeR>BtqrO?s@li#0yuO5$=l@_Ou`G$CqtaM}~ri;4O%K_TvjiNc(5Y`<4|$f=oU8fo2m^n#Jo;00W{E;uGgpm2*8^Gv&6+R9Ev! zyVdjqH|GO}J{F0pmrdg2FYGOwjD^me$h>5UxQtAC3$!%Jj^Ag-;MdyGqn2?f^@$>ts!#tIu9!K9u)q`4a4;*J8xW2HWi@L_ipIkM23ia30HEVIM{guTYN~diHt_y3>Uv1lCs z`9^Q(8~!B!QypZUF_oQXrdEq20sf;_$5uFu!Qx&AiRZI8VJ_A%Wh-EuEVaJdI*w%3 ziz+suUwW~li~B|T2Jt61xxiD21!Y&N`<_kxUaoD0Yt=D747)3!P;XL=vQD+o(p&ZD zF8h5_Fj3Et(erLW1>=1-T1M<*)bBx z`P5ZqezZJkHiw85AG~8Toxje8{g1DGyG7~`&sZnjGxh_&engi>{;Xtve(aZ%TPgoh{8>cPJ5=60bhP;U zy=Kxc62@8nAG>}4c~*(8;j5-^#1JvMgufDb|Ng@NI-W865d#-U`Ej`zh5!YB?%I-F zf2mUXLwo-8?P5N#xHgEurzn|${shMV8#e9+_%SdY|M%Yg=}&6T`9%_n@5QY#{aAx; z`Wk%DU5ARoX98~gui5>NANxc8gJS=H#($P`FBE^BX6|3pjAe0M?G*3<{_x`cG|2yt z!T$O|EZb4Zwevs7I2+aLpWmvqHQw~9kqYF5}|7H?v?wR|G8EAnQv%uzm zuIjDfe~Q#2v5rdUElnj9z5O?VUj71EV1Tp#f0O+Cwfv=j2K`AlGz-^l0(tzd&tqxT zZC#W5C!h;_{b4Kn9YMhlIhf2=UhAS#R@djV{a|v3n9^ta91|^3Z*)8OUUko50_F&f ziOyQ3ry~((0Z9>G`V?{gm3@|Pa|~G%Zq8Gjn;6tj4`11&Y-~n^Y>ZMT_3OTFCe6Ds z&=oPu>oX0Eio2_aZC8s=R{P@co5Sp8b4l2uc{p*a@&M3tYZ>#K>y zD$OGr+WvC@2;{K%D}?Lj-3&LAZmN!kT$FnMh*atN?M_?GrHbz(uj4bJC!2DL27`g` z5`PE1rsZaz5p70>-LNv1nJX0@^-v9my`NaF{WQEAvl`17emj#dkn_qPTwdyr$*N3Z z3lA|E6~op{t*b?rnDjv zW08ETVHntC4Z!N2NAIIX-Yg9(hhay?85 zg?ITLZOqC(yTp@vt<85(cjXit?#kG^=rDQDVPZXYr>t2R9N{?|j?IW$dhDF=;h22B zxRj8(iui3yq-%y$Y~0|ola{FgjU~gWgPWNqxR$cdXwH0C=`G0f(SX(xAn*+cv>;9l$wGiCq?#c9e4!5DU!6@L zEF`r?K3BVAtqHtk$1cnK@X3K87u|Tq^)f|gJHlHd=>~JJ>9`#;L4`MvbEkDPHm&Sk z)5Cc}h-AhvihN>oMtT9;!nA&n=t0%1o!J1xCI85dwR7mpDx_9 zJ#cgMX_5|PxV65?KYW~LDa3JxART)w%?7J8dR;yyOQ?2rSJlJ0U!Z6>y7il#{qmdo zZ$7J@O-@r7r1DUJcFZ3wYEQO6^e$K3iM&p+vD(gxas>i;)Xc5qlr5(`a<=6Q{KAo4 zAV4TJPp3vYzg{!l55>Xo_N%caC;Y>Mick&oRSB1DT)L!ms7?`(IV@c6!#s81j*Oy# z++p}~Ksrp;|3#vS-fLEm)fGemUOKHZS?s^dzFC;Cs>NUbbDTAaq><=x6h4OgUyNw$$IeB;FtU|Tph|; z*RZ>cmUk-C^;0vyV;rB9c1oI}C*pvUBqqA({YNC}zw(I%ZyX7xAJGI_BAtqqKJ22l zv9&*Cp13~h3GN7V#~qg$PuA))241#~9OVvbf1TJ`c<)8@qDl2)X7&6hunq}}4f|Tx zm4KAf#TffEein}$8uL?iUXODVNuIvUqskL9=(^szjzA5YU{RYZrP-y<1{ZdX6=rv( zW1g_@>{1Ro+NhM?GP3l-0_)8Nx0BACSD`D1rZynkDiB*ke}8zrZF%=R)_F1JV^pBV zer`oV0XE)mjxAq1n(l9;U+8jQGKFI%GVXR|*UpXYa;*F&oDq}|JrExFybxoFQ@hDW zH+PNspRfVBzGkmo=?4)pd5q_VK1(gD$td$8`ebiw@eV`)!LaS~;3(Hv+(!;|8%~S2 zY%ANx@3{8#;SI$*P!G#p7Lk*X=z@YovxmZ$;6_%~ zB2gDQHb)dDGdoT-{r!wO(oFK&CdV#=|4SA*SsOJo5l7D#5}`-tu*WU_+*2s*XZ<`s zBK|j=OQ#Y39nQ6Fje=oCNE?)D9DOhRb7sP-|KOuXuKgXC`@@hS^=~ffI4lye85g)u zMSIXUSU*Q(%l!u(K4L?6c*Jhh(%mDF%X}Ehzk;o6f1<<0Cc$c`Zzfsk??G>I?f(^) z{Nt5R!~erV{V#~~)6E~wCwiWeA-u3pHADXA*5^glF9L#Fadgbx;0NaZ-x$4bHT`go zkiViw1*nkE|BNW>Rmhaen|#;^Je1yS9r)0g`rOa`;(XG6Q^uLAP`UkpCH@{u*x_Up zR;~%LwBO!Vyc7)f^?t~=_y%qRSecq{(sqwZxf2uworwswpZ_L*=ds(mR4AUh+8hd& zM4enP^)KdbGjsReX|kblKOUHpHaFXCR}B7R1EK18|RU{FkpR}bcL8g?*G zlH%b7`6hn)JPn_!nfG?z2A zB{xIt|1MG3%9H984LW_g=R+vt^4nCF0_Bf)^TCf7vTAJ)B&%g7Ev+Qi-Nm*cpRkVQ z>x5TBUvse168Lg6yXmK9m?sLCKn^`e*ZdECXCT&)`PcKu?GJQ40a;tmgi#e0=X<^c zMdvJDSn17XV3I@UMYUv`jF=wi`D$W-sopvqF=*xh-g(hV&oKu$(hvo3Mc1EOSz((& za5*NKILs4lQ-|#m<^M>zTD-8nR&W0ofk)98vyp)69#z$AO%xtj=wf;v-z%M|k@= z40F|f>AHZn9VXUj3nO4*ZoX`S61EZ}9S0|~ttZw>S|5|CyUHb#0=aPs*AtgdbdP(d;JiOsBl?J}r)!ryCU9al z(L(@`H_R!0<+<8oyh(^~K3_7I&pJU5Cm-guo>t&7{T?kla4%|;=pMHl0O?sz7b^#P z&mddv9t-#D@fweMTvBAj#5TxZ(@V`t-jXvmPzvA7*eh7}$*T20FO~wwy7p6A%jre` zvX_$I(zI%#uY#%3eO-ZkMGa2eVz6~3418b}4R$E-iQ87e^xVK76j?`paM&)W;Q2E> zRGF8}9yKF!gPn~(YjDK2vbXM~kHKQAPnPX{pnHQ&EV5k&PpUsBjFiNHKw0I~^$p1s zlyvE;_qe1;InRkBMj|F$W_0gZb-wN){Z?gU7D0KMAE0!aP`q*JMJ;o9+Vj(Y-WpzH zat127`x+HiE-c(S1q9sP#I1K>AbNJ>>UU8F2Vk^ty{o-bD+B`J`96(J2jMSQs zBmCO@P*d29Q3r&W%1|VBx8<8aiM~T_{wUpm$yl0 zs%C+)!y~3EfWS>N>jC6HoA==C+J3CHwrzGN+LD+0}Ga8 zJ!Gc}Q_=jHbR5Z@|0L3R9=BO^&V{;FU;1*huOFq6)D@@%@KK*#=AdT<+0vhnV}uEe zWUf~ktC!cN(F>pK?M>)g4`AGYK4*zRLtkSEc21%SSzf?lL_Dp*Vh>SJaHm>m+qBi> zReG=-#?!2PA6h(tMNRCQpjjDDgbmt+?rv^uSOl+7M`!lOw9e(Wp$)%>uwNxFgU|HO zh2f!1LBG4YDAam>vGj4=+}fz6jUI~B56WtbTulNjt@RWcX0cREX0B+|NCR8tZ+E%m zJUC@dZW$LPI81zV&Vi)A+kFG`arTej@C)=b?)RN5M!7{tL7if+rY!CAMUCBWL@{`o z2bB?}cU~eHBL|Ue1cdhq38$U25Sb4w`GHw7p$qDFLxTDpg&Ag=q?_D(u{w@yb>q** z^Qh!&amOAr{l?cJm>QPFE$Yj~r$3$RpI^5_tExN6!kM(ra;6+y0x_ zzyhT?56SsXF~(B+eQ>)Gs-kig4Bg*gJ6a0okepT=BTuaTs@VY+a_bnuJvyMy_fF&H zDfsGz%YDwF4p!L`-%Ze^pvJ6qQ3i%eKZz;^UOMLHa}=no05P&h2N_zn`;i*V@9 zL+ZYPNxV72c`OQ+{E*p*30=AQX4J4T)UEuW60(J=SsU{`3`S*#i|*-ck-k!ArMzFy z6d7Z7G~bjtm{hPcYsk)?cj(SgRTYb93`TQ07wsKBz`@bR)O%j~G~O*&!=2EqaP-bVvzaPezQD@eN^rgv>VfLN{zsU9n-3)yM&C zKoGu|XRmA*$tGCsOkH=(MLbbioA|m_1evgZmOv@p2JmW_1h_}0;_~8-4TAQIp05PY zp2x)?=yPYG~ImO-ueYmVHuw7Jn7JaN#_x0$xp62A8B9M3D)49%eKkTdM#x~E7 zQV7+eWQn0V1sR*Ouy`nF4MU%rOm@d&7ecJyB-^$BJd|{@LP3QN3TIMKo8pe9$(7@5 z_?7n>x>r+#0}3L24BXg~H2_B5=EKQ&f>sH4PoS-JLOaeStf+F*8}KLjAMJKt(4VoC4{O^)!x)cz2Fyb&~@= zz6`<6m9_2|G!~5J9+NWN>Tw_Q*IOiUk(BLAuV6WFwId$RN%yD=zm{<$%? z1dE>)Bto_)(TF|Q@vK5UVYa}#u@oji>7W1Dp@aJ1h&D)E24M{qphGc0|I<6fFRZ#o#`-Cx*p4nS)*M}|b4Z|| zrYuhFZI2#rVEc(w9;ul9K}|quX7t)C@30*~%{**}ZM*&iNB=H?emUN1{7>}}Ipyz~ zO|EZz!SnZQ9rP7gR!5=wZ|1W{E$%a2vUB5;Qu{@Th#=%z!}(f<+~H{0;TpI_~Im^jry zW%@a)eEu)XFgx;pWYzA>9Q*m%e}4PVGjjt%gO?s)|7+ybA$4>^>?c-##1`~RwJhBC z7g+z_hTP3syF24$=;Cm+$J!d|XPDPh{a@}whz{(14(hPso|x)>-MQrqw_rQdLH*Vqs3sFVKS1KQ zQs&v%Z>elIBpYDe8lzHn00#EG(f-e@s!Eemp4K(UzJXixTpW0*7gb{Qq4XG!tczuA zU1yk(kG7R*GXp)WEmcO#jFt&ot+!Ss#`UVlfmvyB(%~X#Qi8%uaO67Hl)i=2JWNp$E zPIozZu=FYWo(nBQnDd1-q@6f8*4VTIwP5mrn)T(k>)p{#h4LiwGxW_Ju(#fhDNDod z_7<=oD^)$shgERg49J({Lb`gnQCRM8;#nXK{7>@hey&EF8nke{q@np8pW*F*Vc z{{5z(LWkK6{6#o?@3d7?MQ4t?)s&+~{ZRL+%}xT-o0hv*46d*j42y(;e< z-kEpiuKp(0UoN_zeb&)AslE}I2`7C)V#P@^@@Ir>Z#2E^~e6{u8%l3eX4fc zZhqMfzvE$)hrF?nwm<)Dn@agKP??;@hsa~BC~FHoz@H$>FA}>%upjQrMC^Z+|2o+5 z7=O-~%N*ujF0S=zh>$l2$yeM#oRi^?FYftlIr!B1v8zcEN%~7renn#nBe8hfVS9a! z!$+|XPnh2(6wvWx#=1v6n)Gr4I&slh#XEn=>`;rzN2L)UN`${PxWpcklvYKfB#~9# zI%}#4@UIY|;JYZga&hT#&FwV#3cbEheP4i^tqF(lyaQ0A|J< z>^tf+*!`#!t;}H-zdTtWdmni*UrBgGR{e5mlQVOa)oJstw@nC_9d|6{@mB8U>Bg0d zee)k=?>Xn>Se@CE*L|R7TtA?XySu%vJg&)?HbhU zfzg4^6`@hvr#{ev(pzUK^*2jza)XsU$cJorpdp>uuR2_U)1tPv2jD;RL4MwQ z{y8ZTDq5pMzjEF!aC$`HNFO^lK6-dD37jUnHP=F2e|2tsl~gmT;9t0}-doAldtBV( z`h{N1wE6Mt{7_ft&%cX3Rdw5D<62qBSvlbgS^w6l473W8&;Bg6n4^#N>6l6x;}oE8 zs2P`PBF7!C8tEl5%5osZ7kMj-FdXHR0avGt16n}aNm z+53{~MsdmQi9#pACX1_tb6ak7etY_QkZx^=!X%){%h%ECbeGV(5UGQeuZzYCnb5!$ z&R$tvo0>-X&u6D3WJ@Dm3najtBbwjOeXNzybm^Y=o7@DW8`<&!aldoyeyK%_uW7;k zm`?WSJ}+G!o(d37z}>2hi_wGQVlwqV4Y}l}mKuz44#=-t7(qgkW%XOA2K6IcD`Lh= zQ%)%3FpkhB*eW8)`Gn)NT)yzgZ>*DRq5@~%H6lilIzkL(Y+{|KEndqG042sm^7j#orKv{|}3HxyDnZ~nf1ydc>(#e@B@L`MW(>>Dpa;7mUX8K|E_d!xE#WA>Oj!w_LF|R@|7Sh{xtv7$hlTcO4n}H@ZW-n$4=Z_^NPho`dZNl#g0UK$PrV(g< zY3}mG^MdS8&#O-$t7Rpc?u@W2iG-88{offRiM}zh(76_vklOm7Q^Re4t2H5vEzCV| zjWNTQR%k0us`jM!C`m7?$#oeSdU5|Ps;+U7A~AVwM$1;hDZ%3Vip3>;XNT-$i{0Z% zdma{tQE^eLj@4ne9ls5B(;a$>7E&#(n}zMQB0Vm0*G9XvKE-K#6q0hBofdLrcRMz^ z+yXuNje~fX$yo@aqjPI@%lKx<$3$+8ReE}uF|WJ7Z>2T@0Ow)!3j(huC{Aq_@BuXXw?4e=|i{IGjZk(PLlx+zi#wC{XfAfIhbIozW5@=Nu7 z7T7_x8U=CHb^;HFh|(4Ys1M9FfRrU&_C$P@+|*R@h27ROsNtX`_l)~!^cDkbgTZ6W z-rlc#<@r_Y&B|h8BZ-qm2ZbR=Ao%lV5o9bdj&AN$=%Mx@NOD_c!RTyzr#la{~gG?6c0fNRd5NO;n-&VB;Vjs2=w$f~`jW?gRBLqyahg@NxOmO~A zTyJc!Uge{8!8`Z%s*%B~q-Wr{Nz#a|-xrpR<$@i96haRpU zX4ejMRzjjp0MH>RdH`6U{}^sj%`qt1>&-cq!R6Oj!R@3f?xvmR3tQFheC7jeCyL7V+pK579q54?DD=3E!B9<7R;Z0!Rj562q4aO3q^ zKdc}N(?zB!o{R}SP~C;E!%OiK*xyF!*Bk7T?X*yabutjPB|!74d@B@(g&#&o*I{G5 z1YBLZrg-0MxfcsCRtrHkXuijnk0y(`&*8hE_nnTlS3NZ01@Z~Mc>A*E;@5=gE0hk} z3Lo{$5!)_XIIQ1D_{fp_cjyJVog-X~HZK7D0HpU}x&OmH;0A3E9$Ui97t9gm+3*8Y zdg8(Q`hPSvFTC4GWpus2&OX@W=en4){UVNWTWq&*A&UXXN`E;#A^*a9HJ7!KO8<`` zWq%p6M3Nqt_6S0^7u?{(G>ZL8UYh(5ith)c@)}tEv*w$%{zboZE;?+@; zvvdq3cWMKsx#xdHcdwy$WtUNBOwsCWPWKseW;r3X3Jc{VAic8;16(k;6uZF<+cnKF z?7pA<2g+wRc1K!bY3XHW`7zMF;sT}G8s1?eam^wB!>NIk>tjkf=Jjq{u502tS>@g9 zO`Tz_r0rH=TyqAcm)^ccwr;M;RW?|N*hUiC?_s~f07*(5;<}|x|X)UteZM8UG z`Z8E*__Zq_==Ss_aF|ys**F}b5Sf=#bdvW+V;dte(}LwUb;&k8f($3@pIy_DGKqj= zJ|Ct4#hPj_a57!>dYa&oGbby-*LGO)PFD5)(ok^X5vh|k%VdQA9A19O-4^)PLCRnb}v!9G+@G2t>!F#g%6p}9;B+sf*K8N+fNiw~9n(oKj0cY~kYr&LPg)8KFk(pxv*XQlARC9>{^9Pj2sbglWB zx?jF&&SRYkWHtRmN&ZQZ%6f6EE{|BeDhd6BdEYIlaqCRrjf?_+-J8#3)kuyJM?GVA zxRI~P1|P$$pZCdbCg$%z2j#o+wCRCLO3F5x;cwtcinJkPLxt3E(la=w!!*1(+; zN!XDMRT32DRdyycRTN5yU6V%c`2+Il3Q>1ur|nnJ4=L}jo2u0dM}`!xKeo{RU$(9= z?LbXTZ0}9ma5{5I*VZ0Lg2T^e>vFM}{65sS+$BO!qsTwuCfnvc+dznX$b2N48Q3qEpZ!LMd5pPcI^DKw)oCaCyaKS4H&*V|DLlNu8n( zTP-2f*keY(0#|pmxni04&Y}BthzOLgVbBYNd)V(Yim!EfOAzqH2l_-nua?Lw;4oL9 z2%qUd!^#|Q!jFW-%i_ggVDt=~>7+AO{guMo!~ih8W0+jBQ(@PX z#}HN$BSBAm8Na<4kk%6j6egy`>i0XAkJMIFy0bOb`F#wD12NNM8q92z!acsI;sm?jB zLiE4MpTwb-yrg{g?#RH?wkKlk0on^6Jy`9^0@791(vQL$c)IDhB@r9MV00JXpdgE= z0O>AdSRlf(+-V3%@sfYrXo9~Q!jxPKkRIE?(zq$NxkJ1|q|h;xM9$W`GouZPxt1kN zA0^<{ekmelU5OjT>z#f%{3+rrqQ?tW+UYS`G!om+rV@}^ow~@V1mSPZledO5E051C z1&jbI+(gb433EF>8-^wlZHbDUZH?T8RfFkjNhc5a+C9r@`qkJ@ukOSZWf#Zj+ZByV zRquv+bYE_DUxCH!0ep>ye(bEidurGH@ggvAqj)>9Yo&MCSYy0{J6$$>&MUAW;NdS{ z7l)=*=Si-Zt^tBidE4B9;>yv_?bdfdpV6ejo50v$@znMw9(*joSvhHQBnzD>!BN+6 zgcIK`fzJVcwfX>xu$#NO!b01FUye#`lP;7ANfr|AEHd1V6fN~a8qZ+TYsnfyaFZeW zZVhcM-jN#SWI605bkZr;M6H;t0Z}n68kl z9H*U%z&0=4^J_bJ%y)icT7J9cY$4GZqk|j>~@OXcPq1j-a-!Ynr@aFl4gXL{w6>rskbYR;pd7hkT+R#I@?2$*;?J@2hH;Vs9Iv(oMsV^i^jY z`SQRB<9uJPNajy1+3D@5y_F#=9;#yv9?~9@&I3jap4I02w@qr(M3^HgHdF0nrGMnj zk``0Xn*s?x2PtXwAKeWs(d~8mKYk7Q54CcI+X@UT9^kOW zLF+qZ{8CbKh0Z=P}>8R2!`&N25WBYS#k1Q<$aWDdH7sRt0fRB1h12F7r0Z93?$6yaCGI@w&|q9h^LdM`XLXqHs&Lo2}WoVm!B5$+p_wn z^}i^(7b@EXE*9X>J{ngqP}Zsv9`@R=N~%BZj4u~0pV z)HwS70{L;QdyQstm4wfVD6wSR9vyi^S^UoQC=PzFjfOeQaW^rnDcjjcG89zqT4CVL zLweHRx7eyqD{ZqN^Y}f2aTPs9;cKz%(zIWlgEp#hJI#2$r0D~!m1jSWa&K9KznDg? z!h(AziuNF`03vCje`GEvKa)vGf3s!A2%ab5QGhW*j<&{ty$(W}+6C{bb@D73t7_yc zWNA6rZJzzuEb-P1lq2`ps}Oo)f;+2lN!zrPIlzH6ulC@Y`d7m??}H713+oS!djp(e z{*+l!lVsX(MQ+mNbCsGQC2TmkLsC4B-RI!}!e7v6rDtY-`{CYDUrw))pWiBGD^64Q zwR|kR{a_OuvgILO+`|)<^VUQQIb^vqprm@lcV=)lX5#?4EggoirVA0?58i$~?rg+F zPV*xMbie;oAZV8bGcs(yAQv6$=zb)s+baSfjAnvO)Sw~5?S-wRmAlQAcQNpJ-6Ox{ zNjreqG4{DqP`eOqVL7Lrs2DriAn?ADgb9V#?p!WF8x&v0(mrF&ou5j^xb2_k_!J|W z1mO_t{}Oxh%V#Nnwl~c%$LeeRn>k{PImA_qc_19bO>Fd6+@|ZMzg%4Ts=c`Y=&YRx0Vo=6z1VP&IJ^c-Ut;*?$ zrTg|9eVW-_gS79F2i(vHYtMI^GxT)5YDD#00zwoUPHwk;%)M$66K?4A^ld?98XN)n z@8W2Gwir(#%Xdt72eP8d7Mc1$Yj6D;eDd34^ezr64XOq%oAh5Xxg}viq&us?Y|Vr^ zs2m0nNh$qbpcXfbf1LjUlBCox^x?Wk=1x#6kwDcbME7KO>tr_T_4IrqGa@p2U^StY z({r}jcG%03VY4hwhNYz=i9nUm~NP$9^LQ*<2M+HQp> z9F@$Uv!l0p=oPm6v_FWLmD2FBZ0_V|eCv6+jM$#GLqJ)R_>bp?r$m(K%V{Q^RnkEm zH@7rPQv8}|Q}HaoS5gCYz`VP>T2njwF@_U1K3F%R&q-=+cXeHJui+zwKNxLqgT>}5 z{2EF!N1?lyz9G)Wd;hL2bd|wZl<*c2aur_@Smxzioup zD5Bb-P1CUTRlBCp=c!M}KB?*dcxW1}B{Jo6BV}oihdQBOLI>S$3w!TUpR*^K4cK>!H8mcP4>E<*U!gv*6Y51V}LB-nLvNh(qJyZ1SGLMp4&S=VagdX=-QFb%%uM@QJ?m{UJ?fWysM2p=&srb-#o$@05(Oe|;K_A-#DxKcF`Hi(N) z-IdsURRp!rqZss#g6?pTxb}{P50dxS^_u>Ae=PI3T-KG-e8vX2rEO%WQyZ+CSEeB74weQC+Sk3s57p=m89>`HNU6iW| z`!~2WU~mkh#`8|^DqmS@tiIgh?6v{2iM9HqMcwcsHoOOVh(kW?jU4FQXd$Q{_ajJV2>87 zjF7ODsw8|ko)V)?m${8dW{Tt~W3C#~YeJ#acs(U;Yf_7faYI`pwn87l(`=*K=1p-4 zv#I3R$3xnVYv8Z1na|IK`d6hygiz%s*iprqn9|QTwl{wrjk{Bl-W(~8C=c1M8n4-2 zEML%jS)Gno;RI9Aj)jZf z*g;Glc2!M;5J^x#e(3H3(~mn=a0}96f|eE`B0$vPeoVPcSD=@zDAHSbarBht4yrTSjDwCTpG{0g-VNzVp+j^&*RJnjvGa^Qf?LS0Xi-SN9kc{MEfb zS_H6WN$oxvgN&Nj3=Cmf&d&nPUP43oqQ@JmED@&WzZh4WB>G(_!Fx5TbP*sR|kp~*7}9n zBD^D1TjxF+)NRgz7VJ6Sxn(|fI+lzbPgmWgUOP6liDriaK$pB_lKi|Cm-zs=$S`cvK^Ir4i?GMq6{+Vw{VgU4TGm z@%K3eStFB=j-cfdhhb2z+TlRw|J;gC%zPsrEM){;MQXZ0?+v- zYb2F_{pA6lc*dI5obJ0itSETxlIDQqCFo6{gQ;qnhZbr`>l1Rc2B)l*N*E~hg;U8bY*=vcKxp>NM0QJyHT8T-+WuG6Qx{>`6(h`o&|Ie z1;U)!UH$u&|NqiYn1@?{HKqS?oy^&yD$eWAeV%3Ve{_9QnEQuXS>FpO>_r4S$)Cah zCVVPhS;LR8Tx>b`?ssHh{%flK8fD#+_9r#`(qecc$POWUz5zZtXszF^?gh@S1EmH2 zP21lWj7-E%LQVp(Y72FwfVs*vERX)5m;1i2_$OL;sUgP^(d3xrcT@)QLos7_4s=h> z>D2y?1plq_e0o#6&(u%pF4EvvZm)yJ4{;tPc3~&Cg$2P{EEl8bA zuaxhg`7`hT8T{{pC;TtnORc~u+^N3~0o&8|=U29PJ2-;CGt_B)pk#^%1nKjX7+2g` z$J010Au915zo%skjHHcfp<~D0=3az5s-Cs#zY@12L`8KYt0P1rR0`CwzA;Rh=V!G-s;&+Yv+;L5>IXC%(PTxR}Nydd1BJhl%++&QcOWxLa&+q zx$f&}N=i$r!bKa~)f-4Fa`fgNC``YoX-s_1)tfY?2l_O=4|yr7777RBTazunye%*_ zMIdv0T|v9h%953G9E-V6j|nJ|rG`qu;v8&CSl?ZeqZOsN8UY_XaS~-JdoHx{sq6Sn!`!_IT$nHfB$7nh#yhFw4+e zhAr!ha=#9-2>uHxopnA+RmwYBX{-C+!@rEXB`8(bjkpu2*O<&I2dxX~zi{VB>l*|M$lnaD<+Q~Dp^!63B zMMGo{87x#@7o;mUbZ-Q6#Ej#BX|vO`0}EA0LT?20r17rqF!F0uCkFB_JU|ayCK*if zPx=?C$Gdo#xuPEY${sJvY_3a~NQ=W}_A9}J(jOnMF-GMW+nOSJv}GCU6Rrv{HP}3m z$;s6iHHf}l{Hb$*w3lBiD{XfPeQXe~0b9Et(K%c^vd#1TmfdLn9f#(M7pbB48l z8V5bpSl&E|hBCWliG)%s@L3J^1w*m>UUsAs%$#dBV&H+QfZdH+V%r8|>SDK#*n;e` zlarSs6cWHmew3`L%VP|mDiiJIxi{RZ$VA#+&JRYIvywIZ7H6XT zg5L1^vUGZ3@>EJ3E=HlbR9e)lgbQiz#FWR?8(3Qq+k`Sz+TFc8Dpowpb1X1J7Pkm{ zvT0iER#+t-DuDL6)M)WoIO=m~Rg?2fP#1)WLsQmE^67!Mh$`CLcQ(LCCTqi}tHG8v zrgf{v_IFR`>#MM{=R7mpU0N*j4b%Sk2`2_4G?oOf_dead$#{7_frB*X29Tl^H`WF^ zTqN#mz&7(N8GOGi;V|saR`u`u+Iz1S97g$Mw0xlwi)yuDtQAD*rfv_W2|F)B8+EDi ze#^&xpB6q$twAddL(=3`MrD*ih_pCUE73iXwxP5pZfPG#b-g8B3lu_6`2zL&kPlE-3&C;rwfPn7=t8d1) z`(AH%i`uriXaFFh%EBN&-H^T-ZT(fgNUQkQM!rA#Z8db5!HCB zAfQ`27tr#tWP_x|SKW#C3^cCc!$6}>ij8HSCu_|C| zD%dH4qxKkx?#9LTX6sN;PI+@10eQ2pLqCaxIz4?_F~*2_o{RIcJn+opJJY0=ew7C-u8)eZigo zt`~_Z&ff1GMd2&0<5=WPnUG>7t z1RJZrUzVN=Cxr?7xJ|OATM#(#yEgj!ifw+$?pF-yrf8XQKBhJY{;!Oltz0=F>lLG7 z4?VoSa5-mOT(z$_(%&@x+_uyBHV5Yf4ifTC)C!+4y{?9h!J$u0iXE#*1*HNwJE2SWS}O1L8Pm^INj>P`?yd20sSU>1*XbM- znhe&04jS&H(upZY?B!Rs-O;i!5S}b33QyjVGiEA1zA&{oP4q~zFs?j`RPE2&l>6cn z+)tnBqUl2h;du*J7Y~v1q-#)qZsH+SMt8}*)1gXd)5YVPMptv^(QW10N!w$3Ku?dy z;`nh?dhPlat$_gn)qrFp!Ab&(IELqeo;m5N2Ew2VK@4}g7blk+=`G3D4{n`3JLf^3uvnI3ivnMKAc~fM^8wC&FIAiH(0IMmY)M%v)C+(vu(rLt zt)!RgcXM+i?q$xa6@A`t=Oz^+)D2O6jtLt>FM1AVsjaJb%M8{uj$&L5PnIJL$3{v# z1mOBB20RY{23()x*STrg>ovNdYgreuX?GZb%!6`g4eRWy6$u((st@zesi4jll}>gI z{dMT#m#LZ1TF2&k@)K(BUDaA&?>G{8vDQ0+V1AvkHJMsOYh6KClO)fqTPnssH&L5` zGvm6A1<1(LTBt;dONyMz{8|+cJz!?009Dhs^`(W(!p-2>LTis%t!!G%X<{&bYg%Xa z#Pk3)&7ayW5910nStCqGhe#UeqGq$tkRJw2HVuruKpK^YX zy=CRCIMD26t)+l2lk4ZO=V!H28R?>cYY1of8Kf*cmCLH530@MGwi|327@(usV-`#o z0HiMX^XBl}9Jbsd<1A8HJ89QqDilRNdwf#Uju3^ngz6q=@Yy4iD{nd3f6UA@@svp? zAIngIyjW+5E_PwCD&f+x0MXB`SR27;a;sX~lB0I(Lv(j*b8r`3ty`s?Z4iDKKZtk$ zG)N3jwae8z?as0TTI~P&suSG|1F_%d@W= zDsdYAO++ML3tF2bAh1F#T9pE3SRS2pO{DMcG4QV`Z?dlq29^|_8#llGnJNYF0^jVd z_r8euMkzQ+{;JC9VF6Q$$+Nv*XIp2_zczO~S4*2hGECl@rD4uI;M=xnn-PlBd`;}% z{!KsH-QXGTQ zJg5LYkQw6^gZQB`4(5Z(q3K}-zd^$(2jf2^2PGAW4e`OxQD|EoVdHRnN}ixomr}YK zNfw5`&kf;*e;Up}!YQE`cd#k+$AtfT^Yh=7{e8jNe{aDX#^QfQ){I^Ihr5BJ|Hmw(cg#!G?*Ic1>xn)I zV#+F}y{-UC@t=GXT%+&0w(r>zKSU0ga`9dG&let97mD8JZLPRDitv|hp`P`WIDLN} z6zetk6sOgb!k^lIzZe~om^EN{%X2eIYff^h(Z(!othT_n98l>7@DQBa2MrG!XZi4D zh`nAC;6Y`1Jtu=2{Wz$&FSF9nOexbtvDs?VK9XIs@l&ea_u@OE)=5|;eKdcI1ogCt z!n&z@G8URmNs%4<8zvFq@ zp@vST%e_7eYs$CyB?s$Pzk?z>33XuS*twX=33z^1dWB_qxuxcqZ0o62JGEG4dIGD2 zmhVp~AODP5e^fQu4H@Km(?uzRc1L5t{9bgcAHi8xrEoCSqPfZVCU@H;AVW>;Y!Dn&8E`RoB)T`oKC|QlGDdG|)J14sbR%)R z17@;2&K2a*Fp>N)=CXBY4ln<;*c&g7Bl}qfK4X}M4>YG`v@-NGvie=W7aWY}n=lrV zXSjSbH67n}<8vKh@^?i*MiV=e_}Kax@};Y7;p}%IdmY+u42Y_P%PKLAH1%NrLM{`En9?#5BNru2MYp7ekF+ z{XzI0+W?+vq<@EkzwVda2P#G~x*pOyT&KMwdOasHL_P*zhdol@2s_V;Pvop)T+nWFUKum)V^SF1z)YIou)bp$Q9)_2(fxA;an8e zd=&QTD)*5*Y9P5)=^+*+oMvyyUy z)cX)}{J#Ar>7y^AjW<@a0<6W8z5Hq~Ezw^fpMrGMMAi9o`Ocro_ZxBBm}MF*IeW2M z$FaFHs4baxwSHSUuxU}MoUv)WgbU8~UP^)Yo%(_w7O@8jU9EBZgmB*{Y^ zTnDxgazfqj(bRLsl z)IiOM)&9&iMuYp!rA!sikI^!fm`o$iaqwa4c6eQwzjUUb?GHVVbL;B!3O>@d?KaRk zcqo(5cN)>FOr{15`V7x?@og=j1@QMI4Hdgt99hW%^eOBMOYGwM5rAT8>X#Y?!@!eo zuVQ)%kkydA@K}dAzj<|Ph?^N>Z5*2xz%Ov!X(v~=7f`4XMgI75xkH(K&g-KB)GV|W zOnbUlIe)wx1MB4;m{6Wlo?#KsE|pzgfn^O!P?$ey)vBNCnLLTcv8^O#s0qsN4Cd2-KEa zz)JVi^WjB?jhNb5ODX#_Pa?v${U|y%6Kq`MW@ESV2vYzMMQ405b__xG7rAlLVX6mk zm0l+L1j7qxOq~~suGJwLUB4^b@gZr}g_vVEl(b4@eoh^`D7 z6`SAaVTraSCY_Y!7h`bON+e@YYQR;``yh9tC%TOn^J@)f3Ux!Wm^x#auuI~=<+cJu zWYcB3>3OO0nJ&rz4cvLSL+4gYSKjC1vH_!s1|x>`WbI_V{de&WFZC(DJ@XvuXR0=) zHCz?|+Ipm_kB7#Q@Fn(0SUzD0Znm#li~AVNsAommoGYO6ZHT`%w^A>JR(H75$FJd@ zB=~9#t~|0wc=U&iv%>hRRwENr-($HPBZ-niI@yy3m(oZ2CD*n1?RSlc<##t+HZmV1 zx8E{(*-u|L+6Q=Q30?% z{Z23H9fOifKnL)qFo_5Gmf*xIdFplD;%DJF-t`?#iJ0F#v*V_Po$~vc&pil^ADg6(>*nd+u6AMQ z>y=(`>hwp($Jc~}v~F?UCWghf3no}hf)Y(Y^mB^xC0he}m}8aDU1$Z9uE^nYEI#}G z)P5G>{Vt;xypG?W)qxNU@aO55JWlfuf#&Z9)5_t$Io8Ou6qfOeJKWL+=J_r2zPR6w zgIUy0<-14Am7M^h=7`BY8De@cA)bE1`^-We1{#<}Yduwz!X{YTA_Vgy*!NryrXYX< z5fpnOVIr2Ef)OGC*`E0&V-;{wzOHP;NfP3str{+dLj0(OX!CU}T8o75^uT0T&PdgN z$@9Df(Sv==THIQK}rd%h?#k9&9}?bkQAPt@%{z>0(AYTV|vb@c$FC*$C`$}($2^QNCP zrp;$~SSBBfZl=(#{tgPvY0!zfE&=6`2^b~yyF?+;YuZr1!Xr7q+%CwD}ZGWPf&Xi{nfc~*i&B9O9VH+UQ z^MHZ6h@d07x}p_apr(;ue_fR+GQ7u-!>T=!u3K+$v73vr&3gBiK%s+~x`BvKj-&Lz z&4OQedWWVyyzBQaN;TwnO&uCfkmLf~)ms|`Xl>Dniv86YkvB;4`A1!SwXZhx>qg9Y zvbEP%yX^6H_&dcf3_@yQB{&w%_B>}kS3R)yuy4e7Me{)K+@Ne*=SYf~adnNn zZMRI*t(EruIB(teS4FNiGN5%=)NKisuN3hIU;vbGj+;GRAN^yk4qrs6{xL%TP58vU z3nwgl5ToO>p4cCo(%J`w7Rr^uZ)D^k2I)UFlchL~?@A69t*dxu;91#K`IXpV|8O2+!HiykXuRfje7p}KKtZ!ihaC9cKxHQ&*A~YU$=}m!s3J| zzh}mJgtAg;NotM;W+t?1F8p~JD2z6FO1njexZWY}Zz)!re()Dw6a zVBTAzGc{xn4nJ@4Nc*AusBd$&5N+7T!Jq;$X5xFspy7Zm3GL?@a2u$U{J5Bf;2p?8 z*3W+3Y3e*YLA){^GjA4ld=&E`zk04MDxp#Qm*SDJO)B|b`90Yz9kmNs?eBxHQ;pXVg)%>l}neH^2E4sk2cI)U+i8pk0KFA0*0NY&% z#^3$WDt&Sao|ujOyxEZy*^!C4@IKg)h}nxxfc3tWDn8RVeXz z7-_$iBMb$JEi%jH{eaK;CG7!aSPAsM2PosO&&-?xQUVf8C$ZUjC^`4eQ^@+9?0cGA zy*vS#&n`A|j zKunv%+&=a~r$JXUez$GA&-ZFMWD1JiG6uE3nCMkA{J`fqlRdQLRKZRGP-p-G6|vbq zgTtK@2fx2GXF6!pC8*BIN+S3BL?NS(O&<9~r0F{JnC-xHS0IEFI`lbzVUEEaxL=hD zd;6;79hpHs5CBE5L#O9MRs%de)dgpDTEJh4&ZSpSC&T#?f!JH{K~OAxR+=xKD@y^U z;MJ)aKRTfJ@JUtjIa0(6UgNZ;2cNPVr{-cz^$WjxU~%|a@-ssX^Z9I^zx*bcCevrh z<>1LkI>vRZ9!=LaTpH`PjlQrfC_6}_a6L56`nX|LbL3i(y~`4_(ziL!ecwpv{E2S) z(07bz{BQ?m$r!^2l3ShIKSIiuFX`MamYnA1zVN#rm=#l11gY3#^hW+-^G|u^KRf5n zKFheS0WXva?I=d&$R+7qqcX?*m|Y7Oh!_^0}(kJM-alx zWY0G?0bPMq(5Z?>JT&5?&|3>ay#Rd^%JMo{rd`jLX9$(4$JN_jMe6N+QOv+Nfo4wf zjxKou9gQo(g0?Y9vtpb=y__%B*k+?w=ChJRd;t_zRW%bIaM~Hu;|qmwXcZ zD|tZpG{S-0Q~*{EM@o!i{3C$!_rU*_${=Z2dEfndr>Q_nB4GKanEnzSrIX9wqthcu z0T*+!XGk?70@_v?KtNLc-xP;8dzn-M+X%@;3{TtDpAh49QYYJ|CiQ9n!th_l|DVDC zF7QSCYce_vJqb9mos&|~pLo?z$A89k?EC&wOza?ILy4NN{C`mF2^+#?6LI&_Ewtr7 zp!c18jEb6#ujNBrfOYo$2B~ZOPkW94R)HNy<35+rr!lZ|WpvmI-CFo4C8g*+EEdjA z;q)+c|D8SSNtXScbTn9-x)vdSdsI#-d|BL)lJe^5-MlkSWx1p`vDdVi=tkA9W$&+u z|9BymsCaNi`*D?CcfgTQ>Z_}qBkjS9KQ7-bJIP9TvdsB1QN0`AJw?fHp*SqrI&7sa zv6@$%5Ou*(GWIFV*S&DXODgn+Zj4?6?D-rp@~Tj*D$&!)zdKsh{yRj$C%9YW^fnRh zzyz2ueWegv+Rfq$>^d1q_B>TK)S&L))&ys54Qx0fyPde$-kd&0u0Gzy&W=82t_f0d z8(8_a%t$sd)NGt656P}*M>KU-Jxo+>Se2XmyRDV-%iePCHk~Qx8MOcED{yxM3o?FWbCy45GI!`)(GvX4R7p{rv6%OSm*H; zI;YlY5nfLlQ;a6OA0~lOH8_?vtdoR%Tnru%xORRcW(XBn;Ji++C_)lf*3lRWDGN7g z7O&+Dq#~_+W4^L-vMhJIpw z+`K((khDcl0B^o1d_*}EMz0t`oWX7WR+rRw)Kl3k12%I0n2!#b8^qx>BGkRhEObFVaxEAowd)9eCNLOt^A$T{^L{znolO&!lg2XN%! zNdoH=Oq44Vd@P}sh=wL8%w0N_tyul+*uoTA?Bfdx#UUW>i%gdg07Goni%K7DsBpzbbKdzDEZAp(d|nFWP10POMjpe zBCYy4jP!J-RXZh*A@iynfHI=<0)ES^rK;@h%!+f|wTqUWh3Dc9bZsYxNfFGyycLZD<)?yIx^hq;o^2%<{B+#&wRPdPO+wHjIzn&B}s)^lI+M>7o8WK-9Dn$8l z{8CAOP~gC=tA9}c+QMeeRX_Leb*0N& zR_F9ZK9R>;vwWmr6_(0Ljo9-@w^L{-W%ChY0`JQ7YF-|}{PamZ&w$?zf$GtCL)984 z|0coV_f?nPw2l-q2vaw5LKG@56vA*p+2fV1*Asmljo=fVuxfu z-RVB3f5rCi9Fz^-h>MuN{p(!iEA~9EWEhZ3xHqcC>I<`4bR5m5Lk5#ba1i}$0Fq#4bhDAKPl z2ma_@`6bVxuy~eI|2fR#l?O=b_s&&_3+kP8*XOOr{Zz^A?;RWixl*Mzz_duu;_&y4 zK)vag4n>&J*}Y|C9B1MBsd=ic7s-J4*z<%R#tUi|t=n=TUWL;tadYT_PGPZo?|=)+ z?5t?rXqIz+15FD7e5Fi_d_3>hwBdv82o%;nx=`tUj$XP^t@l>^ z$Itldzn(I3+mOkXy?|Xg+NW#$~tONXV0~~gC9Zd?&N`r@JE7&m0 z{AiG_?}S8~NP;#d7U;b}A?~gPrpY90t$s=O^p6fr*OVvtRtI8oy1>_4+{H@{tGr?$ z#*iL$$vekIOv;0W{Or5ri7_Gm&eHCIfrA`PosK-)`NpSuw~O;;SZ-Qq)Aj^k0eMam zouG0Q)$Vr;^f@u%seLWj?UPpYTH7T}2Z{qSvi>0JGbuU^qhgl4c#3U&O8qBa&VEb+ zmA~_gW9vfx`PmW7kC~U7cx_7cR;86ji4*^In=Ty`0m92dzi< zeUUG1T#ib;70pVZB=TZ%lx4dS7qWLM6IO3u%b2&TFZ&m4NQr7S&yvOW6O-@$qfr5A zc0yFe$oUQIEi{VYUZ?&j88DNB99b*vKyRb`WK3uC;yTT7c}n zD)i@tbE9(#pk)2E4x@WY`=lY`^C9kO(;gQuv!2cjv|4y$gl$F$*8iqkl&-0Ko7J3poJ`7T0G~DbvLPIe z`L^B#jG1!q?MuzdQU zdX=x{y2q_m|A4>J|7D=X$1K!_oGuXUr~r$YwvT52ZkPSJLf1jGqi_X8Gni;hSsf$( zKzPpQ`?P=C)<1)eXG%fX)m$&4_2=~$-ZGv0AM^Hpiq5rp%%iZpy3kwh40EwE~U0ne;P=k*k4e4e} zUv-zYfB}CQ`Jm%YtNT~^ zxi0oBJRaibcqy5zj6g6?%^08!#Lv~5?_;2L+i#FRT?XG$ZG*2Wtyq&1D~3&$oTwt! z5+pfEC;8LaJ-T*)yDoROZs?IiIZ4@U%no=Q-f^lYMJ$o#CTrstAY&^;`kZ&`@9o() z-y6*zohsGU<-308VLP3+YI(xZj+?VWr1r9GO=jZfnvtB@s~$b9oC#@ z6iZA26xS3S>DZ%$9je)=(IEzl6+ z=GOn2PE%s>YjM@n=8Mu{fKZye15{>xhNSzkqis-zz7LyH+8ZhlSt{nAjRgs5Y)RX} z4=`DrCCN$M9unU)@O8(drREH;K^-lgdcJ@;Du}4QZ6L8l-{zddv48l&V%}$$d&@8VO5WW3RD^=Lm?bId9X%ybHlqt_xo_ve*PK?X?|O;rQDL!~b8ff2!oj z@ufe|emEbYoT&grsBPGqBd9W}_oQxJ+SbRmu1<&&D~++Zr$`=;jw<6a#!Dq{kTBPj z5ib*Eg!v3(36R18DaEbXY$Wy(p|4S9Ra1PKrwOuK5izBNvQ0xe#i5x?tD~=$X8QVi z>^)!es&m^j>?7>$pY&gzG2NcFl=y~iPH#5C@41>tDQ74fGSX>4_$|FRh~z%51Bi4< zuxqwl^9(@Q6?2`4h62~To`?s`s#0B7*wJ~)QkQAG7n42jXNWCv^^Xzm>x-D($z?}a z4B6e?YUI5)GxHNxv%RuBm0pG#;Fqs z_Kz+$={gT-{V1cz93gyrJ7gb^JI!Q{oyO_p4e74ZL_E#kKeC8S2PUJ(UP_;;H#8Z2sdwq{2Q%1Gau(b~R{7kQ#KyF0MUY5shI{eGB+YGOU8#dYa66bW z=Omoh=5f1Y@_cg^$qQUNY(L%gedPtY zrEg~%(V|EQ>Jv{6T2H*Xdz{G?q3MTAxEcnAPw?L^Xh~}O-d>gfFO%}-<=xt;lStPr z5I(pF85E9P?%^gI;~%@73XM%;+gcaQ`kh)c(HxRi!uXOp8k`BO*OqXu=x}|2bSXEc zCa&;yW?G%Y99yqRvR2h{u|F%^m*^9<)_HMm<)VZJKGU7hO*)te&~-E|-O1*~Ys&w_P8wE~H^MvfUV_jil@~ zsMq=XhrsP<676f$CKoPLf>Y_)1xR;pZeBci$yF$L0sUahT1qY9v8T4%L1CdZ-}*)mm= zlW72zf@#yboHQD0EO`*;&naQ$m!s;GvRmcKn<_edG+FbcG zJzsB9*G^~#?~a1i{yP~WMM(Ewzu!+(fy?$Qt7-oH-n40F{x9|#&J^3&CE2as$z8Hq z_g8BV?BezJI%_8O6yoqkuIx>cU(yjt)CH~AGSU&-eJc@{bIZpb#KYv?xulE^XP$BrnMiv@+F#GH=BNUBFs6j>UM63?XUWoCIv5B0-_MbP<*pjt8~s$K>`7;B(`f!-%@^ zmmS-f()ZH#GR;KpuI6)MyPzKkUXyxNRX3@NBLzbuMzXPa8UdF(W#kWzcl}f+>MXL0 zX%H7J*gh@b|35AB5+Cd_-7cJX%%38ByBzcT!@NlUI_!P+J3D8dS#5vZZ$A3#vvZqj zlal~-yh2|R#swV_(o^%fdD&4<@3!c!RC|E6ahwe;3!RQ*v~mQK8Xj5FAlyD?jV6H+ zn*ECfYnYycib3{v<@Oe40`r(FTTk%mdXf0C5$y{StL)$E^FZq2qTnhV{nwhYA~%n~ zEqWSaiVOpHhIVnMFpW0}FVs58XZ7yPvQ=Gj!Wns~^^l7?K=dsgEm_BWyU~ms?|rd| z#P@5_^h>XEBm8>Jed>^a9ee>x}2CWL=jg#9ZRk%E{TtMnvsRiRMCoqZWYfp{NdH zyz59<7bZ^0k^1};fb^;0x)Qj1ZWWsQdbUEO1xLN&+C=ihEkHq=f_iDnfUgX58yBpZ zu_o`Um(E;xd};T&2T})TwOYa=QPv+j3e@p8iiV6?2v5uPfY8GLhX$XSAV8tkQv>|x zjE5_)j+Z2bi{qM@I2b5KmY5dS4lfRlpotsdIZSUXEv(E9ZZRLeww67e(4$$`W)MGg ztm2J%n|Mq}pU?e$UE_mL{JcDH|8!T!>ZG`G+Hepj9g6UeSPn6560G&TobBPIO_9e( zaFsQfVujTP6^^f~0x2L#Cq}LJA+BsbxO!^21AW}-k<{hf#I@H3KNswDvseOLcZ*$+ z?D6jQgnIff=jPWeV0>EJw|qZn(1qZ|pHa8QSg)Nd6$gTY#w}mlywvixxEP&&(9q{> zB(iL_kM(j;6F`=^c&rCjpim|?3Ei7Dj78Ya$K^b@jXdDpvNSOr5gy87af3m2UziBF zT3K;Z`*UB=yRWS<*~1H&AJ2m;$JxS^U{-teU%?DERj~U7-sh`+18KT&v4+vMfbiz? zmkY^@-QjcWVI@dYMg8oVJb9WlN Lv!iWnYJ6;j50CxMG0Plo+a+@`k!JH;98q=9 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 z zfvby=?RrAZ0|H$13?|2fxP%A2-w0r|wzM?#Ca#Q)a{*O%tv*F2U_F3y}AAAq8n~V`1--haUtC=0i`@!Uc95+lC*Pt^j5egyj33J z8|r>-qXat^LB6%2njPCE_h8+B`3#t)Vw!kunZolt0@^#nAeHpEK&qccY{OrZoVg=m zL6JoHtW7QW%@ZTu2}<>9H2K(X9nUS$N92{8IgD?eUn9InrRz=OCj;+LIl#x!51TFw z?3;b^apiT7@C@8>mZ-#8OfU5-HUEMULUtPS2&oPw)JzIxCRD8kKOY}0_Ai>`MFP2t zg+6@9MG3k`%E@E^dG+H4Lv9g9z-Am!mRUesfI!~|(-{e9`lQu3jDoYe@^55?Ot@3WrUis8*sE7oH;Lh2VFCYj{^I3kz+rNV;wjOp4L zveBLSbRuV;xn~Rln?(%WRVjN(R9u37cXJ5tT2xNcNSTE!&-FZ*`PQ`Kk8pRnrNNnY zBX^CwbR+CmtFwMp(5a~`z#W3eoH=A=5l>ATk9p0_;T&YRujAOhQ%>ZcH(@u{I$a*L zZOZ(XF&gyls6A>&@}g~AU8~oN%Vq^>HeuI5utBC{9e0Cx7xyL9qUp~sE@Wf;T~3Eb z%4z5SU|YcCcj+2f<_$Xb*4@ln;d}2ibp~wQH>4+i&x$WyGSkwD>0#$CRpXo>*486? z;pdKsHASE#uBWgY6}0+tJBy@BrxiU?i`|t=PRrL@dQ*uw-SM&|V9kJOINkvz3~Iad z1fDPGW|QgL9Vw@>e=X@#U*V`xT-?~>*H=zjiJ8oV`{WKjHK2gXn{$2_2t!kS8(KL*J6PZ|5V_uX zj{>|sg}-X)OO=ub53ChEtGgNXt-f%F1l;ewf-1srdAa<&aH~w;YRX3d>LJLS9T50+ zjW(>$dTEvMoYTbi)0aw=Zk6)yHK_aFLcKgFVxWwKR;~|1LK0sb)GR3yoMdNFDq;@h zhAgRr7(YmK$h71T0ey5b%WtlphV^X-6w5R>HP+i;fx}w&7!@-^1zrj68(`8Laf5q`R6~77 z-^Ki?H*Q=!DP8&t0Ptwjn|GT3NJIz7|4I5fVl7?Pga)`+8;$=9-l2y1VOx0{=^j-S z;(u925X=Dp6^#ULcE)CUxzSg_)X770g>KqNKlXP{{{<-lVUd4_HxThfUgL08xn ze*az$FSd5_&t(0PPM3cah~Yl)7%Tb~fE@z-^6UYO6-C?Szu`TzF66G5<}vNjol+sz zn1eVZ#la7^c7sv|lna8ZNmKvcq$AIlWarbh!IfCc;Qp;Caz2dkJ9iK4HM=+0`v)fI zNWKrHLyZa~7m#Cz_uifkK(Q*Q4F?pK-x#SE{%CFJejboaQ>v(%#fA{niSIWesTg`M zax)`JQSx{5VF1#s8Gwl%PS0_x2EZ30HK&H@4&}_%YrL7nQ-J3*gZTBX@0;o`?uE}O!wY6e2 zH=>qW*&MMwu!VM9t{ksygbq=SsvCjeg|^dcxxTM+TAfOxI=ciezV`QQt$##5m0EXy z+=|C&rV>@1$Yzxgc%iN_A?kvXmSn`rw2pB^b_^|my#xVf$ziALx6+;-%rGeF|LKaGToLByAuUw>H3b$w^xM?g7cVhWS&!Ebhj$xf0RE&gIi8QARg{o_QX>5z_IO z9d%dN?I!nCX%KeMLJs;PxYpNnMvho693VVB{<7LA8r{#NX9_02dypg?A()7pJ9Ssd zFI?!HgpI)DGJ273J~=X!N8u~fGTx798Oy;KbGNvt@9w7A%wLn|Bmt#OhQP_UgC=X| zA9g!0UlLSXOX#ePJ&5}OfO1Y7;RokJcna7xVJlVh)?HU87=mwm{>_LV@Bad)8vo?# z3h(ZBRjQ-a1maV&WL+oGc*sx?c3biB>JLSi-JQ)~&takYdbMdj)~^lbef#a}wz8$e zYkh%cE2a0=c5xxX+Td~^@hCsYC7-+apiMxQKya-IRtp;g;caTSQUrz?=B)R9K%ta= z)^kc;LyqTtGYdD2E-^ZGcrH=#%Jy>WWX?#6NeOttzhJG0;Ac%s*j~4zQWZZW#Vb7f z2$1B_YUQ>2eHFg`xJR)pf`F!IZuZ(1G+?bkGk1La=fM8zZPfNDH)ze!n8w?E|9pLx zm|8FkJCXEBc9MwIMXzShyPT&g^Q1pB;fkhuc*giBd2ab$_2R$6IQfz*zX|Uvm&|)> z(h6*}3}8KMuwmVi3gz#S$3~3!$!9CM0nFZsiD`t-wy51WtHX?iTf^1(G#|l9Sfj?7 zu=v{;_VC@HhI0dqAE=e8_?#RMaE#Rsii*eeJ>~1W{_zo^TfPE8wBscbq=YFc3}tAFDrp_R$KjOPx$Y6Ka4BsP$g zIWkv%xwVfyN5E!^Ib+&I);!MFSJZmgLeC=oJI!Gjhy&kM9`uwVT^y%=Hmo=#9Rd`ULbJs4+6Tg~9_IF%hv14${3G93mZ zewc;q%v~SrlV9vT`aA;IXDZm?YC2>2=2k?FOq+vI8WU-CA8Sc3oM)n||ILLsPHiz< z<-3}H`5`LtF(>-3jkps3+~@llrP;|YE3 ziXZ1L#dL0dyd~o0c0!UC?Zoz}Pe{QI(fly5^84B_O-VofrYTn;0i7zNUO}Rnh;`+y zn*A#m^?-Gb@zUiK^IkLhXI%oP1@h#m{0O@na5dxcXB=#|E zM5+6?$X^ntn@>)C((f^boikcrFZ34ke}Z4sW;W_`Ra^3JjQSCA<}vt&c+bF=O_jilL{{f_T}N}{ zUXesjz%u({jp+#m@?TO(tsLO~D~6hnLtLH3%jPU+G6mqb#>&%y*Z0C~Ugj0nn5EFo zzY>neuoS?2m@VD!XNm=WTY0F!$$1L29?W_n_W|p(M1^M|&jzi)S2ipPp1OMQB=D8Z zRX-?6>zu+eZW;*TdKirFe!*xqBq&SGVOZVv4R&4X>RdQ17N z-CD(DC>d|}#W&<-x*z$bqsQXnjU~>}@wgH#STaRjHBGCZHXYG637+aVFP$x#!=tF0 z*zuh+920Le68udJ`<%Ew%EkHY!3s|X@;vI0Q)r#B6cg6*%y;5hetPm<%|dD^;8Q1*wE@s_K!a1#i&O-oH-ks zk-|>C7delTE!HI#{3)I3%6T5_g8gwLxnUCCo2Eg!qTm~Qo9hhtn)EG~VzgLDvO1N?d z$BFtwE|hS0`YX$&=0nfNj&Y`K1eduleC8)f#yeh^*_6$wDB|lba%9JERRvX`4tgF* zLBl4(7;8!_`!p=U?=$6CQP0XGS9``oLtX^*O$EXA(h`I8yIC#X^?D!M#CD!U&7WV+ z-t~%2!ryXlG%F8jRcMI1TI9cq@g9%q=p9g^x3v!WA-C>u@Vmc4F40JzYnuz*Ke^;B z{Ujv-z*w2aCk&v!QI(7MoCI`{oCz;nu8vwSRHQK{K0FTDxRlzUy1PHbR|jKS`Wi-| z$6(}QCnnZ6w|a$sfH z)Ebkl8))wx_?C$U>+?^Vw0XNHIq6Hax@CQqBMtP*3V%4&UA(_AZn{okONn~|=Cj_W zw6Rl_5elY`4rSx)b6_iLo!^(xx{- zL&j@@OGo5l@>9KyT!ta!u?%~}M0|hKm?F)Td*&|vSiax>Ib&|6>Fp8JRRV@Si>^&I z0*wPmu(2BaAf5R)i)330h^PGf{{kRk&TN}~c}9(xrv4VjeL3W!ye1gmZ7$LT$O;RuGia>HbL$9zYtb zTHn2rRt&~Rs$Xl`UQygg(y?oeg>aD9yyZ+Rp$E=G0{vmpu1cmeBU5d~ZO5gvb|g zNeF66$kukYWEd~U9_HnX6o1aRf+<#(ZQu|CDiQo8n91X*`5%F?46eq#da?h}x;D`pbNZ0vWR)iv&Z zF0X-u-hyb&yj0|-w4^Iho?ew5Z zI>fCiQ<_U3T20clmVX6!3^_c?h9nDTSco=S3XHmE1(xvac7Gguvz9*3^#f(3QcRV$DRvw;BD^IRBGfNA_fSJNM5H}P-_4YN z2lBw$3p?`4d=R}JH_dVw6>t6u1ty5??(hjVcAez(nu3l{(H`v3PkdO6dY_{`b-s&i)f`)f$5EhHc;>lz_8N!-^uNf z8L9us;Wqv+S@~B91RU_a`@wZlnea^vH~JMIk4z|le7Pv zNkH;X%3Mpq?m!Nn=8e%-s&Zx_NzK*QB=j=y~m zDS7k*ZmViK{SZfaP)4`@cdwSz@`~nB#W9LCxt{hC=w=1Q^$$7UBWM2)Z?C1G2B4W> zVH7IO)~|{_&4#2-a4F1G1|vxmTVPrT7Z~#N-_z$C@t*+t(d;0TT$I#53EPdKB~tf5 zFh?+T{J&72#??{yue3l*`v3G{;NRm9SF8tgNejq*2RL0EwQ98-UvePLr_Ba8>nos0 zw9OSvLU#$V4Rm&Ch1xzsBi(N|y1w(%u&mb9&s=%1J5!W5{TcUKGRSny)#&locdlv&Mz9)0JBOxz-yIPXqsyT(Qk3^F{ydcTqX0RH*Le4dQ0Qk*?UuR>#2S3D`5v&_5l=4 z{{UyG=a|Im zpYKUm3rZmO>e;}j>tVHlLsN1ZVmf7tn9*e2sv%ciLo9AM`wr;TYOr9Tu;ChY{vFpm zSM5BP)UL3~Kr;&q~Z7z37)?;aaUSQ|@hL`&zrd6j(hW0wvrU{1EWK zwiJ7;PJB@C!dq=}osu9JtJFrlopV*>qrvdr7YR3|IZQ(4yVhJq3ry27GW3MBLPWgM zE=9*n-U~EelRuV7b9(jP_O)}4o$V`9fy$^-fspD zshj$*`{72*i^RO;YB$SAy<%UQ)=CF&rCLQ~X-#JC+2+j2Xe9-`}l6dy$A;!Wy3eA79I1k zQDy^k3~F*4g2)?u>GURevfoW`7}rKA&uzwYM0$(=~bb&qw*qUhA^oh_~p{*|02-mhHE znc_EnW=z{!AX7_^f7maBDgoubKV2mNmWeYM@Ll0NJrg;KOKNJ)}F!y9)*#twkRQ2)I%7 zENy*b;z)U){Dul;J8w5ZS-9NCsh#LwY{0jMOM%p}1txd=&$nX64&5XM1CgbtZPPl< z<}#p1j(9}=GX#+6OK#vV5J}SKCWSH2HNk#5Ta{4^W2nDh1ID(GcVc;paT-^4tBolw zxPOqu64pk+{;GlQe-8$UatDL3fI1ZgMuoxb%|N`^p`&d|6AuY9vZ<40^nJHcN`Fio zgyYkCelTL{>$~Ty|C8fLlS0?0xhPsV0_#}E&bU0)VTtI#2 z!^3EA?#1!JwrF^&ZT3#LS$6Z|tr8*RVo{g#1&$li@%^9LJ5H4uBTMQ#Edv(v+W5XX zABQ|ac=A$)^cZvsD!zTcCqdhnX{al`B8WoW8hO}e|Ha3ir_3PmY43|yTQVl0~boUIjJ|;EqQOhb?;rdC6>-~GX-vRI(JEDse;3{cJYDD?dJyW2@Cbd))MB{ zR5dyDS8vz76BEt8+PlncW-pWyeU)iMV?@+xtwcvQ=uCS+@Vg(~=8|?#B{=2gaunQo zU1zgV3$d3&A4b82u%5S>7p*PX4JCmWb0uJvNj>aR)rXp>e1Cg`Jdfa@A4ex&;dLduA`7dODVOyFO}||o(5@aPpa+@aB7@)&9+I@;6Cj40jg%*>I}#N> zhB(NnJMO7vHuN`8II7W zhcK~kX+ zv8Nm}Ebc~)P{%TE{^hwWM{#&KVJ-PFzQQ^l%SO39+#WME__93@A zG!*5vTN}yva7)s->WQTxf49%11OMR8p5XBUvnQqSZs$b?iIJFW{%zLuOtIwf-I}u6 z$S{U2@_n?@X@wIB#2~uZ7pRrld6xW%00z+m57nid9oK#5 zXqDt*%M)F@^>5+R{`kIP@^wVOWx80+7SsE!FZL%5a)TeG3-11v;RH5(o!gScQ@N5` zdCG~tYq$N2t=Ryq3V-x*q8T@Jy?~%st{WR?W?6^{&HV<50lVMFFDR3r2qk`q;m}Wi zl=kxBay>fqhsIKN8;^cdd2A+WHS!n==i$kfJ#k6WmBpwy)y4mMLbNSoETy?+&TgW5 zb7uK`=u)s=Y3y_Pm70VkEd#J|;g4wXv46|`iA>l9C^OK?-n44i+vHy)R}9k+MoNay^*Vrpf`l?j%iu|iNtNZ z#%^Wdx|Wy#0uv1DM8}O5aZ=i`QkzDA6~f_nzX?Qt{_ouI(_vNA!3bm_b08yXpup`N zN+k;WS@NeME;GY@Vw(B;7AovFb0jetXWqv2xlRU5lC&NNcBH*U!ak|;IuBnfR1<9( z*&^vDzh43*IDd!q`2df43obql2$}$DozDRRfyc85l@Na&Smp-GCnhHsO_Ivf zn_`B>y(F~^q~QjS!d@g-@L)o_<`aha+!WT+Q(3g_;THC_gV0sMkeDRSlTI~Xwsz9i zM~mS?$JI_QF^t==w(5s77hYpbE$u4$i-CKOc=t__4?BBWdm<<(X812j$DVf>KtlJ* zFsKWgf{IWwkUM>*+%%32G+9Zc*W|^e>=+oNwD~0a z`LpJZU6drJH6N71+msONk-#r!wZaPfGS~QWYq_=5VuP;@n)Ff{W!cp-Jy$fVHD4u~ zaw((MYhSRl>1tYka-P5YnQD&`btf{2+c%_y^Oxf%|= zjoEv!cTeN7Lm{XnS0RpdAV2UZkF7U(VQv#t)w6BKl&B^ay&>YW`}yXGcJ+~W0m5@8 zL2P%cXHs49ft!DIiyL`ty)7izE!N*_U&fuUwHm3BUBZvnW*n*s?|urtP!(Qt&jWAA zY)F+d4pORmq2y^`DP%*7xov_8w`@zH_52_YG#4M+dsF{IqwRQi(W>-DYKbW4(lmEm zRg~B)(POFPaeg-cJ`RU-n~s2G3D~r(8J=EKJV$-1sT+q{?ao^}zFqtCQ)-q($_yvo|AgFk@~C;icWIP>#M0pWX;T8R+k!% z3+IiBY>$$zgC#Q?`d%tfwRYi2Qr$pmI$@)(>Qu_mR+Tex$m%$iFUd<6N7L=xF60YV zKj_C64u6l`cr9h)n$Sl*$-es%?C_SzDinbb4qkF3TFE1zYbZSd@eLw2XUJyyXm1%zbC76HQ9dp1lF;y#TM^YJ{96j`W$P_-{G0`2GVx>Y~PLw@)C#`<4|1(+y? zU*udU$Q4)fTO$R2Njd9(UigVF@9uoF)^c{JF!}O#)N$FS4a(8wv2Ljb*!vsYm$?*m zkz={@)@-Ae9&K?ed5-$i-~xgtZ=(YBIX{1o2uR}xo7ih>2I2Tqy4#RwrM!?ENjniC zcZ*B&*!CzBAJeK$HN(xq33)?01M!cNCY5fDb;_d#|MF9PskwBT+T3E8;2*WdxI3n; zKD}_^RFYlP!xc^csHW!XsalaHISpr;a>f!%SroYPA$Z7#ts?TN%DSrXmj_g6yre%< zJyyVz98rnxpC_K*%=HrBO7dy}#VAMdjYx1VyI;L1Th}6SGW>WvuP^n<%?lcj*d3>R z0X07P5Gqn-0djskYHzT0Lic}-QCT4@^ z*a*l}xKnran>#lcQM4XAB5nnf)cl4c<9YD=?}fX;0wtzat}R8xM8Z-^pqC+48M=O5 z5;R5YaRjI6mAyAuZP?az=aQf6>MbG*w9G8d=lISqG2D>ugIZbe+NkS}{R$cXE4CQj zOi#1QYm40dX|M(Nk2@AoKB!4ga@$un z9Pd`#TjQITg`LNmCnz1s0|`epBzC6g&EyUfm(Q$kwX_gWI@H-X;$~Pa5>NIgLUCWG zVSB}N%ArS2Nm7O1zaBa*j{5wi^aDn;EZ2tv>;g*7Y-#!lW?&SB>9VAG%7kD7Ya56L zo8D%Lqcz9d`qRZ5J)i+pg=TBOA>%ee)_*322=x?2R)Pp_TrQO(Z5EET@DBz%8%5%3&H2S2GO z@O(XeM%X4ZMZcoQ%yl)(GqsO#SWso)==1Nt1S=JE@qM#LB7;9|R)rv<4IhBh`K8(%B#mj}sbD3X}x#PjPl-<*% zt=9N%fBoHSb~o-)87>unWO&e=7!i%hX$_61gx7GZ)H#_|v&O}FH&V(XFfXCeg-7R> zr}y3JfSVkcvt0FY;WQ(wDVTZqJmuaqE6Z|(1^M&qT*eV+74DZQ3g!4tql6{LTU%cc zofoGzV;=Vc^8mA+&7XNV>&d%`V@{6=&zpS4g~$(_r7DCqutR0nCX?Lf$q_zV3AL4$ z>^ZyhDcg}^BjS<0p6A_Zk`>#9a&Jx~4OdlN3}#Cye>&h`cI%QGQiQ~mD7j;PrkHyT z)Z0*2wl@A)x!kpU17UN0K*r;PB(-3-KD?HCY`Fd#i)ZK}uIqWAjHw%?vQXiS-rw8YTAlUu%=Z_>D>{!K5= zS`Yy!o73;36CG?JE{ED&fNRJm4cZSVYuo(Z3ao9{{OMwT2>{=ZUMzd=qjHx4IA$@^}8d z$6@pCRsSa&3s_Xu_#OhK`ZI!&(B}Yv;47St=OzQ`V7Gr!RxOVB!$QV?IdkyyUTZF|UCzF0pxegnf@%t~#-Qhp1wSa#Agh4}y06^~$s{jVm*TH+RLyXwr z_J98JTG6Bp`9qri@9eIJ7+~@Kk0xC+t@)6(?`8=pqjUb}kbjnG_K0JDW?PLv0l#xR z9B_r#qT{muA6efWkmTC_f6i%GSz4Kyxyn+@R7!KHNg}!b&rB)BiGXbct48`d zd@7)U1s(q)yjlAo#3oS)Uli^)>ig1oPYDs+6qx7vUnqGGOZwo~<@%+#S3{?(u);$B z!!!H?+1?>So;RpB>z)opeO+Gw9fx zRNRFVI*W*VO>|N%=oUhYFhxl$U!HsJ%c4JF01?QCi=mzD?#{yFU!*wdFd`D@L_(kQ z4ZCE$!d`6d)=%}bvr$i!!~oIWx2_gWj2zb!PG77H2AuVQdOEjFF+6-uS$LkZ{D`gL zhQ{Z|pyw_&t|qP$cz#%1J@Fu-^2mo_X{FVDpvEWrbeiX*a@Rb{#}0RoD=XfEcI$DD zPQ6IvrQDANfyKa>9}!zqa&O~S2ODwJbv5hrq9{zoiuaaiEuxL3W%HTa9IC0&O8TOy zSzG?3(n^2591;D=d0GUeY$W;IxR|(lPItH3WVsE0urIu%i*6PC$Im3mu_1 zbs=WZ)6V1EkgUgM@rb~Epq>^Cmw6`e`QDB(PQ6X$WBi_v^ci?(n7tdLL*;KbpR$7MG|~;PxyFWg1pI>Bt-L3|&6> z(K;hvisJ_`%Inj0)1giy@CEj=8R}qxMJCJ_Z+)m=xyA`dVnu^sSsiYv1*%TT(O%N* zc~$Rw^q)(dn3*|_|5kK2vCd`HYM)0H_gbVKJICB+2>POu01 z;_}TGDR~(ljXSjyd&{@$wglU}?#b5wFnhyN5`oqdh7=_RY!8kWct7@f=?H{x!wXF9!f2QR_kQU+U$DMe)3bi+tLAANRk^%M(Mnv*` z4K6v51Yhdq+fF8$4)$H$pYhNdN2`Uw%R-(LlWwpcVo&fZka97if1?b$J;Q(lc0Qa7mZp< z3t38iV4CpT27F!iq%Rsb(Ma}9^kof}%@x5Z_-&e-%Bg%U6kFc>iDi%7{p1RyH0Q@! zwkdReBaJ5P?X=C1B=4&$drDpslww?z@S^tznt2}dDle{7N(GI7p6cuG z?+~W?kD*O-7T)IDb@#FlUoIdyCZvVUrznVjPt1rO-kUvT_M9#|JL~y2J0YFtgrdci zRH`8MmiIgJC|;XxKum&8FIVqkKgaa?QVSjfh%+ z#y@Euo;8o`(0d ze90d~J{6ZZP`PSU1oHIbH7%H1-mvCeFRTN!8aK;dkdjoY!c+jG9*J?!N(&r8dv%Kg zSn|+c_JOm)5;9d~Usjw6mFi6sE?Z}I)~*9cEa(BrErAF#Qi76aCa_ z=kVHGQC&J;bPTt&GWPMIlWUW4X^naE!bFao0Oe+$Y_gO0BpFPQkXZ)uSgkZlColi3 z<5;eX-ttuS+t-rDKzW{yhHIY#*x%SK^&Z`^>-@y~BU~83Z!^ zcxiLjvL3V%L&qC`+cRggQP-kRR8g$;sTf7H$Z~zP(9&ZwZ$xGM2CSd)5ewF}&cU*M zmOJCK`<=UXHiF#vnCDiQhYjv?eUucXd?h`z8s*o&;ADJ3YWypE-%mpJg zK+)p3Kl*C4rSa|5UOWu|)C7E>VmY&_MBe{=zES!npe_~JTxm6y`toY_o$#y|tEH1B zK;+wig+;Dqdu5-^tuE2GO;8_u=hJ{6b#>e=M&`{AMT!!=m)@JlRkR7slfls2Q;j@q z_x)qphF980)-6j1Mi^f6Vfi}@o{LdNeC6jCN(&PcSJS>XV~hiCnKOBg#c%LDW6 z?!bqnzGN%u0*d2@S+z$87w)s`wM^+fkYQeYds^mk<8)#k_$ydAU#a3V4JbCZ@L~}a zr%(XY6faNv*|jf6F+eya$^oKvp%;wlq6Lfjuy2iABOUtX$Wx8Mro~8;c`Tc_XpB+# z5;gZo_XVUU9_nqKb0K7UdTcRX7tC!h^!4kb>VB(U(y47>SiR7b085jR(RT=~wm%Y9 zuH0nuN0R>}Ea26mlnyhM@?7S(?V~J3v-&J^2fufyxst=zqas(v_cH}R0FGy$>x=eV zAQF^g{9DWzvJj5zbzP+*q6u zQGJ_^WLVJ|g@vjn$}Ra@nOTXcj;EvcEtH?;dp(A)X{KlXtaaO0^@2aSI=q|~U^7Gn zFkvxqrgS3u0_ZlJ9oAe^d%FSNDZ3e8EAT=KH;}&T^U3=RqxPGAB&6eWhx+|yU_sg? z`>PB(mo`LEOYDp9YWu;Bb@Yw}gse7HnyvgWo~tM=Yov7du8Vs?Wy~VkSMRVX&<&3e~S#@}k zWq#p!i@4sxypI!oC&LV7!ce#?GIxh8AUM&`AJp=toXG%;gH+%(j!M%lwZwdY8yy1w zl1})CLiE%CMi~USk|~Xyoq#EnHfN6CQS@Yf@98;rNB?7pB>A`ID3}Wyq%@H3G}^(d zbWwITyLo-HuD21S(CWn}KaESboa|dGndYb^**cz-o3yk{R1y2_TfbZw3)n1FsSoTH zWR4IhGi1F~5=&h&lvTVS&9Q0zUJ)<(5x4H^?8W9|TeJtHC&tRxlwL;WQ?JrKe;IG7 zf8hMRF(SF(hsqo2_NwBftBa!jtlUqH^LbTgNoU($sk@*M)Xxwih)@JBauo)|zy9I! zVk`NhP)W3&gU^ekIO+*U_TQ?|zq;100F@A;8|rxi_ZqQUJDtrgwJ07rmJ=ml6`hLU*Q$ydN|SP?9AR zdWsD{FNulkhQ06VHiAlZwSG8*p72lVXEQh(^CQO@`xRm*uMDj zv^wrm-1)swVxL8cH6cf)2JR>Agjhr0^5ig9&Fa$L!Q3(~Ki5~46rYPv+nnq1Uq00n z$pC!$`NSKVR>cK3O_uPt-+UEA0KA6ql?04x4js**Ei30~SceVe`|XH%Gzu;yEyo ze_;2&{hBAjsY0c72sDUR!U*=;`0CpdY>Pt$j0M4-Gt&=#ZzA=b$rK%W>ooJf>LX)& zL;4`N5r$Ij&dlHgpo4lw5QDSjIeePti}lSwRs5Q8I*6Xf_)W-r>G8JOY!yC#Vzd~F5msD`Gh$NIism%HJ5+d&g#z=GN`?4XfdNp9&MYDKPr z)8o62yR5!D0@d$I4HLey`F@p!Z6hJnW5B<(=h_s6mV|_~$*-0hp~?q(VS87DRB0PS zewnqUE$?E4%s74UT6v$vDtu!J+P6w#QA`<#@RmzxDg)Hos5x;71=} zHCK4q4EV)H#A=0PKG~#MPX?LrO)4F68e8!Qht{AmtJjE$*w(!TRA$574bBdzhqWVy zK15L|#F#v$9+ir1@gZl6cV>+*4MK_4Kke?bg|hTe0@r#}(Fgcx0i;627T&gi2{uN!vNlvI4W(iRTW z!nYMI9tu}7k&HaAY(g|&s5S}cjbBaSd_qvD@H@@U5;95VygJl+KBO{JXvK!1&$;Rt zKbZ1ZP^_fRC?nws&(%dYtZxB-e8t->x&SHz1I!yk)8K_YdOA)QwFzZA;o%LZr5awX* zKIIH|-_CgG^C0b*sOX&!W4LtpM;d|QdEL!Yt18;OrM7T zGJn_@nZvY-CDX%H*;mi4;?*J~AbT7-jzcrh>?K=i+xGVNzA*MyI>L)rdL|qQJ$eI- zYY}UF|5^1C9VJv!x<+T!U6$R7ME2Tw;peBFRR4nTE97DObR;$xgP%iAuC7w{micT3 zBG3#5j`U|9Ura{X(kULTqM+c~S&5mn9B zMSa26MlKunUMHI&9qb3P2)P;r#IIX?GM|#}Wjopy1-~xj|7(G#euboa-KBQcYIah= zrcS+sK?~E!b;QVkjzX#x{X7A*&^o2_^7?aBhHY9><_iiarc!O;kQE?6s+Vox)VJ$G z`T*o9fmxJz(DFQV4)4v!2=lX-$4}Cp2Hl%Ev!k*SUU#QO>G{?xtO)Jv7>nlNErC&g zC_lu>F^#c0iyhQ{5J)%_6@swH7q zs#!jW?8?g7tGe}s&sV-&)qRwBYUQM^(03|pMTr^GUQ#P@q`!Qhh+XT0qj$a-+FeyP ze`>Jv<#R2sp^C&gm9&LLwK;wy3^f{bN8r1=!2vFaDvD`1V>PUu{$-%EIJzt%zyUHs zzDbVcDpZbMKj^FNpYE-Q${0wt7CWJn-|7#~b=w{iZ1N)SuL=yCOH~TWU0>iT6r{BB zlcx=F@~q4dSvq6K*kd#qM8$MdzH)*}_#rV=jirij-M@f!F6?j19 z1{*sP^ewjIki*V#H^#0nowg?w)PK-2$Ul!ETj36dwdspEY%glM8qR#K;&oQckr`ad z6KxDA0!g4bH}1+vHPj#6>;sb+#{(o9%b}A^Bc@!P1bza5(!A-rc zLoi0;RZj5;uIhezrr^l0AEPyxa+j}Jh-D%gFto4Y`Le%^Q}(~VBfqlGlMM|tVHpTk zNTq18Qc6Y0d9V(8Gf)+GbCH(5fXLZisEa4xG@ z7r|s88+#|4bQ5WsJ0{)?rQqqm2j6MUn!6AD^Wd#EV%8!rjkXRX_)4@mipX%TC3(2J z(;%29eTG_uq-K__2=A$`S)%ju6#AFgZTxL1j8uPS?=JV=FMne0ZF!B}ba|`Dq%bv+0i~e97@mdqc9SlFg$M3RUl8?uq-+ z;u#UNFd0YM-8scBY%y%%Ny2hPc)77{8NY4bNhN^M_*woOqb)jd3w=W)|xD zgI7J8U~4U8SlVzmw%sDRa;JGqRFEm3Mn5)3(gSw1dM=b#BpiyvNRK1+sFzxKPO>zdIq43@?&WHEw@r z5ENVKOxj%)B;Fj2^u6EZn5IOr4H)bFI@VIKo2OIYRnl^gA9TB)k+S{z{?CDm!mC1x z8oHBumez%nDsL{0A6=)UHp2B6N+Bjuv)+$O+V`ruKisU4GzO$`l!+dE?!p(TuyLW} z3E9BD&{SZU)1>$#A#3W<;_Lt-sWHEgu>0h_+>4}LMK9~DVD8p=4CZJA#XLC4(mQcU zSn%!4h(!nET1Fg~58;6^-#{>jOaEJ;jZDkoI1vNyoWuRKKWj2yjRr9BeYY@$jLof+ zdO{)jkn}5#xV^)RaYu8p4^?E(#lSmMeaM}U$-eMCGWKT6`AZ;^GCXg#rf%MFlf^7@zWDO zKOwIIq9VNKhWJ<;d)dNQU2OYaB?E=g8gskznvZuDi#9K|MW%gS9*kaOF@J;eapz$; z^~Bra>Ftr%%En`gbhF7RGaFx{9Ms$|vx>c+b0l7{hb|_tx$z6UV-%C*K^&1;57AkS z3qz!K(Fr%}sD1Be5%Gpsy2c(PstYmw#fscAGr*?7uRt^rZ+H=*f)E&D8%m>AQW}B(HR0~oU!6^tAJkdz0}Y9$8QIUT zXn4_saCDyuaZN3PE;z}P@80CC3Y`_l66(DN%{~;K3(b%{g~6z~_2AQCJ0E#xccu(> zX;Bn3ohR%$s3ka?vCn25Jn;AafjLE0ZkiG7?6jIka+B-YiO`m+eF|7xIO$*2?jw+dhFc({SY4_xp&G#u>jwrhv zfy;gr#CNI&KJm~*(yhbB&7dzK@*wXrgzofH$*5k*fVkfQ(V2jUwiYph?&Bf7oJ3DD znfPsUzMaEH&{p~zO~q{*dQ|2SX!o3>>k5CLNIGv(H`KSUkqWAT`Y|#4w?b^C*Kx&rR z%3QJvJNG$bN6I)U`n&Q#=0h>*iT%w`-J;KPjL39!61OZ6i)i}p@`Ru5KGZmE+R+vD z9E^(8Ji-Ix9j2MT3Vfv{#^+VF@;yk{g=tTAI2S=4{q~m_AG>h*N#5h?Is-;&nSECP zmRY%CJu$X>I&0_7*(bkAfr!lN7dPtF^<361$$Y-y&T*R^q9 zMHXyKfPm2lCP1lCn2G-~r5xCgzJ&LG0F>0Z*1qie&GUW-Inw+5iLP$n7e7A*T|!q5 zcG~OZn>Gh4g`GMVqhfWR|C%J1I#5E3AQ!fI#By82L}z`xv$I1RU%wC)FFRkyEb-VmXuoTY zwzgPItbf^3rfn?zLlfj?FdIq$&K{pgA;)Gqn(CfvEZfKFGk#>K~qTw_+_`@DcNKBcv@t6G1@>6 zqh=ff%KzTpy;}6e4>|a)#8A>2mMCh?TjS|z;wq5;=Y}P}S;`DZQdX&!v-dvm!fm>c zH!-{PoWe5FO3$tq-!@diP(#auYPimT>8nL0)kR9wGpmbhBQFjK+^}41K3(ONwZAf? z>?}GZXJnJ2OIo&n;JY`RLI~zveZKN;sMxy$;HLV-_JPm~%#Dk!q}uPvjUHWW$i%TW zQI3(YGj1kh;BKC)WwHo9Vnl)?;QCSdaa%rfk1khhAceYaUNpqGT7#I38uBch%M*`W z&V(z`3ThW>2W2>PC%t4=#|0J+nWF`j4if0?tz*-A!R7U0BhyMv&EWv>TJA8gAdWc<4N~15w7v_u=ET%H*ij~KzYFwpy3Y%jdZo; zi+-~19M+W7tpGUQF=oRk_|8JR4EQiGnu~OE0x;;<{N6_)S+0#1Zg^(qvw2YPGj7_z zoJZr$`u?jEJBB3HcVz`}7!D4m%4$u)$_Yd@rz5tM5qY&%FK;sCf~)!pqRQ>4$OW~*q%VR zxFC;j{jf0d{kp7vDJm|5!Be{z3ctB(eLZEO{Vy7^)ktU){}Lv$$w!VtCYjv~zmAT~hq&cl&ZK3x?&|p{L*|DY%#<4LR_@?z?!|pta?u+-WlO*MuzU-y2 zerWQA>9c2Q&L*3m3wFcbdRnJ3w0~+hHyKuNCEXfu`F2CDgx;Iiz*Gy=DU)TRkuest zOh4p@XF%K5+IdzsPLb=4c9|%j{ zf~5B6w_cv$={4(2Ewt3TyE85TzbJceg5;5Ip8ec&iBm=3b{NV!if}ARHm5&2QgIdK za$dn-Mo@4ZK^jG~v6Z{wAqT~noiIM3F%2r*MKxsk-yZ%Se_(&I(7#$AW;BD+9D_qF zQ#BztjmP9g&!6P{BANzg58|Yob5>1q%y_3*NZQWA8y_(sswm~$>?S?Gfu~4tRZnWf zC30=aX=CY)BMZ0J^1kNpyK(pE(Ljt^;8pK8LVdUas#2P5Gq0ESV)+zYwZ+pvsnz~0 zXKZmNdH8UVuk&kURa19*ZT1bxHv^rF;hYmSaE@m~gdeFl_I58czG)2)Ya%qfs393x z*$(17T4ka$@BjF*>II&eyt1T#JnwZOly{Y1<#0xP7`g`~`3~8kLY|xOfc~K#Yck3& zoQXP~94$?;-utVCJyJ@h6Zs_Vs%%5JaNV@%{A&*x(reDaSYUx7j}cHjJ?F=X!p5eg zucBfCojKqS*oX$J`IYbth5q*vN&;f6+&DtL-Bw(QM@?gjkQl-0{uE_c`J8Z2|MJb= zSYz(I!Q46_c7jWHK=`w8b+Ms{=OKx4=#ekXrMJ08mt()Xy&bYdhr8?Hr-I0 zy)EJzIZ>zDnnx;Id6VZFJ76+M7oWPtb*p)1|Hx zH6EjHUULL1uxKUsbEAra}H!rR|TIi}cbyQ1x_!U+aM*%BzmS=!~c%5&*1CG$V+< z*Zd!N>g6yg3`LEV0cii{6IKll8{6RLF)V@;WSY)`#iwof*?-@}zYe65GyiG)>w}jP zR1obmWBl*zCoKi697`e)W(M~VM8&hYh# zYYC^@>Onpc4FfPl#xYewuJmPgRz9m0dBc>lzwnRa&U2&r$$}$@@%{IZFV(gB5|m-} zPMmTe*N%MH&;e{-v`X!_tN*LvSFPFF|EcTw#~rA_hDmNT;cG8tx}?Lpc_sP zRYep7q`*xX_Z`*oJLe$V#w4C~5Olm-gLz^9o0`{@6T2EF8#|K0OnT|8{$An>0s zK@jraA&oxp7-eu{trG$sT~EdKPE&sW_j)t}#=81od!eiMi9Fra z)_1gzx!XsyKA`=Ro$+)`4l-S>!3nA=4fIQ?D2Q>hO?S%ppIc}~9N3^Fak%P23KIc) zu9^XTt7?(>^KCn3C!~p@aMR2!AFI%mxX#GeFHamtlTP#n%2#9n(O6t1N)J2c=M9W=jIyVkR3u%=pM-@5%+=KL`m zly*{UN=@g6-F?F zWCyZ0B0aEjAc6Mpn`vGJBZwl-QE0ig<6ldcS02iEm3r)wOFpb93xia^D48oH%nwcQ z1SrqQUD+5HC7gja^eG#oQvo(>LK&Wl_niEK*4uZ zmUQ_n@%mQ3^9n+vXTsN~U;l`3JP+rBmyB1=1?fTzv3zcG7Y1e1!JztNqGqYDFGFUr zJyry$xc>bOf7(sB4m>&TRv@t{vLm9*upsi`@bwe5kcFLbWtc`SI(cSdnOqN!i!qjBTaXDwzko93(H&}$Y8+J9HgoF1_ z)+Tpu&QOMH81IA=Sa#iNZkx!sGIZBKix-ko8EHhVOW~HhgfA$HJy+{8Zg8Z0szAPs#{k-Jk>}ctK6g1Q4n)v9dvExQw1!@fBI_v}9J?nr8^HMF#g7Z0s$GWVGX0V}B67uLNbU4LQu{cu<+ZRVR3~0`@C(=KliS+mnB>ZTD#t_+rRO z&&3O70y-+fxFB(O=4*n??-iS1ZyVez7zFDUgx5GBATS3%_sQEd{uj$K)iS0Ap|-UjnpsqIbr| z>dMF&%nR>b*6O(exG~9mJs2(tOphZT{3Z8U-g*FWVez!aGbd=ne1MBC)cCXnkN70q z1gsF|cCHj`v0>x|weK+@x(hFDmH7#E8SIMav31v;u(qz1)N0k%`<~T}Z!gQBvT)Io zFH^imK>2LMim*rYZPH7Gqad;SaXZvWlm4Z;{O96LQI9{}4i$R1s#&$BRg_BE2s*hA z)3;9aWg3m^c~zeRJRie8{YJ!nzj~D$q@fblQXRSua^&h>*OTn&c8ns)y~PX3m)34y zI`~Z6SQ`2(e~KW;(SvFzQRP;Jm1?Dpnp9OZzKHf5YOA5<`@zcmI&-mCBCQ*Z$4Zt5 zQ;F@Yw3&*48x)VhphNOT6yusIVgGOVL_6>F_Ua;fz`MnZ<;EEM(=<=|>yz?jG(-0~ z0EgF!xLWNxLB&}e30@i(O30gkT8%4lD&}siiN^Y#6}oP!#MjFXGbU7gSC%ZXh9*^n zUJ^Y5DeK?X`H*jIFyA5wcJy;%&K=pRc~?*q?xg^&c9V`ypRF?DYC;T)Mn7XZdt7?^ zk#+|9T*J|G@$qt~1{mlT4IpN_W4u&WjXDn9I%+Pv{P`kE%wv(l=9?DmC(++f8HE}f zzZ48?x&IJH!P8EWK6RaLEH@aZe*S#L_NjQjiWTKiQFJXo11bJCJ5f19rHEwh7>1CL z52R-nN<_vY5Mv#S`y-1BhZM`Zqa0yMdRBIgU@za`olj?d-VpqqOp@XuLyOH9T#Zc8 z8aIp0ocdT5ilV_5%F4%T1q46x`7}bqbt_G0OmCpK0d^%$bZL$6{r4weDA6KtFGwOjEaN#;ETa4)O^tfaaa8HmEDzq zY0emWe(f#ifmS<8dHJ-3CBQjGBnJs!dG|P7L-s7Eo(a9Avt;%1(V6HKw<@p6b7xqo zq~VZwA4=E{1^p-vKGEQ3-Lo9X#;W>bJ|FJIWhqNoq8M9K+Nnj07rlph2U-m2gWans z3U>X)Tq5$o13|F^7mReE3`L2wVKJ=bz|Xv2rD(*qDA4}&LAr~_N=|udIzF^gK1Cg? zD(p%Nd?yO4M{@GVU~-K%N>@2MP-*M#3g>$C&|JYM zWU%tdA0FQ(&o%Bn(2#vwwzCk?G>&{cq}&|xe5>E0T1drBm5(8Z#9kf|Y{Ez|ettx~ zI*lI3anBISU=35Y4(UR_`4~EqY%;Lp*A;tu|E{7=*-Bf5XK*3?V$Kui z(~bD2MXjgSnxROAv@&=8_b|~N@bb7`n2!aI5-lFQU57JY1@t>CU{i;=j~NUn8>Q!Ls(-FLCCJz+A%0f&hylC@n!ghQeuME} zfT*S0-;%mKt~zYgH#o+~_l(U5{v+8){xvEh4(Cl!cY}L)Y*l_(sac&|&6hdX)O{~r zFGr>cbawgDF7{#WptuQ49&@L;r^F5*oIklj9fvTa6dd*O&NU~O7e zC@g}KPqY02ET;%v>qbGHcz8x2n)-n85P%)BO_#9 zzgp_ko^?Js9NTrG{1oWb zH}-pi1>WT|@c!N#Pj4SQ(yr4~h@sc@W#{Y+9-H)7JY@213b_o1H`87VHT2!t3mEcAOVI=jd79uhKEfaYoUrrug@$iG?9 zLhF-1DjVaGMxqy@h8fZQlby)reCqzpid}^&S*!=YivHyIt*jVZ+?v5w*j6y;`DiPf6Vcl9v6!yIAs24J7-bY5V>Kd zfW;{YNYzi3aAb-XDI`nug`|)ng3$C667LQva)q3`(fiQuE?03Mo}DEVuL=I-6To^> zI!_mM-f|gc`@GWrS}Q-~Re`BPHC%fzla-~*J3FQ58u4jhtLQVBWkdA$&vp(V9}~fG zSjE}7Nw&&$fS#Hz)JPbAu>o6g7JH{;8q);Ptq-5`ok4`8xf&(Zv6~g-PE#)mcVc2FkIkj60gHIQBF?+}c2=$e;YIp!qSx?j2R=57epX$KF zvZ}RfS)YwO>H72SlKrM;;|CVIqmO4-qyaJZVVCI8yJHt13I~02=Lqpdx-)&{|k0)+uKBWl~H`gl{f_O?=dIE~;%D`JnK zJ~quyTB=ee7>a?BCzK zwy8FFp$}T&o2=E1sWK%x(wC_$=HSMEiI)FoHV-Q|7QcwOv;i51Z&TrRoT|(rxsl|I z-=N3e4Sz;8_57#DzuxO#3r;W!82f8}8+E9Sb%9Yz>;?-<@T(=S8Pos&b9q_p%mQUB zsT|vN8{3>xVG{e9ef~S#lombFRk0({0CnoK`OY58TzKka`5wc2D>{WAw6) zygx_r`sNik<&1H4Eo}{KkaPxNT*&-m=dNgWQZ8P}JnOcQe~lw$k3kzLbX6VL$w(d< zkDW;ibq-3H;z^^Pvu+w_7!XYM3c7AruAsYXujZlKr`&ZkJ~~TMO2{AE7U6kyb;``t zqtg#0AeNQN*`t-8OJLyS4dME{{cV4?eJ3BRSb42eb(xa$^SLHv#XY6b)PV|S>zgmA zuhn^&)o%rBZE)rYph`S`tacTn`gTsCf(LEidUhr7x^B*%r!G{X8|FE7Gr7L)gdrAU zl)|~zA(P6vzK-`yzl6EW)LGcd@!v)9i$G`S2FjD7z$p~`cr>O@nEcAZ&N~;oukO_w z5<5aLCZsGVFuC3McpJ|D+}6Zy*Sjux1{2KX`@CL6vv_vY!JV7Qr{_G|J#Nun0z!py znOgy78p)y~0;BvZHchbR!HC7s;Xh{{D;9;Ni%4g;{^e4(^JSUQl>EeX>s4jjF0o8# zefap|M`jC8a(Eq6j`PW6*~7nY7^x`i2AXjtIDXqOV}-|W2(u>w^BMvS`g;2xN^)cx z!QkIJlbn3AX(c`YrO_C&=LY`O%Rud(XKrzY3~9)hC(@D=T!Z zrf1)8%)aa&9+B4>>T;mgK*Oi?S!+A1PQ#00s>n0rgz&w_GTK*Z@^o2X7#Uk9T%5ug z2PWGSP=Z}YS4(qTul3RslUdxw0JBb6YX>ENhe=E2U~80f!t{pflu(L7HGDMsy3h?p zdY#du0LN7;ul>MQn)0;L4c!vXEV^=guebM+cZbJEcFw z6B{xHV95j0P~+~m^Nl0DrVZ9<2P~cuPPxlRlJCNeWk(i?h*h06F?mD_9l|}=*4~6+ z%x#D5SWUl|s1nR$(HEOqxEqSxyhB;sqHgz?`09}Ofl8ZXw{7DV$IZs6s>-#Xrym(M ztc5%}(yW9>^g51{(jFXH&Mh~zcgHMq4zA+9N8;PsgpT@_HQej!KDz1#CUYQgv#H*1r?Su@<|3yK{ zm)3O#&14PEmhg=a9T4IIr%(i1i;&PFybne&gqSIwH%->+=aZuWm(qIdPE2F_WG+(xxa? z%2`ltV$4f;sumsNcHAeUQ^B*p31leu#G~CGsM-bW=jXIBu|O7(LFvp4!i7ZxF;drr zMfwbM{tzarncU^#sMxY-&W+$;2i6-pc^>C%j#DnMT6r{fT0I$remGz(8rZ~=eM}u} zZfqFeSKhk2ky32fGkUV@Y&ochYf=AFAnnc#%89N;qEb!o`Q(v7MblunohE3_-AB(4qlQy(v={iM{M$kgNtsu5gPNL<+aBro!?dsMmcGfwr^TcMcfKr` zEd-bqej;adHGT3fV{s%KX?Ftp4W_+fDS=kxKewhA>M^wPu*yutK;`V@S={~kLyTas zM=$4;b)`#2he(>|E1={CKjfn27-Eo`>;oP^ATwjPTSirG5ZaIX?LRkysWk8VLEsgn z1>i3pV1n((oiC}OjH+B>g|Q^x*_B1c6D*AMxEk$Xxls8EMuM5pQUFaok_G`&+W02N zcvk&kMO}$1YvoMP+ME@El603ZSg|10TDc4gS0_HrtadeX;0uo5;Jqqj77fjyvXFgZ zf2$6zky_z4iL&K$vs)9~R#e?!*XqtNBrskRVhu5E$8Y({L2j6Hrnb%l5*exk>RnxI z=g+YLj1Ri`Rnbyp8F0k>;vq%aNzdmCX-Yyf7ypgRe~rI{zU$x5azqkM0t4;DyYC&- zNiGEonI<Q~8~#s>}}>}`=v0uGW~F`#cqTi1K}eKrcv*;-WX!u@B^(Cqgi z;v5BDSLYr|1bg|62;9iLghYno-7go2WC;nn$OF2{P;hes(BenH zMwT+i^-vrDq->o3E{l=mc{q2$r(&QstW*3|xv%`^*g`42Czl&dE07PK@h+E?a9(=z zeMhIW(3rM-^_>qx&VNkyU05I~;az)jR8eevY5D3KMTP>bS!XA-u($wmSW*Fm?n` zoHRj4kie?Awq}g;15HB{V$V-_kS{+tq5{#?dt=;aaqVikTh4flh}iX|mfEzryKCP$ z`@+$%`f$$xc#!^1*xOdmndlk0Xrm+Od^D$zwbht}qP>Wk;v}KWCEA`YU)KlYXJaq( z93q&-=ld+zzaK}LS)o~pfAcj;ubbc~%oS(lZyWa>V(Y+mLiZj3=Q{(*3V{?mcQtQ%G-`N$>p!uHa_^xM)u$BCf zIbg&Sh8-srME}Cr*MkuvC{zMqdOQ{~{kL~YpcO9?*#8r+dTQVKij!2Ec=G}r7}e!2 zdzyMJ|5lVmC{GNZztTMt=UR&dUlZnBf6&zp0zZRRrx!%vMQtu$M|7g|1|M<>% z>)eCZNMvOWMmka9gJA}D32GBrZ#1+lVawIri(lo*4@v7Z*Ao34zUR4TwuKDV^;c8w z5id_n z9s+-#-lmR?sMyr}lgF)}Hk3uaOVgFH48l3|Yi-C}90af=i*#6{=>viZdRSRECBA$@^ihM{xU9_iMf z*;o9Aqo>?|d!eaZ4cKuAkleMUT&)=Dc+EPRfO@KD)jA%L9i<-;^r$&Vs`xL+ks);2FX>|fY-@I3h6ZL=TGtYYUaBAknFg;5B#aUdb*+__w*9#xkw}9Kr!C- zObpLdMJf2N8UUesj?t^u zUffV=DcOlwId}b&5Bk3G`P=~LyL)i@Z1eb!*Wqy{qo#S*0X1SHeFZ${)3Zepr|7Jj zE7kg8M)nsEqdcYGv*|t;CmDn15qN`boap~!>pR1mSfi~yHmso1M4F0-0*Zq45)~1p zBV9@aq)4xZ7IG93kS0Rt5a}JHcS1+H)X+Nw2oNA7A%rB~=(&3DInVcp$&(r8o$_X8 z@3q!myT)Y0s^Wn8vkut>(?_YacXGaz zzEOj4tb9|esF5@9s3yW(oqemJNA#22hpV`YvD8=bCU#EV`~2 zT*IG`>iCfl*3Dw$91XSV?tI$41yZris~g0s>v%$W8SZ67Zl#^G0R*=${6zy;c@6$? zlx0m(zj8+t_N=l{alWF1VuXwwT(7G_wcz0L6PV3*cekeN-)fMIoS0|1ZuhK}wRDnm zZEqOrPd~bru}h^q+#FS0x5%NM%v}ZhH8mE+Xu|{13)iD`yKM&mODNXeU11$QO;Hx+ zD=IMoH!H5SD+t%HPdjF(e*1)0^)&KEODr!BU}K2qRl+yj*imn$-t_j~!A`zob{#IM z3#Ks8tXUiQ@i`Fia!v0>t+;TBF|J($v!6185AECDnbU#*b#q6NyJ}xn)j3f{6t@lH zNKV3E@4X`?2CJOLfSG3}yG@Q#;HeL@%_R4v)xs(r1f|FmCdt_+Z&5bs#1R+gqlaeK zD>)x;26Q*@YZirE=hkXDxu`q`UVImc3XPW$753xCA~-)CvPQV=z70~nvLMPGym)oJelfoxz0V>O+jfg{ zn!gsIIBIBdR$~}r_L-RNMS&N0@-ZZ`+cek8N_*f2YgkVO5U;!CwH?VwqoU#s~1B0>qXHKAC0Aw&swSglCBV2F1$#{pw&q%sHV(ypCnIu6RI* z*1dIN)M0F!&v1pS>D4sD?@Z+gYVd!`L4PVldXXT&cf1olVR_Ce-Ab~qT6MVbS*^-^ z;@^Yst@7EIdd9Q+-mzA#vJr(&guh#h8XAc6{);@_{JkxL5*LSu^ zb4T*hS~fInob&Z)$DG`8TedSdeIn;I1A<8tON*fkycx*V@l5L)Qb7CrPcn4S)~Xx2Y)6*vvn`vJZ|v?K9UQ;j8T6^e3}++i zt`t4!rhBhnw{P8sGVq;+Y<3ssz$%^Cr0vjrUdX%h{S?wi_UYPsI%V~S?;H8UW&nVr1t`E`ul19~ z{4P^;rik--frvi8?|j3D(vqIbskH{57yvEkbhh+{>Oy9pr*yLbIj{+pl?^&9Fgo#Yxp zo+OK5?`ip-z_bkX*L@C_SVgic@8HGg-1Msc7x4hIDug=?XJrjhEze^Ov(-Mkh52H9 zJU7&ydix6URf`WVzWwSao)O=k@3-Wi8@%$O_=l_NNKMH;y&q7>;eF{7EEb8`tNa0OtF~PD}3!Isi}$F0K^)+gtyLe&&DV zS4Vm}S2h_Y`WK6~DgY=k)DBG&03=CC_JFNFpoJ3sKU%0i135u|!j?bP{s3(-{__`R z4t2?0`VSZ?_+J6k5tbXO&6V!hNB~UwXO!j&gzrzq)i}U{{O9a}!HkSIaVLnNH*%1T zftLQCh6(=$E1lxb|L33Pj>?W5W&@?%tKBP=*8Sjy@+5T8hB}PY)9}W3OUB#c&nf)= z@T&YLV*9gv+cylvw=n_lL&apB*-S-E%$2uRQi}b>;c1z&{MnuMHdd*)wT%?3^=gLr3TNY0%Xa=-4;PN1z)M)rs^5eU)0N8l}ae7``-Spg%qop(-9~XY&CDi=~Z#MU4 z2?@qr99v>y@9w{KycWi~PVX3=LgvrVNn=%rKR?`eROeK0mN(^QRj1A2hZjL^cI8Uh zZ=gaV>~S$a%osaTBiTL>_7lxR#Cu{EoQMSTNK_nSzmC}F-4~^yTXQQ1{$=5P+kh;G z*Cv8BzKTJ*Ra@5$Hsow@v6a3Ca;Z7{`PsflAIhEM#!?)1b1v6Y=!nvp0vD2w@>F2- z`bOP7vs$kXM%?<*+z19`AJw@ij`1eFVxQsigM|83dzwliO|KH>?O}CK&^6b6?3U<) z7tivSUT~g+?zQA;E@w7tkY#}KwI z#;S9?63k-_pS)|rJ_+(=T(-C~ann9_vYp|2YK~Vyk*t&s@$I02#32INupY2O1m}2F zXX|AuZ*b3_r(IrXw3nyzp7p80z%}u0aUs|0QAr(y$d@Y$*Nu1=BW6)q2bZ?k2UoIUI7U?@3f~iWdE|qeGf;hA8!jMRHZ9924GLO6~HDKm*lgC_h9VJg$ zf8t||{aH9$rMcpCQ(C5piS*i6PVd}W@{!!(7|X4TH7U1GlRW1oG9Zp}p~aqyS8|0a zbBaey5OsI4+EsQnAu3rsiX$NfCm z_aoCqCrfkQpHfhsQ}=jTI~Ae$U_Q@7LTs@9M5RN)7AogX)=W;j@nNJ<@SWgV=lmD; z0q=SM~VcX9F?<&|}#PWSC>2#wg(7qs&+v z+^{9fnz~q=VsksUHNPdhjU*M z58lG%1Wj01j=g~r=S3q}pI+?O5w_-j3Tg23nKS93`%(B(BBwUKj`x#i{zrbH+bUVY z^g(s}e0jTJ*HoRfVwQN>Fi#`G+GNyg>X=F|m$~ zWlMXTnM&0Mx^1ZQ7uP}iF;|s_JOz6cOKuu`Ix%0K4f*7iv%&K{w!0vmGJf~^I@6;b zP3c>9wShzh3+;T7L6kiB%6hL~vy}Rstw(COyc%?sQ(t3x72?V5 zX91h9&1SrPR8Z0u4*-juOnHTjYoa+nh3U`bE}UI_m^dV?z@Cl1u$567!3>9Fz8|70 zAj%V1KY7_IS;=EfkBUOF_=OmCxL8&)Tz31KpRt6~hTM;2<{b91@bR3n)IQAb`O=}F zgkXz^bo}J?#@K4uP0Jmy}k^ni=5r-8?LZE^vBUH`*gcl(S*;rIEh=np~$&XbQq6QU|)UA7?3(VD1R zR*AEbLk)1Hi4IAO)n1HOZnMOoNLY}G+3%O|Kg++n(M>Cgn`l6`U7V3{145+#A9Z&# z;3s1PJNoaf0o^-bT51cVC7JfqwdUbmGxomfT37nboBtDV+^zg?z?NV2AZYGqxQ5{Q zC*nl?3O?*0jGYXmd3xkD(vc zlzDK)~iF=Uv zOxnG4@r!M;n5cwnUz*?I2IWaZ;&W7+lWW$-#sE#1# z_>x--^C8wu@g(jw!{{9?nfmOoo8m5`4?UZ20M0YFkhLuIBa22$d9GV zmC3K^|M6`2Hatz@Vx8M%bF`dNVRw#Hssx>%gzc;asd33&(=eVIpSF_N>e+s}ydbBo zd&o=zwZ&SE<#B%sPv5H(8glwfoh;q8#pMQg0@~Hvh*%2oi^Tm}qjjT$95l5?#XO~@Cp&ig{KS}E8@@b#ThS~r zFGw7R6psAbsSZmTY3bv!(4uRj2vZwIGJ|p8V%oQ_P@%~IPn2lbkp0|ic(=D3Mk&~R z*m>#eH^<}M&bjor3TNHQ-F~jXb-f;Wkkd)0JDAf@l^rchktQ8+5>3ofm+M*Osp?v6 zL&3RfaRMjOP7qY{<}0iBy7xGQZ{1<#>-UyGLyx9O61rP68ToS~@0Azr;^cM$=1|g$ z+8{Mg*w{F-Ky;EJ7a`a~jPIX%loeZ#rAw%s=m&}eAQQ7d#sg#q;7PC?)Kt9z`s=-N zUC?IAWq_=9K!~`RH+A#niYIv4R&EA~7qbR>QuX%;_mi_dj7m1@ymckjqOfGI_MpMT z7@xTXVv^Ac0Npz8kkxbnHhEec@PCN*?A5w*r(RJRYp%2SBr+T?Bc5~jk=&1d;UW@0 zf~ZsIEmWco6cs_HJ*SY$a!v!}WW{PdGXs>*O2bI0>un<$M{b5nO(~ON732QV^M11k z7!&h~j-n4xWHRZXQk|@W;*2mt1h%6E`{SWywB#7*0I^$8 ztJ6KsJMmPsb7=E?13H4C=hXK^SD>9wE1rwHbf&OJ6tc3_Bet_W3Fi>enaw&6-mK1^ zu0uit%cYBr;(Qvr8Jagv6b_5(MP{j-0FPL$1$TX{TDS1SS9Ia>qekg;NwtVxx(%a3 zFhv}D+<3WSLB~CpevHTF9%|TTU63fe62B4;RvmXwVZ&Rluo-6{xNh4j5Zagb{J5t1$P= zeA=F}0&&wE$%zm+eOl5cqsrQLuQ$g2Al{pKHHu+6Ht@LPOn@bgVmpQKeMOiL%>m_> ziQbpk?In&*w!i$=FJ@_Hk`H;XMlJ#;Y;umlmzIw`ce{RoVd66(hBL0kPjL`zPh>ub z9W(=1q6&KH)-9ddu-*(JLu*C4Rd)M_qr=_IC#k!UdaKiqzRlJpJIZ}Ef9Q2_)dK<3 z`pn?-&9b7}d26IS1{94x#$Vw1R!epx6i*lrSlrDD=I?)B`cR4w>1k1)A>oYqSS{p@ zpK*J^!bjizF~rXLo;i)z`Fci^H>2}o3%;RwP@OXV8}*H|6!&-N)oZtVVOAr({Ww*n z-C1_OAHGC`;X}pS`;*f@h68jjQr2?eZ3P!H%>@mktt^fA}`fF$`Y zax%*b5+b)9v(xu*f@u9(U~M%X-HKb=9;DtgQZpt!T=(6++5GJOJhQVIFU4AzhQB)- zQrHNgTLk9M9S3mIEkTn=hWzwSpNG@opu}|%nBExOnK_r(4TeZc#QdI!PX@)bDp6^2 z6=o=8=sFl+}j`#OskR1aL`7;WhT6V)P_9AD&|qix7-F>d`zT`(BF zgeFQGD4@%GG9CCA&qZUPm){T zl8TuIDnP68-z?C_MkfKgF7>ryW30pgY?gag(3bIz2zS*CFqg>G?Wg0SLJr|j8GOeu zddnxttB4ft3R_a_wW579Buz3mK=vbBtg13a4bq?+GT>M>;~EZL{5KxhZZNU}bf5<_ zm{Nyvp#Xgha9}Z{nR#MbiEwqDY(>0lAL^c)S?MoV^U8{J ze{|Izfq6)y(MrQlIvADE^@poY4Fe*==qbZx3C#)aidYF6GVeGu`!Q@UO=^Wlj#o(I%Eq781AISD)un9do{887?H4Xt?w=u9O^ zDB8_qU!?PWRk$XAHnM05Nqq&!ayImN5d+#rwiu2% zrMl)zokXs4cX#j{F`}O)=C6Kis-=wd(oImmF%(o*aMoEh!Zm=o_j<;3j(;_hfoaO- zKd6>dd0FHYF+>qJbe!4%=)s@>7D-t{LPrnD<^LC>YBbvbgo)ggJmfbJsSW%mV7&EH zya^(&u@aW24GF7xwY^x`+1*qBibfknMgLP_c%)}mB%i{pn`jb(x z2ay{7*QW7SC6I_xa5N0^&B4O#AJA3;33MDKaP0%mRugGOTN5jan14s3M-JF4Xq*oa zu~bb?-_}0^dSy{V%=fw>^38t=q2J_(T{qs+Prtu_htk7PR7fAh#Oxo@{BXPv@@#g%7&a!jz-c}$xM)8+rNtEQ`a*Jk zb3lPlCKFeJ%}1E2Ks;U~-23F~!MpHmq&Q&FRpgsoSmD&8`q9LIIY9_vpFX~gL3>#4 z%iR|e^^~&OG~@O?UdyLjEh7nYHvAsD5}p<>s|LfUuog`gGCe##U<8 z$70pSMHm)kwJ6Vox>rWan;aGv5DU6I>f1?Ruk;+uKk;JJP&!X5wlK7d>@UMiH_fkPkG~dO#5<@$Nt9>uar>j4`+a$&9aOP&7yF9FDG16#& zypq*+yJb;AlZ2s*V5>Cc0Zmmuvo~Q=C~77?p8u+E8xX`Nt%dzDz8vI!HC+II=Z#Vc%SK;~e|Q zZTh$ALyLHMt8H@TtEoI~j?+nKC!rDM=C1|f?$3E22688o$S+GfiR8syy9;%7b)^2U z$>sBrfS05#M<&0{&_K>5l+(d(mX@xngGi=S4CFjva&Y_E^lSF4Pdd#08%rKm#s!z% z)SUJ>wZCA~=zWEyrDnHW_yuG>trX9$>- zAs@qWzB+Rfll|G>j_Yu(Jm9W>HBu&APHmV3OXk&zC6!#}<1gJJXmQlfbD8oUl%yJp zs8r({#u{ji)NI|;y`W%u+~l0j`Veu!`58u_#IklUb zCc`zthcD*Oc1{?GGmoEob6JP_m$nJay7n)D>uR4j1oB3wz51&_!+8>6Q#)ublxWW zlHX`P+0B(~kor^+ypeUf9;J5jx{&sA(z?}Y17>Bb!@HkGjlXw3t%J!!mS)3P8z(L4MYL}1a`KQi#` zk3-yuHUE_3*Xnur{>in28K;SpUdJU?ed)ClG|a7X-(_|!CQ#R1?3B@wO`Ci>lQ#p- zx?d4>cI)SyP?B9ah8}y|uCqb7$tizAsHR!^f&8%CsrA-8KGYa-@}Gd_x0=uL;%>;Tn5 zEW*zX4ux(4Un%3(fPDElm*JkF~Ef~54VYeJA@q;1Xc zYy&%uJUMNd|9V}w_nX7k53L$>m*)dzIkZ5K8rhBPFtqI8$j~R}n3#Y5eSvhPoP(Xu zD==kRXk&%Qc{V+?us>O7PMx~vxDigpgTPJ`#w`4h3dy_(5 z%H=ys$*}ZQ|G15tg0#I`l(cMnYXjTrE%X$!6dZQuFzX8t6H2;|K72h<{KZy66x-fY zc58P~2`=vYO)bl2;XFRXu08#dVq{ki}@oFAd~_td(Yy?adE zyyBXj;H)`8$@HxvMQgsdV5vDu(VI}t-!*yDv+x&omc z{us>jYhBGP!^r;D&X5Nyn+tWM7brPxC-Pb~k7rOSBBSHPihO~qQA^yUP~DN78Fq^2 z#qPTmeYV#o5SvdZqsChmYmJDa0zuB#QF@Y|IyAV*1mc*uKK8NT*NJfG4BtqD z)QS_bM8N5(iI_2Wtm2Co0dvmXh64JM-aHoCo)5a7WjU~ux35DSZt`&Nu-*d+^<=Z^ zrO<$a?+ZPw7K$NvwBN|3v`TWoo=eqTSU>W_lJ#tht?1TZTHjlxryS?6i^wP`CCPK7 zsx6N4wNgvhU;CrKmLc6z@S*2Sn}V#lmgk#?NU7vgEOoR&zgT5=o-~k->J5QTdU?L8 zGKPnr&8KpU2Hq@Yd1=Qxf>^f9BMjg+;F}gjTSI4$!{{f!RI8RY<5=VGypB5IKrVU! zm=rLG3|23=>#eaS#V3Z;JQ=O>V~rkQWj(|5(%D2;zgU;_*#^{pVwNFl@R`P@c*j1k zpv^VI{Dq^PpTvq5V&f}80-VX9f|VKgzlql)f8PesQ6NxPBNxxI(|%USP5K_x1EJmw zbsbf-p(pfzLOWZ)kesSc3x}E0cKZ>3LcSk^vKv2*NC2t)KVhcIe+b&fRHqoOf5n|g z8aV(9k-VRnX9MSO6V=YD9{_Jl0BZLamJ1Xn{ocH4>jjJiq6txH|DyY+fyzEJL*f<( z?LRe6tmgm0b&u%B0@CBj-@H5LSRW3EW|x3y_80Fi{(pG)!e9_-2w6-!q){FJ1mlVD zEf8RxYz!1<6v~d(S+HYNuKij0>nIzAo#?oKAMZcQ#uG}6_Z)trx@C_6a}^V*gG&p@kobN+;Bx*1n1%%ZT!uV3k4*Je2JfF8 z#(R*(Pg>ggmCoyIqr%rNC-hIQ*oK(N)Ha--`supY_h_1vYgYf%jO0t(W=FS=9|;_a zR!||qO{4+npnE@M#UxFNKEc+l#h_Nr3MF$)C@kFxRCSsg-10^|Zzs!P(VAGvQ3Mt9 zk&rk8vZiWPW7G}v+7T^xL{UG26?=F5hYSrI`$*LJSu@77=G#ON^xXU~G68TR``pY2 z;a<;aiRxg z`0o%CNyd}zNfI|iO3FsqslqGvJO#*=4_I+U;>3YN{dru$??_TVq$XmJkT zCt{-;W)dPvnX#JXhTNivtjbAZtNv)0^GM+Pe7)Q*a?%iDKHofnYk(TMg;mUT6{k^O^?&fIOb91~Bm zr1abcQ}^Q2Lp9zr!0pPv}LBvfWHin@*a_9D6A19y-&$CrL8oOskDBO*l|% zX2@)opK|O=jf^Q%4fgO5TRHI@nigX|CkG634W~!z zcIn+$M%zSn4I*Z+4M>f14%6VwxgV|Z+cO4Vw^U9q?!nFK^=1^}zC70RWL2w}E9CBv zemIhIu=&FnX2hjxU)o96Z2JBbK-YUKCU=e~mtfXf67I5Vm%B^ts9JSPI`2Ed;QTRO zpCr#d!9cl&?suEB#-+^4j5#il-r?b5&@Hdg{7|GtiK2!4=Q!2p!J<*5W(Dt zocC2!vY8AlxqdJYUqAZUKxe&U_kd9+sfU}@x~TY;(4DZvO@?^aB^2g`+JMed8Pp#R zJO2XNhogeP$hHhJF`_)0IjM=DYXB zL^14{`dXY0pigxkHAH@QXj@P>3qMj%I?(z2INhsH*?9kVWKN9ND{58atErtyX0Em| zy#)H27OlxXETcp7dIYzF33>R5u+n{}X~`3}!}cfjde2Oc@Gku5nF;UQPD^vDxL79@ zIy>uG7RA2e+d1*N<@O8{#(VKf@AuGW0e)<=w5M7-pjl}0Fh7gX_R zxdL%=nkSOad%OK(DySko9`?wjd6meQ1y_&?%@tBh7tz6T^hnTh+QemMV7VwMv~_O3 zEEhotA^6Q|>sjSGgTqj4j9&Qb`XX&z@WfHbg$aR62ZatUt(s3>i&kWI)w&_tzpr7g zltWKVJKG_jXOT~!C8niQ%$_+>@7ib;6uQ;G_Su4JWpl$CN-8@@2w3Ro#MG{viPNjd zS?}5UtXqBG1sG295izX*K9DT!&7zK0Pgu7idf;ZNG1G&jvfPs&aPi zYis@G!ncXFum0}OAvns8*@3_yE<_bjleLksf}52kRgg#}B+4J*UXL$TsA3aADWV>m ztdbnak}jp;kKv^389w&jvY(bc*ezre^zj};CHXcatrH7}zxmaO-t+V33*gEGvE{`& zbF3vBVV`5?zp+JD;dkQx%0)Yl3^o0Ja~Yjy*z$dCNR%rEATKc*wNY%84{H4>05PB6-vo@M!D4ZI`Qu*W)Mg7Afu6inDLH|&+<~O^8hViI+i|XVFZ${<8L5WK z>rpU8-e?CSBY6Yf(_2NsLigY&uplm42RO5Itos&2z0Xz4C691`QuF*D9bS9Q0Rt?x>pj%!bw@Cto)}}@hjI)&>&xGo zs9j{>yS0fVIm-~%p=LKXE(kZ*Pb<=-vV5+xtSInv`8O-I@sblJ*m4=#f4K)rblLc<<_uK|K<681)jHIr{%Ng=d)+HYg>Z5&N2r8Ue}x_uO~4< zN>(>(*S?m`#7Ca=BE)b}3>q%a?SuF-OJ@hg3Z?!|2H%I^mN$`!uB#V4-@vur;CEA- zB3sYOtY zqk|X)(jVNfKlJQMlv}1r6iIQ&$Cdk@DiK<}RfLI*PtEtqbaMg_ptqE(%|f+pD_V>C zT$WT(?BxYXnp{01aj*o&aXHI8B1RRiV7jhuAXFV|1hMqkB1zOXm<-JVcC9-elvgGV zGxZJQ3yW(d@L}=0e<$dnN8i+%J9v$M0W*Dwv-tje{1Q;j;v>cP3^NjmS2jpa*6kQt z|o_4Jwj1`r ze~1*}5{7#27ic0hNyh|pw7l)7!= ze-9;NIA)czYv)6sxP9T!>-o3T?XMNHVFhvDHf%Ncvsl~n#Mh$|OGCIzs%pp{Q?21V zntPAF@6^Y!xl4#z1=#YZUCzq&SijtQQiW(hUfNH|)(Q;mKJmm^pQ(dh{MzW9$%eZ^ zXE7=U7Vi*Y-F@#)v2Lp0)^9IWUf=I3eD@Nmp0w_EI;Y<`_L)^F0<=o|YNO&V#>W}( z*_A#f|3O@rTa=cGP>l+)yYv?Mf*ZFySW+_MC0K~DXA<%NNnw_L>ga++#=6t-0o7>tX;OLOvMZbD@Q5|8_DQbcvAd>!7HvA_8L=E6# zu)kocaS$n->)`B3cUbl;uMAsqa(|pCs-pz^^!BAg%^)^c5AIHZ49mn@r-80I}k!C%nHyB>s9+Y3*SnJG?iN} zen!{Er~v;EjO89C8C--8*+}3R98;3#t9Dm3Gj#eJSl1%4AGH4g!7g3<{}{ z_Zh_;9dL~&2?&DFKYBKG$K=jQLOpq122JOwta1IX*Txl{WUM|h+f!fOs&CJr2+n_N zTmv9&i>e<#cCV^EU_!+WaY4h3jm0~yA=2JU7vrj;E2!drv zL2_}mFww1Q3BYyi=Uso?9pfk&+%>OCME|#o+mR}l!Q)@TxvAf&O|#^~eMi7vr8LP( z2oRzis*+v*S3ou=wI2zZF780$<9_NZf8XIFP(Um{{7WqFJLucs*)*B(XVtF{Rk{Ba zk^OC(lH^oE@}cbW{Xzi55GX=0m|DAn7VxIJ{BE2*mwP}$?mGg(5FhP_*r;dEA6RB- zypHlt*2@D`v6bOn42rvK^&f5fkwP&^=_Us3O_=m-uRj(D>1H_7X^9l?Q_&d>sYKIE zEWV|7Yunma@J&DFlhh~1^1x%|y>fKC&I@1VpfeQtKr5EZx|ZCq3-t1S-k~qX_KJN$ z?!D%FL~vW=v0J@#Z;9qOiaP9CbtmD72xFc(%#BdXr?XvYqO(|c-MBJuoec5ySZ<8~ zIP7z~z2udNKnt^u6a2jivzy_Ix^^`5snT#$c=ty=@2u`doDY1k>>HVCCwD>U7Iag5 z2Tz7r30bN^uO_8w&O1}L`@Fni8Z7fBNY>@IkHieUOlB&a9}AX!-HYz}NT>-cxw_0W z62hz0;N2yE6E}OcVbLwgqUfGly3g16F-zWsht_BO(#l>W(lX5vYQd7u+fK-|RIjlO zpR0-!_HU{yRfM_q=US{54^f}|PjHxZ!NS7s0JU{Iz1SirX_88!#&e!T!P3t@a~w)v zQc?7}2?gsd<{fb1@u%tl*3s+^tvFxbMFAQcXJLrfR`aixN1*4cxWrV4i^6snJV#s9 za6=w8veATqdasyuUBDxQ#4Uk|Mk8yC7uw!27oJH<6WYqxDLj@sNd(UMlQPxB-E#hg zR2Qtn-bY;~Qr&2|VIHFr8tzFbTyLCb79Z!ni8-bfv;Vg(z0v7Nis^kG19gJpm-9xd zL*~5bV(|bmujiFM%Vp>X& zZ8$1*k%<`Ko>6}Fz&xR!d}0dWR7ciq?~U&JYt)}8;y&FUs|;5K`yjM3dhJ zUCKXeVq~GzL0|laG{)A^ze8ze3(^s!plqHAVhRc86vQRNo8?}}>P{DwaYZlKc6tic zs+ZZ#dXYyHY9RVRgE15A@+?wz6X=jcX)db*8YtyhtRTD9Y|mJ6+EU_qtU;pyC0yd%$yJ$VaZU0}ORQOgDIPRDj~%0{&JS zE63JM&!fxw%pE#qMQ5i|SE5zOP}}+u0pHEqGUtV1PfhUN9_|u$MP}AmK;%tK#d9fi zb=RR%9tU67x@kqpgxA<)$nz+vW<5`bAXkvk+MR?2YHM}XC)YvcfHl|%nsY0Jap4h0 zCmDQ=X3!^5np)FEde|vardQ4t<<=gQ$RAPQF}__$E8WXGtXH3SpM@#6a$EAxGuld$ z=8lz+1!NRagn-*Upb9TF{Av7mx;SqaJk#>A9#JSSJom>fO>XOT7d>c^DaLX9pl{cC@j%z?Na1@q(nCY&K8RXG+o9cTJwR_xyBDKR8IJa~ z(=gE{Q7&`#jdg+opSIt!?NHVyU~uKnkPmO`kNW0c5-rX3n%zhvOP|XXSM?xDo^fu; z^+=O8sy`|h%bk3ZEh*t{YMf6~9XFTV61{%=$~oi?%eNHh(np4q$HeP$>8D&Z=s;m3 zW)nLSFI|TWqSB;WEKg&l6J@&*(90Vw?0l0%6NBMGS@(Syj*tt!TJA?E3R>ipV1&p^Nmol1`;W@0# zA>baQEv;e?9yZa@%p`Ez6$H_#Nxj*fx8{M-7EZR!S+=D}o-mP8@2IexVNprPMUWr? zPuQ9K!?PNQ4lj4Ql?_b3A1Hn5FnO{QUPOP4CS5^#2=Rzo)4p90p5gQQYxIRP2|@gv z70wzKES4133+kcY@ol0^7LQV2JdY9z!FS8!U2rc2FDy2AqF-G|HG~v2d*k{vfv4fs zuxo+$Ao#@B3p%z6&XX(Y!t}YQhtU~4?xDd64sDdw96^`9M~04EB)U14t~X?H3SJ@U z8KULZDC=^HHT#DNShE2A;qJG?E6guWxb(>jn7B9Yt+c%Fe7=Lo_j<8@`W20MPJ- zA|KFjWpg1WAeWMT-MQe3)57%-oJ$dR3u~UX)$S$S_w%f>&H-m7QDcW!6hF!5&aA-{ zM-)FFIBO^MVe_;+3wro~YzGAfZQ!-kdICRY>54!b^W#tO$ zFhTtnt~?!4)X+Au)f`rygjOXT$uZgL5P{L;BUr-#=xMmQHs$rAO8NP{dX}5(aF>nS zpXx>pV91~rvRWMIOwI#0wa0IcNyvBJ@O-XKd6Ke`oO?^D6@L?vlUV0qU8@>2KK(Q- zMR?HvUf zVb3v$J4|f*O|EdKuO9!V(EeBVm@mz?>}PjavZDdSWNuhRozySQOt*cUs`Fcjh(54oo3?0HTwvz43ndp z@yk&c{P8aYZWq}DT_^R8Gt+Foq8QHhV9f<>XTM7Y*l=4exw=F&OX#y!>@2=V=l10i ztJyE;eEF=&C-97Kz)k8!&vGS>)W~?2%xMN;J?Z+bfhw)VC_L!}8OT5#mdo zT2#!YsM|s6(qWD%{n{|YU05Kblai6)X{_z46P(0EB!291)qaQ{3W+}ad&cO%Tsi#F z9gUYUE-N4-Di~jKjeAmap$0>QA=aOTD*s1` z_zHe_2tKSN^iv~YV}y6V3vvF&@P%Id*--%r#hR0AVOB%yjj_LL%l;>=kqDMP_n)sm zZ~m(C!67sbYF-{YdZLjA#J;NKy<<=c{gx`hSmHqdwKAKSZA*;@_j(uu6an;IG+by<$ zWxG?0xyPgrP+2R*a-4RgC%EHUVL56*@`x*7BxU_r9oE4g23p)+m#FVIL7ryF8fy9$ zKLKW1dvM_S$VuH)`>Z~%D?iXRPbejl-VdQZyg)X%GpMQIe5(o*9xl5F2JMqHUY5Jy znk_Mp(&e2$J!V2nY{bRr1-&jz)p%+EnY(+#wdRZ6k1&_@h|(u#a5&*OrPibT@!hWa zu-6W8(;p?*o+K@=*XQiEio1jt$;o}(+9b~xcM3eIGUR*SfwYtZAx`D?@!WMe$Ag0u z^*O60eSNrH$zAZRPAx@qBxaIxei&8!@&nRmy<~0tI~^V3 zeO-IGn|<%H?kH@PBCL8Q)_mP;TE57Ze1%Qg`il)?Z`5CUVd|~By^KC(95oC=WHmE zw7wT8{uHt&rRwQohTpK&6sMdu&IKzy%tk4o9!awSk1DuhGh2%&ZrNA3Yqo^e+ccR1 zHxEp}al$U-)OM)<_2fK4TCI(m<4glSrlPPg<$xWmJk$KIl08qww@?o9` zUy5pNN`vkndaZ@t6f$(J+=}j;-v{*_^){o z!T+P{yW^V5y0sk}DhMb|q=`xwPF&CcSq7sZkUV=~6;R1f&ycC?SN7v>-L~ z&_fS30YZ{5zBA*@eZPDEI{TOGbN0zTIcx8=*0Y}HK}NN1RLS*RH}3#X4n1TKRWQvF&*x^R%^kcoxe@qkAxks;KSVmTbcRt z|J2%+Y9J-H-<%fMv0Pq!?&Oz_ZG=^&-Qg;9_YNcvKGu*m(93^9gJQ0uxmrTD=#|AF zSh+@aU+*}CO+nNnhEEjc+$H*DkW0XG>xE2s<}>x)JNkkd^||o3gbInYVmsHSH@sP* z21`KY_39~oF{TS{K6cPTd-?$Io8Y@&8@BkO-i_Go5Vii+Er*7yg!+j*oPig@v| zk!$sFuj-2p>L#beHr`6t^^X^e;g%tW=4#vqCS1c_5j~_;9L+oM0;M&coE#2Zkmly_ zPK!DkyC}txpz+cAg52r2rT=$>cm&?r!~f?pq{C)Qj6DT0cFQiE!X5k z(yl6Q<4YDV4{7hLlG_!=uNxjd%6nrNu>NoZ{QeqnC8^lp^X?M|`A@vDV|#j`L-z}0 zyxP8zGIPnpVuUI#RleDv9<})csj$VMM6jElS=LCfi8YhV(s9Tu*w<{^AsWh6XRFDT z^=ElB23;4Jb_`P5Pk5mHo-_FmWo!?*8mAe^dkEv&yqUJ60ZSxp3(C)%bNcqAIY<~8 ztld&Id4=L(#Pv;_1y(JF1mCZHnXZ;J%J6ON!lz(1Mb#sA+EIq8!lqzWZ%#Y5q>WsX zrq{}?GNXm_&BYb?Ti2%5%i3zTdOv+oEu%@L)A;!+4WW!jmH@dvm#WN?X-W_s)Bz42 zGJ=8YDO&%;yv@^)g zSu16$UexmavBl67zO*}a2F%YgB_5(Tn8Nlc41TEQ+hnpAM~nrmWE>@x20DA3JceVu zc};vYJ_>~gmfO=*a|o3mQA@yg*_0VuR#tDa?#J8_MH%d)irNZdBrHWK&){a_i>f??a(Swc=M*rhHy!K z;dB{Xm1;vxLCKr`7B~6g3_~_WIK5}{2YK*40|sQ}^37*DBsm5p6`r^xpg^Mt_khca zUaw|kMdz%@7hnvt5uf1ccc7C1>UN^RcBGj3oPj>((&|X#gB~*a^ug6xGV`=p68Lnj zOqUVy!(fWb*s@hwMD>&7Ozy*cyC7wc>x$cGqysGU>uJvL^)JQIrq5SH7n$i$Hu+RI z+o-KXRH#4IEQyF!XVbhTx=E<%0cd0z+wLvGD-kwoYFrX=DRcg77lR&jZaE0xA2oq& zE*&Yf&w>w1x_+NCWSb)Kq)x@+vuaT!2ngPW?dt#cW(JX>9_unpHfsEP*tZ5QX$l=1k#G|uWzPI6bVOz>ew>{np(THc|g z<%xnRo!RLdQhi}1zyA$YZn;o$lM_$w09w2|lfk@e@{PPk_{Bet0kI5K>Z{cr%T~|c2HG5(R|O| zz7VPQw#Y{JKl}!sB_iOy-1y)<((2f(I+Ds@l0uoAR3Ka%?7`M6vpD|^caNcVM`pY` zsbbgu>+q-InolIYon&ylU;ys$?$1>4{_1d;={$i!prG1glIyCb$}~EXm(t8meCvzk3{Nv|b8qNt8?N*Oakm=8hXK#{{IdJKUS+d=2+Vf@3a;F#^?S0 zg}^W6#ckA{fp0qU+xE`(G^rGxl){j60=SYmpZ@CQenT5(eJVpLuK)YAmX$gZdUXT@ zb0F0^#gYKs_Tu5Kajpsj z5vEA8dteeWbSoW$1pV!`tXhx|mBEB=fGcsGjquM50o%JyfBur>n^*#gk(BLN{%h{) z?f>cf*SrWc{9WVy3>V+AD_(2qrgscttHAavT0$z>y*G!g&5x3)S~%}kMM(Vqom@79lG#r$0=@b`!&?Mr~py^mx=(ALVTd9^4K z7sx}85EFA3X_v3`krZdUtJ3}o)C-G*pVW>G0Q7AVjS)2S7*z-j74-pShbXMgJ!ipt zF>?{72O<@7B*W&*c|h-@XLfmyJ-$|vAY0+waF5b-D{92g>E|@8-ws%&U-+?xmXF-yvI7eQb{Y07(f>Cay_Kz{K|SCEHz%ijx;nq)yn_)=F-_))^Fx! z{#=qN^%vPu?=N@+7WdPpgBIUUG_$cT1sog%$O~c>M@|PYvqIjlNBkxo9Am=9VmTu(!6!dbfu~{rOr&p0qU|)q!*;3uiR8w&DYUkOT@0d(4XRV8p9(O(+ zO}{4I?rD0NX!peV&JSk=lO@bC1jv~GJ&Z_5 z55VTJXH61aqT**=uh+t;tj&n<8T74z=nWyd!qQ%$SDYM1$}c^Z%Z_G=_4o}0&zW_~ z!EUy{(Wk=d6gDyiNDx|L{Fx=(;hwaGi_s>44EUqZ3+_HHcS_dx;R={@+<@tp(UACn zp(t%RGGLk^|7&E9sVT?%OqG-nSRE#~cWEk9Oa=Q|b&CVxM?^{4e%}v4b zs++RB>D;9WPc!3G#j+pmSU!{f)(04*_6Mh(ujLL? zckJ1Afyh^M18;nJb|aTcXo*wlIM!;B`_xZ4Y9p9UloBM2o9{|k^X2|-ee z(eSg#C(E@%gC!`PqP=4mh6b$vGSWa_++*wU^3j~E#VXd@COW62)Ubw)6e+nyd1jpU z)NgFAd!F;d{G5}85x#-LB|O0j*+?|PotzFKT}YM_(|FQULkiMvrQ3l>(wai&S^$G{ zu(MY_E52D1Zrfh2O)oBguzV<-O7T50&qT}mRe6+;YU-y46D}!^w?ca}3Yl0Zo&&o? z_r6|wyO{I-{2|p_OMB~<3S$}vL)pq`+Bgnh14eh%nDdDWJU?_*TWM2U?=arLW;u!D)Zp)&Zx#_X;U8UtLNSC=LPRq#eW?BSWl zsKQ>5+dB$I2lxHQS&;fo=(Xvu?mH^36}n7!I{jRPZuAVuvx%Z9SO#JJAMc{@I`vn< z+IDK`=&a>@-ya&(xbI)m>*`c9p7C>OPTR>Sc?YYv^uUHYlpv6Q+-)`gT&>P?2L_`NU$vO%A2Jxsv_D$CR}@ zcJg6&e{knI1|GBD`=E-8)a13hhTF;@iOTVH2HoeQ}9sPTHaEte1Es`RR2)Sc*UlSfDIFVC~Gob zQg1_-@kYn6RK=3i-2?->`pC);S7)1F2$DBumiQR*FuhmFPOFRK`eJ;eQZsqA#;cBz zHb$10qoi|!iEa`=vO7c^H-k1xn6) zGI?6nrs+GIydkpjet6HW48`)TQC@5EeQArVB0MQ3er%$E-ho@}kL5gA%edIsNl=W z`B_!qn=@H6u`#KWWBZO>$jFFv$#>YHH#k+~Wr+xtCU=*7VQ3S!5tlAiwsIW6c>O zdk#vmWt2Y^aKoiF>f5$ABp`AkM()Gr4i52XO+_0Mobz@prp^3*v7irpE!IQ@MHM8K z99Dsn+j-C^{haR1b$^Wp$TOa$ek=Gc^Iaw>~HGzh> zLB|8lYH@7MvjqJ5QUPXnhygR7FxUu?C;Vds=T}xS1Dlv7wkEsq$NdkLAx`B};m*F+ z69J}9E~1t0Z)UF&C$^4@{&pEjR+GYGX=7CGlpyVch4Vvj@Ulxl?F)WeCjkl2izS2O z->EtTrfG7q?_Q#lYU5^?Ha0_6($g(#iVuxm-&=|Lkv$@zGQ&|E<=MvIcgu&rPe!QMkQ3yNHrwNf zVcb(%5a5}}Jr$aFO@K=@OU&5O?i7-X#i9H2$rL^_Nay^kO@|jm!iNv8 zT|3$!Z>8@=x+sM%DKa+OtYPx;V=>b&xLr`a060hd-0_IegdM>9htSrgyW5$c&r7TA zDI5Ub2gR~2cxv8N_1Y@py)vdgmfs-_{v#0s+`l{ArkZ4a zkq{#@i&Tte3x!A(7;QY&m-Cr~WWLxtzu}QQFzThV!{K3kGGn}+`c5iD2%CYJu2p-B z#Jr67azTHUnEw_AoYYUY;(L%0z*{@=0&2WYG0pu!c7tV`*`r9dZag;ePB*LL){KSt8Wv?kW~R_n1e5};lEwP|BM&jHu~>zf42qL*B=i-d`V@_m=8OU z@Yt-04;pgSWNd)(GeT(4>9Nyqm+T$h9k=QYA+}Ec+jk1@o|UfKQeq1nX(rBX`^*ab zzVbhfmK=72$H51BOas+4)#kFbLrosDTfO&*C-yn`8kkbGlKFGUClgsAh<6#1zhg)E zspn}ps6T7anN}|W>el=%>)HnajjZ&blm6!;<5#tuKon1rV^^hLXiL99&)w{3m)$Ai zC*Tuyuu@!6bj^E?&+kW$_IVID){nu*Q+m}*N`1(ppT!e-f<6vs5U!=AW~u8?mojxU z`XZA8_GD|b3XDlcj6ao*opTbmAQn4>o3l;ZH}4fQHL10^vnYEndOXQ|;j&=A2yE4) zE2FA+d*Qu^;VTeag(+4XJ+NOvdoc~9i{H-Ac@=GwQl9x{kasKB3@%Oz4!@RQGW>-DG>JplV6HiJEPAz}vI0jFy!MJLp z@78`WMg%aYA&Q)4saflSc8-0CT_wDf1%sJM>lSV%RBG8yxhFXOH46*t25$;1Er;j4 zN^W?@`szKiJ&zn#%)pow`-nT?Y$SnHa4;c0%BZ%h>rC7C-u5fDmyT&bUIY(U)(SfR z*6+BB)x}$x%6NDnJ-CqGr6eY@@dVSo#y--u=l9-qCwd5iz}9~AlzmVd)lEOFf8rO{ z#hFci__qrzn6}`t8%ECJzqb0adzwpoit~ci8%f{sm?3iKJf#5>WjOQLIoMfMY8`(H zpI>e&*B8v%dl~!f#Y^CL9Y}rEg(FEI$kaH6@9I!(B$=^!b!}wBhKU>>IQ$6e?2h`b z&g14JW>2M4<27^%TLYSW%s^d2+jt}u6OhJtf(xm2+BWIYBc{@DA&1jiEBhGKQN?Z| zHadO>;SQ$e8n?j~_cEhOX}T|YFV5DP)l#9GY!SqD-zga2x$bs1_40QIQ&k}j-S zEJ;{PR=AyPYNd&7bV#VIJoZOVzL3=9#SOK0EAQ%`yfMQS?{O3gSMaAaZ!O%EJneui=y2ltxrKCLbHVKzv;% zN%pP=M?5z6St^#nV4{4scb~iLHBt84%7Pt`%P`vKj*(6%+57s(s#g;xYEGc$dbhm-C>ikIcA5ENYY%qB zteH@=+g4Pq&5SZ=fp8sw7L3R!C!Tc@7=7`INW1TF77p;l=Kz z&8u-B7dC+A#dlrauCQST)v=T5_nG9wrnHTyYDFsv6%bm<#5z#}LWEDbD;e>d``4VQ zg;783uv9$#qG>|p5Dq41E%|jB&0Aum$qUd4nz7D(IkVUZlar(tvR)9om3RSse`9=h zy05iw`SG{B!A!d3_gh{^vnc6%N^BE)XOZ4*10jEOmu*<^mL|P?3$~G@4r$!MoPA5s zKG|G{LAnxP!nNx>>#LA0ujv8h_FAYeC9_)ZvgTEnRPnv=cqWgVMmTiWM@V5o^pB6j zQkA3hmg?bevwkG-#}186SXNSi*~!YUANFt#pCfVG>;L51v5Yc{Bvj04hd;VcrmHCL zUG5|De9#Z7ExVN_%&LmlUO5CZOg_K%=eom?poZcQw*Y#5?=>-Y1g5HE#0@-c8Q2`+ zX2(sGscBq-%8iY(AI8FJBlwI*>A5siP~ARNwj2j|v%}MmF5gzaL7hz{OB|z@7#`X+ zmIO*?3ajlw$Q-{P9_1}eUMiwNpG_UDdJP1>#g<{vpfrZR>;meST}VS_iy&Rlw4K_L znwAV2i5*aqZD3%;HY2#Ugmz2^l9nq5n-_!-5oP5X6LCSk@3k>J0PO5I?csI7EX8D4 zzKOnMTz%=EreI1@>h)n2<~lC%mmR3@4{|L!JK|Pn^0uVSKOyvix(XIX>BZr!MSu6L|rF+s@N{8Ci%dg0GK-gd zHHhs(M7%-lzRH}Lr~X#+{Ph4K^Q`!6qAhS`KJ|7)lovytoI%weD*@sPG%zWX>TJ_Y zhr_!Q+{l3a`97A|Zk7F&I4t#6!nZ(B@8(CqTxNrdR#rEcCTjMGwMGUdl=%pfMp9KX zHZHn1J%jLlZkqxuRxjNxt>E8D$Pl)b)ZMilDhV%=EoGMZJ6L?~ocpfzU}#juiQM$w zq%`T@69IfP$@9OiZ`>mTFs&zQ{g zI=^>d|9nbf{~c<=jXQ0la?yYSJPw9W2W>6na$(TH1T02;07k_oEB3ql4-}XDSvd(r zJ@EUZU-oHnC({^{z;@OM#f|g%Eb(?v{VzAr(rIf^YwawTbK;h|0^6*0Ybp@u5-GZ( z%JW%uN9)p0nHvme8z_XfX6h9rp!?^l7CSGK)h+nvRh*PRx@`ZxO^fw}qzIvXSGqVa z{Odt|5R9FdMVV#uJsQ#^nHq6!u|M|iXOYWX#4puvBdD3M5=M~+rH1L|A;6Yp@t26R zZ2F+--WgkyGCFO&vb=m&fex{>P9a0LAJ>J2xjx!!Fc7Y7&e=SZ2HLWhB2FSs$UE)! zHot$e(-(cB8?u2g&b;Z)w$;8&sSD9)fH)NI)|9w*MR(h~|l zs!ebANl2WqEmzEevW{$4HusZy`b5uIF;@V~_5Rcm<8zK>)8M|(^`lq?+(yi!7dM`zx{o8E5JWZIK2c)RA@&Ex)+s zo}kxq*%2NBm}R8caIuRpkZOH=SGv~EY|wc(_2Dx1fngEtRf7eRPbnrP}%PuOQ51RTOmEKPOu9uW$4nHnqExV2$#+)( zuNt?k!#p7L+`%IX>D0kYqe|4hge7QOrV z53}rwsK`ufYAG$A-f_k}^{S^)cp7V0+U~_a0A~#JtH<4{EnTn&i0%*HZ@mDdsI$e>Xi^|Cx|sWS?+xm8@_5zRKvF~21r%=FE%X= zA)r?M$E7%HMx1}IMAk=j%FAOYOkSC?Z_wQ=BNauHNQl`(k??udD(d9!@H%tIRPYWI zYm37g4BC-mJv6vFc_N9(g^Z2(;dk)nv3#AISsjk8Np`+b2vliHn0akslD%GI3K3`S zauU~fiR}wqLWIbY>dAr+lO_{Td|;(VqTVydnFH-;h&a!&@${>@#8aaK^btw@8Y&b+ ztO>!X(4e)1W#8o6eO}|{_!=z7{CH;XzU)6Hek&A$Zg#*1AEf&b*ejRE}BhUy@K&WwVs;vL2QddV{gn z#C;JOcVLLGz2KfWk{U2{xh)0QarYY$8U@?I-qxF~l))Bm6v^2+IvfmZPkEkoAIXzP zz7Zx?2BIfZgiQ89tKCAYgO-VU1JSUo>q;Xo^>tbv+5U7W*W+-ploPuL`FBR=M7yE0 zs=D*U2RB$lLpaCrRpn+BNa>G-1yQyhHmXx$_$QeQs3`kJmeSsMJzuE2`y?@J+g}T? zmT=WV(Fj~byaQKvm`=6lE+CtX>6|rYSf0G=y1YI0`8?6?JuL}+uE;MWc4o}@D3>xc zNBZ(Xe4k_#-7sZs^E}A20uA26SR}C}oa? z?|YBL!Aw4{OM#^Ki=Or`A|KoAbf@6K5(M(;9(p(@j{@6_;92_T*W^1fr7yN8MrP}@ z!m6UKb-Pu`^Nu=2;&9AZmhq(r(CTHDyc;=zSDKwN3q{U`dB2|aVHj5m-(;Q7ROoph zCrtWBl>r3v7jWNHz~t zB5|U37(&;(SSqDEoW0Vo1q!ch?P;-NpNzCLc^Tm9obQ~Yp{Lgn=$U(*Oo5zq>5~fb z*uArQQWGLUAqgh4r7FH)Hi=9euruMI>L%Wo^JUzgrwE*S1}zm`H!aGQJcrFNN-_fQD3Di z?89B@m%K0(pIn>vnq1#f`_Y6hiwUc&H({xlhLmp*JV8gcF6r`>Eye+8_6CX395a;cZ5$;Cc-Ma@r5j7)Z3@+(^-0!NHdgtOX26{x&OMa6I2rqg-J@oTSz%U5 zv2#d3S7`Z7B;^uRkvhD;5KB%jKX5glVl2B@Mt3Kl7F;vDHThf-S-Yr7-3+F6eb101 zk+i5mOa&CVKNsa0-BftO>B9iv%gleX<2YhUC^?qWqEH!6cLzNM7=71REBGc2{=sK4 zW}axee1k#1=CHdavkwuDgH|1GzBT{I%^Dnjs|)Ck20 zSLM0GJktmb^!wGkk>PV%yqof3Pq%Q@000kelgATNtAi$^@XmndyoKBG{&p=xBI_@6P-Xq`Rx3B#5Hn zlkjI1akj1~JNj8waqXgmKlFLz?(tmks|Yk*a}93p*)jl@rO}y+q$WWvFYB1zy?IU0 zZ)PRG&-jTbMWtI2IwXQ&YTOh4QPcDBSZn6lU32VUI}xqordy0 zDe9;6H7XJ4QW~v!R+l=4%Vme*(4Eh1he==^KlX~NLIR2d4I&8DchX&hYmvIX+WzdC zdzaAryA1Wa&aKbqr6Sc0O)nNZU!1-baH&=S+yPL(1sOH2TWEHxqI7wv$<6fMF`Ren z%dScHK?;4d_w4iy*#C`gWq$(D=DJ#_@%iE_MUq{bn2|pKPGzU{{ zk3+4GGnQa*MyA4m1)n19N@C88shw2JA0HW2{p885Ko^7N(le0NRmY}v85FDu?>ZY5 z0hNHotXVoqjP9f0DVwt|iiJx+C`>4+~!&%j^`qtZ6eHEcS1W?UR@I{WH>@l#1p z-+1+xYd)xiB&tKc5*G?INFK4^))I`^-+We#WBL34F<u8b!o6~ zq>NP&UL1h$Ai#(VUZj{@gzWM0Z_31T5*G<8@;C6G zocv#-|BCXEqS>HHGFUJKkNfr1Nj?B6LGYhI;52f?_xFzwq>(?}bqT|lRL=PL5`wtQrVJ0ZZHILJA%abO|YB$|AWsuGt0 zSm>T>ev)y78z65h)@<1Ej#{NTlhGzPZE75A-;!Ng%J5~GDPeX$j(ASsF zA}j`ZT)Bc=?(oJ25k2k@7n@EqKb=KeKvxBB_WOcXHLjn=w#|-juIHWLBp!6hzqFSX z1TJ{!2o0hLmI<(-o~57nAC@lfRZpIv%Ldn&&&^nS8rq|{)J(X@hd6-BqK{D5Nkzi4 zxDrSCJ~Z=^@PT13>?gyA!910!J5x3BaU;3STrmTJ?FksWq_(2P7GZT>OJLag*OuZm zrSI*8gr^K`JB8N<>?UMYjMn8f`5tjjRcg3zx-$d=q}A3{JY~S5ei9T(gz}3}nHQi{Rhg4S*p zTv;RZf6`lOoJIPl44>%6a(I7F5;COY*G}%rN9C6FzAp!|-v20U%IlYf{mLj@gViVO22a-j)&OTyCqJNpZbWAz0SSbW8W%!tyh1`)b3r z+N@iJ;nNnR0LpkCHYoztfSw zurxmvNTQ>BdaO`T$=eWs=IN>{r&THJGjfdY+g$2iId+<4DcaNf*|~M|!!2S_W$1>w znjf|sz`10g5=gym4^IBUO)$F_RJ#MJnHD%(kWrT!vlL|3zo=~dVdfFR(>VL3rN-@8 z6QaJk15q;VK8xq9zg?Y!8`Hx}@L`zZ{j+8$%HVi2-4KalyX z>}JtRie|Wo&QX(EcJGBjy+Z@WkjIlzHs>f?9ZyKq12s3BIU3`pv(3Xr4Ca^~hq<|( zjendCLmPh2lzVgnp#Rde?yKSAzBpi7>)9V~(`r)2E#`T*aobs}j*%)HWUVH8pIouZ zCEeLhar@BuIZv_AsJTXoFks;L(KW>%pNY@b$I7ayy*e%kYj4A}HVIC_1__(s52MEZ zQqS%=gsjC{hvy#l3N_9|sDl=!hZl{mh&`v}S_pia!|nb1IxhILx6NW@*~c{-L7jFQ5RF;>u!@DJ7-@O6 zAVuRK-Ud#`0klUA2xfA8_loN9=L5umLBf&_Ozr0Edf)SsrpB|!&>Hvhs*PT6uOf!t z!VP5*GaIMI=FxK37$0c`0oAhMo?vI&l{C@@889T0EC(E}AQtvJ9{(;VUV!~{k7}+? z_@32@v6BHxZ#ZLjvB|xH*?4NQee=6kt?5!Nx)IZu4ic+YJn%NE?t1RGa#DpWt*jG! zKKX=bPT01?Y%MF}a7;lyJ=S%BuI>F?_M8Vw23mZ3Adz5@sE!h-U%uq!$j7WYkFua6 zPK3?Y>W`t+k&B5P|wSpEV0& z<42;`Jmtd@>V`bz^LJ8Hjig>Xcd#c!5|)0dN9p*|99nBad#3PN?e3P(na$ii+EE&8 zY*O`QZ*$AJb6;hi#8nn>aqM+?9K0Y~s|hcoJYm?@)y-+f({Fmbt*VMoNE%_&vm{hT zw(Mo!gn6JU6&9NLCMoSUt89li>$1EtecF$bV&+H_$ zYM$WZJqOnXIc+UT1@6@Tx(}h*reDRj7&e)EVGzlOirEjJsLSdTRI_^|j$3VLR(vUV zgP7`LVTGtF*98eQX{dsi^wEch+9Mb9Y3MdEDk$x_64|PU$|T@O51j~ z!)EJ7w4q|Tlt8$X;RE+N3L>io)<$y%X?vYI2+f*b<<3;!%Fs*8$w3oLPjymq<=bsQ=>6?Xw3p|1dhzo;Ldgu-4*G&h zs*W!*S-SjB89+lDhd0O6lV@WM*nBCu96&hJdd)(}o1j+NyuNfi<-G?cj?k4SB-T}4zF1=MmS_ojzuy!$PTp%lfD`~yR1|7NW8A3E2;SopY}L;9A$o8sswy!5R?w?z)j84Ep8x9Vl)Th8Sc zZFBm|HwzEPg`nU__KEuB#2FQVy&rEC9Srq>`g;0Jk2-@c0XQ0bl~rWC463FCm)H>p z_-E;{vdN_EtK`hjl{W=Li0veubpFCms`$NIxd)sfcao5c(yp(}Yo5TJEFP&++L}}} zAEN!QH2cb*-O}g>6*yX{t#`a{Oq{HN*a`LzwKow)Rg_f<8w*E#UiMm{)pQw4d^Ef2 z|hvDwT}+=^x_ z_r&w7;}N3g@qHHq<{+bqqfhsuaV0k3WVw9dm4}{jS;|EZc#e=q`lQ&}lVJ)$%I6*lrtM0u6prKIjBiCWJ|VO>pdyS8N990^*kJ2m{x zTtm^~wkk&MS%a#6EHR`;xJX%ZkMP7{Fc?7hL9ox#>cgG@QGIFT>xKt2NJ0fFrmA^G zG44~Ie*BN8SB%qcGZi)z%nPo?vKN5%Z7S1@_9N~FT3nDIZ}-xxs(%pZCAcga$%uJH z2QXswwTQw9syPguMHcC8J?S63-<|4C;=(@Gvdu}mfN^oz5PBtgnXPFL6V=Fbnds>` z3-6*q<)qLk^3T{=x+-TW$5->TF4VK6o`@;SAKsb$z|@S?e8bYyO8(k1|Ay|$)&9HD zk54U!zdQzNHIl8IXufD$&6p!j#D|Ue9IhUbHD`P#mk*fjlzOKgR@nYcChTaq7*!X% z(HiIFk7LhVn8_2Q9CU9tB`+hB^<6gTxbqDjZ{@h9#W`pm+%|dTA!WTPaR}ieYc1X1 zOKjUSW#5r}zFqU#Ua|W9Ic+d2m(eozvbWw5WvqIZPj-y}$mdNKrnH1r%PY`E?!nD) zi=(kjRJ45{;SIrMyepHAs1`40zANVu=9{C892%-JV*=8{Cj%)Fs){kC+&}RQXU(|r zl5G?r+^r4(AbEo%K;;B$;C=(i4?N&pg8i=1ddJX7iWJ0-U&Xw<*yyxo z2eYw!R^6MIslad`5acu@c&ht1-G58QHR&tow%-3*Z)bhY>SA|hD+jaHw(k3$;ESQY zW3E{g!yKM!W@1dqBM&$F8%8d{#M;mbfi5#1v$L~)eZ-TeyZ4=iDWI zlU_C^yzXQlzNl5VnJPi9FYs7XLcNOPcmDb z&c`bm;d8!q$OmaDJz?z?ifVqKSJnKir&l|(xP#M;5u?8`xpOoZDJR!gnM60SsDi3D ze?efemDUzl|7XATuU5;Y70iIs0P6E>0C8Xky(#=>kYd^3Pe38e-^cQI@9F z-F|<>5bB;{r+vQV56|D>s{e#7%Bs=wq;Ryy?~ea!Oj{STN)#~=u51%0M?;weNRD0q=e=9j+e*>tEqYZ*o=zNhFyBPu^$lVbpt^*nX9*oI7xXYA@o`{q(j#}Ber zuQen+%UWdR3#T-qysvT!b^$ib*wcden$HRp>s?KD&UOg8^Dg^QI9qfa} zJQf9ekR+tqoQv2&dr=*=24LpEvu7yMw}RcPQr-E~fBI)T{nfiv#qM(yD&7Z;KBvo1 z7R4H^4A^$f_=>D6=UlRlBOdU?KpgB6TzK@EJjchIeB<=)P6^yzw9M4RTa0ZYKO2_P zq&LrwA5~;LI(3-I_iR~Dkey(nVu%+FYGKL+9U}6j7Smi=w?aj0B<_%z>7FeerPkX( z`mcSX5U7f#{d0N+I2FMi!#t-Vfid~u8;{_Wb2EB-Cdy&auazh!?GWyB#5b9rvipM( z`Ss!t+FanNJFho}@&%C}UOb(#yi3+M6S4HhEbnb}OC0l+S2q(u8oQeT%DXFG9RBb( zz$1~B$X6t27W%qO!g5RLKEgY+7cLtpW zy>DCV9U7e@V#+WFgTXk&G@4cJbeIHC;`-bCZjB6 zgWC({;yT#abTr-Hd;`F@}0^L$^g=f^+iFwQym*>T2Rm}Gjg61Rw%>yz{qTcOAB6j!*j;tKee8G726s|RQK>M5F3(c-(9EUv<7PW%3d z8CkG+iVq2>k!wygo>9p&YfqKh(ugt`=VTxaFhX)-{L|mxfpZ;wb?&i~?ru#hnhUx$mMo>hf$Q&OuB`Gp8uu zDiGq*wKGUVu&c5hH^-?=0LcPlPWsCS+WgwCWbA=HH}yf~-&jl8)4!!govcR5>e8mC z%0$>~w-1)Hs$8xlOTj3wwujAq4NoUp$Yfw9Jg4bzA(;b~Xgbs#EtEw--{8~a3yJrA zkO)%9mYQ72uQ^Jfu5P=;eKWxa!^YmmT@&3IdMWk%jtepfQg&xQfqfNmr+{BqB}I}shv+?t>hRGU!+%h(fIql*+#BB2OH<( z8+aZpgl=whn#Zv zO;4x}@gYo8v#-BwmBT0A($KX%IelWkzf^Sn+P}k-q%W44+6B&VIV9O;T6kH_9T&<; zc4}zGW^7^-yFTS7XG6W{g*S>!go=;I!*=4}VjNqSr_ayn* zKFI&c6;`kgQ^=}(#p_k^115Uf&FQ=K(tQLIp=rP_MASy~y_)yjJdx5*-G5fy8 zW}cib(}+17OagtB$7yevJ%W)o6YHVsA{mXbFC$oZL+-=sP+v7q5vJkbtZVKEA|Mrv z{7LLx_3~A_cn@~O(_@7K+q{*_R4}(cnb*QEa3fJM*ajNvYW{|`h+W{<@riEUK@T6f zk25t;Z_LK@eZOIr@9bQl%jwA!WyoNwdVX)>_zKOpDU82CiL7L4H_LXMBIr*lTy|m+K#3}dHP#=e zh`9X`)aLJcwRUg#+w*HrwbSD8xV2;sGi%iT&ny3U;$Xb z>Ee6-F~n1?qVO*D!w zo1;BA&*aJb@bmb4mrRDvhgDvOx&BVWw;{DreUfM(&arRTL>L91iFNPR&42Nk`7^eT zE;#C_J2>zxh?ap}(ZZj+nSKG)Ae|I$K+z3$mC^FLc`~OG?1W>e6rK7+9e`AU>e_@< zG>1`WF^v4u?a%^jO$~(HLgygCqvEcSQN%TcRAm9T*m${-l?g>d`p=qZ#qAN9(n$() zC-40LYcWod@t1gJ%wCVy=f*sqqm7fpLqY1rSSK2*c8ciVlhYP7<`k)fG_RA*wp|dO z;%x(?+lp89W;+dlxx(wHk6R?6rbZm;-iI7RxV5LFKzK%VXA;qy4eVA%;h0CxrB+@l zyFq%lV4k3v!M(e?Tg&y|r*5uBXX2xTyK>$nJLe(K#1+xGC0M6aG8}h;{&OBt?HBuv z)3+eDp((o~xy)joZpp(et&;%wh>`@p{d_{I*$tBdttY^CgE>Y+jq@VFKtgg6y-%!; zY~XV@dcCuSAPK$o-~G65AsI2*@0$M=8NOjGh=ZJ`a6CoNzc9-2ztL& zr-DV{Sn7iiaP4)#KedJOSF3n?a2yQ$Pk4DqVVf85KXTX7Q*+*bMTK`#|EZAu#|_!V zH}B2a02utQRgd&4a3mCK99!RvL=roIT_5L}UHFTdxp;`*k&2wC86u^S@A8! zE`Y1aILCRxKF9b$zdWs~-*s;WD?W$r7Hqj8Uq}JZ5z`C(l>e7&k-e=2Hbk zXoq9?imqrK;5|;~COsXSw%`Ni3jGUFrFc;@k-?HvF#fQ~8T)xv6OMVGTPQtQ!C7e7 zIzqtME70Om@!6|>XJu9iu%^a3UY?YnegvJBCNmY(V*AdB`JQLmBy|6Upjnd~B=mn*7 zPi+clBa%u7kMB7C`{B!T)Bqj4hV9zM?x`C+N1}A|^GH$3+}+{43QpM#&ZWY=vK@I% zay&?8ALk)@{Gk@zarbkLV?3$o(d1U0&~gn-W*KwseV{ccG>o#hv-Zj4^ZD0qJ-x)_ zSHwmQ+v4hPOG;ka_}TOgk(TL?KCPi*@HsTpTS|j3)D|2_e=?n_U7779U19!!NK#!+ z&Hg52je5CD*(SeTov|xhyY_gpaiWiWR>*HxGW&hJIjQw+^;-Fpd>aSFkv?`ctH&5K zo0aSevS5lfYO(VwRdhWQFU*^#cm;7gYj8$xhEjR@hKt=vwCdm_mbVAy`u(-1aUaDYUAb?1fPiGskB7yBUVQhceI`^yt^ z;@bY7sF(2=mEhjVOR4e>^R#yQ=QHVTtK|M?`il@>`2iIJMvdvMiL0M!`#f_h7ckWK zx!4MzSm*AG$(_Cpx4^t+l3WYKCTA7+Ug!u%UMUxp4Hdcoly&B2s!?bF1P+ya%|_ck z6gmHDIh_Gbt;~S)1rj$BWWSq#*3mczQA^rhR)jkjbtKVKV}JH(^g zMkF;G(q$O`&@b<2dMjb;LOlzqeL(+Pn3LS zJ^4xEW*7WLQmfYV#M%riQ{Q*keu~z^wrSX8W3l^=+0t3I6&Vi`*hAsdV5`Y36u5Db z^u*HD{k1A*MtWrWFo#|8vUln!BaMph{dgNWmJ>0nT(<*Dr{97e_{9$-hegcQz7!$x zCu6m5S%{JDip`(>*p@e=(*z|=60WK0!0GZ(ZUmj}=aY@p2D|TLMUs>!9D@|8ny#8H1WGv!WGe-C#U?j4`NrIMG*x;KInL~E?vH{Yul zd4e(1D(6NIaz?_wTy_+YJNfJ?mJ5v6RRm#wOhaN$o0g>Sl0Da)byjXbMpt^u4{cM- zP}Y6iAyI;Yw>}YyJS3QNWt&XX7E7I18U~B(tDc2M54W77?y6HNOr6h&iGiNaHdRnL z<^tlYxL0;>!5~hl<~@Xn`P>>vU*HF}o4PX2Vr=$M-;~=tL1V!*I$|oQmQ$Sc1aHY& zE5#F#T{TXYsUzgMP+Q8;e^2vWRNp9T(EaZph+!pm^Ut7`KutX5a0Z;Uf{TU!rWkt& z*C51gz@uN#;$Y~>5uKKeX zW`R`rXxsh~gVnjjEdoXNTU|pO3I_Yk_9iIB;nT>h-8(wt-_)c)evGH8fPBmMx0L9x z!2bS_t9@xs<5l(}C(D5RCorgjTd)D?tR0J;cfo1SbrYJCukb2Lx8`yO$}nl{H6sB= z-OhgPX~%=or0^`dXl>2mHMGZs#w~ivumP|KG~frCo?o{J8Si0LZ}9%d#<^1 zgp|SKAfEmzK34LEpV*N&3#PG`_Mk$&dpVFqtBvz2(VtP}xt^nz50w_K_=Xxox*%GO zE<9rss8=E>Ci~p5tFQR4jX%?9Uyjud3@u$r)h09@plYi>RH`R@$Sk4Xo4>cmLmkPI z$lq(gy}@Qu!07{j7obECz$ljoC(xL!#o6jy;kf9O!E2mfoz!tu3k5kg@fz;Q-)twU z!w_mQ{Rl(xxM%lS^E{h|1T~8M3wiU^m952ocec)PM$%VqlVGB>IWMs%c^!G5`ws$Cz1BWtT(BAa?OL~1-~rLumu4;6U4o+_bAagrUN zW}4Z`LyvDba|)Kv*jF8pl+G+pzrY(JeRUXZ}zkxy2o06afV5p*Q5K|w|J&L9J)FS-Mu9Na3^%%(W z<#vQ(>;VSrpvxf^vj=f-C(oxZW`8=|q`3$C0E*p3%nl$LUkG&T)xEiHpP!ChdP^S% zo*%#|wD(WSo)Yj{9H-^kvRoZxGJQTUQKk0l>$YmD=cw*QuEihjZ9eN&*|dM}SD#!@ z$&?%i0~S_FkLmk~MVGB$_VldkV|zbd4|#sUIlyP3oi#*L!FV>NIds51uK;zSlcIrE zZC+y0K*a3Wbktg=>KpQV2I1_F+FXuds3&KhHUX7~aOaY)riMj$lc-Vdb*#Url%hv5 zAKn6a>Xoj95Bx{$(TQ;~4a5f77yAsx!Q#n#*MT&jQ1kgf$e@wVq1(eTRU$_C*G`?L zGneztU$ee@3l4yM@$+*WO0b#uM^qH(0F*dF2LClTELNP4hX2Qus~HOV?Lh{G?-* zeHAVZ&l296QSDsr3@GAO&NvI1-$jtxq7pjAH{K7$B(#>*r`N>7xHj(Ok##fh5AC{v zGDSP(Cs)Qie%@b0xgk;N2UYdsV;&VTm2wJn1FyGAEkj9?;!gsYrx5qX(ECuASi z>@wgZlxBhy)rVr?W}}qia^$!+$1k+cb0At6kc%rxLnR>skkrT_rm3JsB!bfmnH`Ms z^LUHtnb}E`r)H#?`h1@koR;;Z#=mT?LH3EkOiefub)?W%`*5tcQmCLNCH(R6 zIo-!)+m6>;@i;8Hv(3lD?yqa?yTsdx0xp(32Xp>8zWkr@Js}5%<|NlDIKFWD;DT25 zyT4BQ=hkWQ|HDgOywUhaf^jr@wqSo9aK52%bkUAQ4Kvh2aG3bto<1KjhlvaUuzy^U zo5^zlBY>m83!$*#d($z+vCdfibEhy15f zD0$hA!{5{X;P0n@lcBwwuL>&1abJ+pKR!bzjRyZCLvu71$4Z-T9^Css)quYSxWUc+ z?~3>v4Ih65dyFIJ(T=r&fhRkiIOOZk$bXRk>h&|$LC^o1zBVsG0arx-sBsA6zVpmk z49?%s7gwmmf%R#j3P(%wdVi1l-<^+9s`c;P4(E#W1t1fHtg~KkjtcEKvtz`H!Xxh| zGrZ<%2T!tMZ==v8c$#+?5JA9u*(cj9n#n-BYZ_vRgR$+=a-8awR0xDlo24McQ9~}* zMem?k)Ht1~h>3XAUDtbJQaXGw$ypg?!MD@41tmq7cPFqx6@6|Ql-0H%6M5-RTXhjIXs{ueT+%}QmbI)Y`yh)H!kB< z=VDxZZh0en>r4nywo=fTh-Ev10rFN0G$J9ebCi2=k0-9{KCf;Ymudm0wVeih|C}pEC5M9}SS5Mv zyNgCNgS2{UDB$$7<@=pSA%TH}K)F&^uODXwWzCM&yYJ6p2yN_MYDMNdW#MZ`#JkI! z+8>wYdfGBza(h&OJ%bF4_!R+RFpz2t4pNW*R9BoWi*S93{(3uKCpLuvd@d4(5uj%MRuP7X30hMIA) zFUdp`S@4s2vq9sE0CuQnHqqic)ML|~bb;))nUrEl?ocjw&TYqIN)sj5M^b6mniG_g z>@=^Fym#W6`|~p8YWa^eM3ZY=LkPu^(4VtF<*n}b`-XD5iGSKw@+6rtT&&nW40)%zEBr zKCKY#itzZH(a36M>*}6B*2Y6%_1hB=e>&idNBYyC6={EoL58jN991X3e4qKI``0f= zxd5g93Xi6h;iR@ST8Q`Q+~E_0s?4w|%86eCogcyy?Cs9VEGH*s1I#i zWe&)&mW|+Im^L$VX4o+GYc3tX9%vXbP#~JM+w`U4EJ@fs@M6SzRSS3hg1f2xT+S)$cBXX!vd?1r~Z*Zsg_pYUe3xjZs)U zB_Zy80GwE%g9NFmin&}8xbH)Crw^uOv&=ytkT%ZZKjv5dFyR4HpM2%sdHpCjwFSo^ z;~6#LlFk7Mgt0z6( znKlt8l@S}D>Y$ie7Ob6thb^UVhA#T;7iP-w4x5fGfCS zi;3SRv1&YbF;yiJnHL4E8yjvnw&~c*p4k)?Y~Atz#P5C@?0WLTM1Hk-IHYn}Ske{2 zrHXLVp6pZusfXREd|7PI*|DoZ`1HN6`>z3Kl6AW1vh5ynYMZ6Co7oeK^(%M3`DBTb zzW^fMa+p$G-cCxAObaGJ6~yqAgfCqJ3xX^273C`R{d74*R$=4nDqTK!wfczE&;w2) zY2`tq?*&tGvPTRfHs&m-It}h=iqyg|WV?y6rD23pt_)o<-@U^5w=B*9D$wt~`{~vk zo0)jC{WQh~yGCJL&fyIkrDT! z4dvNc3XLGOJaR!Jg+VQZIuquMa__Y%v^at@0;T+-snV;B5t8SwUtR0Gn1g!zYuGGe+O zbM<%oe`BtG}a#!r=;Q-o$smh3tb$C*Y}2;+>Yz^5g>^`RKUkrh zO-I32JV4G;dN$f-vMs{O582hdBFjyc&N5Vx1c46iN}yx36@!2r9Af!`tB~->-zfVO zmU?MUYF|yP5dt_u3M?N~uFP(b4Y$3D+nTj4L$7wLaOhd1L>0`$xZC5d5%6+B zaQf-!8D#vA18zBLA@DE_(>ok6k0t(VK1#>sNPl3rd7}%#nGc;TbkC=h3o*}YodAzc z-+{OTe3sRo1-d5)RuDDI1==rbtoXSh4EV`n=iJR%p=#;F`%MiN#F7Uog90<2hn>zO z!<+#J5#BurGMoAAeY==6VV<32$FIHt(ADJh-Vb6|uYnhPV}1mG4S$0t<3F0$g%*3j z)%>5D`jBOF({-LnGxbCx)jTz@bwN7!iX+!^uCkela}RCMpTM;m=PUAhjV8K!3L2y& zj@EeiQIxeWjYiQ|chnv9{gm-Hb+!cv+-b}6b zh`wE-S8Fsd`k|)6*YCkJG{xCQX|$)2JRda~Ip$;9BvMup{iN9e*=3Z~*;beYaQ`j# z-SaihcXI%z(@4Q%dyO#)kk%}*hc&WSHALEE!}Ri24nPa}yLW@bS-*-cWXfQ( zb!E7|cO1`-U^uD5(X5ilKsTp3s_i|^LFy$52>H-c@J4rP(N@zpGt4dv)55ytaej)%OissY-VUo9`LIIO{4dz7@bmckoG zelsaWDx#G8bEOhT6oET6h=bD-imG@OQ+g&%AF}o;XpGlyX<8=o)0@mZ{XDIz*}i!5 zM7sLK(hb69<=3jWJPVtnJT!}36%8_}!nVtH`83V1QccRapXFaBO&?Y<%^Y3j`GwLN zG}DLczx`L_`-YRZJjF!bFu(^%gsz5M8KD!wn7?|=-1uerXC?R#8TPO2{XgpO*0cGV zKO}J+DUn?I%h|=>PwYQ-esx(D(R*PGh0zj%*Y@p4X)`dW#}{LJm-SfcED5Mz>B>%uag2|#>-0Wy;)xRK*MHO zt?#%(ugs0l>){DDb|HyXEooayoUQ00^puF#e;vj>Yp(Cn?nzc$nm4pd#j@ zN+}M!ER$bShj;T)t^|V2*ITbakQ@|^D$V(Q_a8Nm`gM~RHU>C$83Bp7BiZN2bd}>B zDL})z9sAf(^yNJ>3t|6j7l{%;*0KHP0O~AyhFxLdm`{$%n6sm;*9jPkQCXj~#?hWn zxxI&;BgXyh4NKtsYP6#Y7kAtm!~`LAKk7EH_=V8W1w-e zk!8<}Yw)gx03%j@hNiHo8By*Wy{Y=@>)I0oPYmMKpw0z8DQ*!@$E*Z3HkPS=6}&^# zz}g7z4lW`LKir$6UuXSZ&cSZdTqkVxO_LFc*Rkc3HrAN1wkP-^C_&QG-SjZ}3u)ko zSp#u>Uwzx#$sFuZ4NjK1x#;_w$Eyn`IcEXYhYEVq*=35RaO9H!9=UJKZn zz+?OW{3BtGd9WTMfmKm3X85eW1ZV0WU(NlJO&X89@E17KRWS*>tL8w11_uW}BTk06 zH@OEuq_8XMsY{ zl54LoW|uIvwUZ}i=~YUYdbpm;SNHc|f9aeb#)>E72@Q#axb7}Z7m_Cxe{4Jvz6*!2 z+*kJD;(ArXqLpeACECQs4ia`3dpK`y&;oiFKI7j$CRs$(@3`%8kWpc?B&BncM~VDi~lKl;4@CnY6{8d^UBMj2kc!QN~hdLCqdBbRkM<0XxiMpbewl5 zkN27XY!`_Eb~ka1H*UFVD0v4+Y&^hwSthc2Ff9rFoxk1T(UpBl6p`Tfn_Durza*Tl zik2a0=}X zjZ4_w#QrIvjPbrt(vqISzC0M8dvu459k$50dWcx^_o}t(pCsC+9WM`+eZr+B1F!h1 zJ-Y2w&)W8dt&~i~4Mkp7j;gZ~$C)+bW|61DtF;{?YPy+DeY7G@UdLIy96Ue8uAkuc zYwF^HE-I%^f6pXPM4I}3tx3!v2$HVDu>f0q8(f4}F$s|%noY~@u`vM-v_%rF{zu%n zajD*e_&ecCwH@BLw~JKlemc3?^;Q^RHhQ5c@L)1nq6Ecu%>BA4$24$0qK2;TF73NI zJPKig>e!8Gp5{G2q&PYsq}is3k#}y( zBe)m$6LVtX$%+tQD=Y(QcWH8sMB{>Vj8-@|-m;%F;vwpSOX5$M9=qY{eCW?axR)3j zJUsqpM_Qucsr|@i`JNPh=P_1|VC^GpYQpd{>+l<2;otfRJMJW!x>8~fl=&7Felum( zco$hb)SnO<*p|7U1E6%`EF>-V`TA`@*ffIGq)5HWz(W&D4AAyWQItB*dPsHY0*JpjNCpN>Zhq1zd$LKgC|0j3 zak)Jew!YC%d?;QYniOn@eKXxr8|vO>P;YdnZXQeDaw2i0fYn~ux9`)1N{0l z5Zi{?91d^*V4{E}5?b#`jJ^fW-W>LLrI*lA{;h4vT54f`Yw`dOnlz+?97y)MT0S_B zi7b>1Ska+T+4L$|#TBB69ovO~MA%t@->T~@{1<4}6`scmCs%MGCGJBuTieJgQRfDK z=|WnzO&VeYtfbh3L47yBIhfuQt6iVu+OKN5GCJL)I)O%yX~tGp9FMpwU5L0|b*J8u zt@*>VE(ufOuNXvPM-m1Xo&!!QFnymM|7&=*l-O~U1jeERPsFa-nt2otezyLYDY?_^ z4iCpy;#yY0BGLDVy-9vA(wEi9==X&G=%Ou(Ij&Jv7B?7iU^2mOoqHqqaIzE0wY|2+ zk~)$uN$3VHPREXpzjY0_p#WH1G^;5>#UuO0^r`?NUxY1aHYNWzJ|iwG5Iw*Ahr!8{ z5qvb8pxP+bAsC^<5NN6cCznbZl-toI5yMGV!i`ypb%>u4~^WiB|4`ZHK35zuaw}Qvz2*VCKaxPm%5Ly8$>Uqr~c~?NBRK7;)UvrXY;i z$~6ne+(}T84`*|HrB~IC`zRUV^3DF^EdFW=M%C?&8;C(ET%UQ}qs5V7I{NCAfB;!i zSC(+OA=Aqgf`(LVZ4mFUXg`(Ph}9U$rkRMShPa)`)9sLzsVy@+pP|Jx+AnKUzz4WD z&{E}6xBA?8wVDMk$}7ttuVdk|=-*M>elVR47UMh{JKL+2ICc$BU46}dJ#c$X*!=Xp z=A4kz(Bkh(pKiPPx37>8+y%OFlW%WvZqa3;iP71|LnK2qtzH(B5Ap}%Z->k6QB@b2 z@EqUm`P9J-=azhJi(VXCAb9JTIlVX_HAE*VZo1yM<*&sTsM}--0!Js@CU}ZR9OvLa z?ZvXo)c>hp(TH_w9eN1UraLt5rNmF6{s$)Xj|I0e@gK`3$aV8V^`HJ%*bU&d=P53; z{hO|ua)C=_ZFktjT2#pYd)~V{o_lk+wj78*U9-mL{a1QS8~+_AP5A%NSYMNS?zNa* zZ=GEi;?_F>W`UR0VE8}HBwqeONB!OQ#Qv@@I~k-+-n+r`=+Ds2do2z)3T!N*q3@vh zzxVauy$X?%H~&WGy>Vmu3yx}!Iz1YPoQGn-*C)W41%GVqUofSyWx!#_!s26=hNQU$ zAB#Wkra*}<+53N8xxz7_b@z|e)c@#S9jO2M!#}sL9}wiTb*{V4`E4c3wYNKt`Xwy% zk#`WLsHv+#pJUb2@$;g&F^s3-Pl9@aiwVJfm<8ul_X1yhKW!>s@9E_1ROs3TB&qESmbhcr|AoHyyV@yvgUW}%K;z^z zBMR2cg$;?d`lRU)4WXNzkJ_5gSz~=)0YJRDdERQ;nm*0Dqn>fM58dOFg3DT-R0+$C zogWwlK1L3*el{j9+(D0d&0ggI!%XN!-M^zqT5+66m3!I9y$af3IlFO6B%~a`pyj#Q zDn0I%yTaWs%+B?!X$gE%FU`dNAocs9m#M0>yMjFBWJ>OfO!+0W+QmwrEz1C0^j$D- zzvwe`abZk3(m5;AP*UK$)yDGnF0%Cc6_M!;*7Zl?nIj4F2IW@>e{yLj_pqt!Ms!Vt zL)8SdSoG_xdTMtAd3`J(EX}}Kf}~6dwZ8P8F^otWNMt1^FQPq7(Qqjr&Z-nHHsOk7 zyq1diXdHBI+Eev#iiEy|y!oRBs6wALX&$Mh9O#x(Fko->Tz?cUN>x|z&|+e5Tzu=r z_|q|%M{f2HrXLgZXtkQEZt2?FEcsW&%(KeJthMwj>7N(IGZQt}*PT&lM|01^m#Y(x zmMAA~erG4nt6r^HY2&rgzueAaDf#izqUBJxx9~QW-)t$hBC!T7n*8>tHsy&y<8GD~ z^m(i;t`S0jB=W-oz4eY;3HO4-aeK_zAEKJ;gEllWxQDPE7mR(#aUjE`Y&Kd_K$s*U@Y&XC+X^HU(C%|S1_8}6Yi5<|)9Z%lIXjmDMOZd=E6}F3CedRA-)|>)|g@Rivt?n@7&DTkVH}UeD zAvHwhWU=6>?CcA!R0}tCpF$^qKjgQbMwNa!>!IB+<91&7?fdzz!MEizm1ODq+{h)) z2R__qCVe>2-;|68g~H)OsdkErtOlOI68t=n8hH*J-^crYF5Q1fE9yNR>t-u5pSL`!s8%u37gmmJmD8gzd9o?XkH z>Ho9_)tQ*80N$wmkQGTO;MV)XyuNvy-O@|8w4gYe%)XJQwR41fV7&_H6-oAST zi4i2170F~ZqX3QJy#65e<%ky0b@}xI&yHHa>ECW}4bgMH*Ia)Z8nr7YPc@Yc+~na3 zFM$qoSTw_ZuI3kV+dX6E-)Fx5R*-paR=oK;f%BW%tB`jXErIt`7Y64i6T1wgTJ*RViyh|lHU6`vcwqSm@63lZ1*=^lHnj?)NF zhe3#Yv_GR^7_ZZGmJ#^!WT%yC+X&r0EI)PFaThBMMlMQJFt&dvB~L&;q`=0Qw=W#F zbmTExt(nSG&V6m56B+O8vpG5+p2Hl?)p=GdJfs4#cE?ba*`hPdGc%h;PD&p~Okw!7V#@i%Lo7PPg02IqIDm^fZ%FyrB$g*7fA?cNXQ zJMq^kX;+DUm`Mts=W$hM^1#AuHJKa1f=V9y2^VPgt<6+Cjb_U4KOb3(o& zjIO)6V^}-i$k|(YbLUHmpl(7~L%_$G?xa|tQiq;7-V?uWQMbIa?jVnEYi+jLS9zGF z{<3mO!#`9V^q@8K!tU}ZoSeW0}S zs+4k2q}r(`aG=24#_yZ7YM{pAH3;Twgl}O|L6k792do=0NIHEYCU_fETb=c4K+WHO z-lPd(`qa5)+0n1tU3yGq-f!&Ln1~+$^)qfLPfJ9hR0qGT=2~~~&hZcA$B)))K<L#7>a9cRI*0L10q!6oeu9QlZIE$%Op(xZHET=*BPpL_}Tt=JXaBkP#yc_Id_wl z36?Kgx57sW=$GfRUJ#eRg1pu`%D$TsAWx3m#$ydLOSTK3oyRxRh#%e_}`!T$rgh^n$PY8Id_Egg*V1&u$^$nBpC~LIKfT&^Hy6Vx?D> zR-(T+lP_#Mbhe1tg(6TQaznQ__r1&MWf<|^e|58_q{OSCn3S1RU8zvv$jzLpZpdoH+GLEEo=EI;z9VjFVA+ecpsd-3W_&YC5tZq`a)`+``hntnay z9w5=nGEMh6I(NHBZ{&8N|5|>etT*py!=WenIcj(|YLuM%*XZmTux)7ER9)DS^+i(d zliS5(O1Z8V#z^kZIS_l+oL2D-d|qo^%%IBI^Zc`CM3PiGVgsLl(HU7NKfZkQ6)1}Y zgkPagf4#ILP*~7o_d|)lq8}W07+-UdYt0feflX6*Km}Z(fy)U!<7JkV*;=35m<;uI zNtUaqXH3>tOl|-~V6DEF6C<%anf=@ME|>D|G&+9ahM;G~ZEBIZx)i%p>nE(qlwuQ0 zGX0{X3k?QjSI2p=UClkbuWr56&MNs9u~axE5)22kh`6lY9gzv-e9zYGS5^)&Eb&e^ zo)tL%Y;|kn#fmu9)LynDLxNxU8*-2{a5gvd{IwH)qe(dCX_1Q|Wj z!V;b7^=3)B-rLW#*`D$KM#&Dq*n}`7X=+_y3WZqJg_29ME=Vg)v4e(mV+@d~oFr)u zWC&Lgx!}onfdwhpBCu(W$|u&?Q^GOcm8lNtvkYLi(6KwwPTYkQ1LjJ z24pVp-zzhH%Y1)U!#0yIj*UAuma0|bQ67aAazb-*1W96?8M0n|`4JE>(3?3f)F6mT zylp0_CP^y|BMuv_W)da$qmFotJ}ys* z`#w2Lv&<<_{hu{t(f}5m3moSykX+8 zA(NOu=ya?~(|O0o2^c1Zof$};&e<`ciobeb{D^7_^K%`tX7SQd^io#2{{Uu4NiueE z+%4GpZAx=rikpvX$1!aEBfR8*hggkJAyVsLa^}XB=Z?}?q2F%b@HnPfoAa&#m&eT} zhzSv(B)ZTf^F7EfGYeeu(=pgOv5i_p=ZM`kldU#vo}6P#T|%!VZdPrfy6-2qjlvo$ zBM}itHX2?2aL~5Uo=)>9t}3elJ6mZ!XrD|!xzlsPkiOq)>OIvB+0B~wC6{jYP@gfo z-12U|hg*?Q|EBAJxq3sW15?jRhgImuI)1Pex> zcJ%ojO_>`@OH_>e>$0QY7?@ItazBolGD{FFN{_3bY6o8w z&br$U-9Fke$}HE9ZVY&SmG7OhvUL2U#WYn==WW|z{-%|6@$V6rB%8K1s8Gb&e>`)8 z7tnNQ07mb+^pBy@-&xeVv;S2X3!%`s?vFxcS=3l^qUx+l$En>J${Zu;tfPAAdr>8a zoY#G9(Zw*A(IZ@^N@mo;Z|`?(Un&cT7?uh1zB=El5TE-| zkr^^R^v+AK&p~4eN&8KALS2QSjOTQ!i>|+D(T|}8PZdnl(^1k-^q9)Ug^AwjOv&Q7 zJ~Aifmlvi5(!a)I53dM&V^C_ zCoiY^RvByQvmXy1gIOyce(de45YjbAML4dC&?Zkk%3%#%Q*m>W?;)A~kJ@ig+rcxQ8*eGb6Ie zdbHFwelxgAMqkIi)+?_xeTuC%WTSMWcW7NTWlSw=H9#$Y-?qbSzjKeX8Q2o%Zw61Yc3`7$;XMtq{Ay#`W1p<}+0XA!`5(c=o*yVEPe+DM#cF%fcwdz0$^3J# z|J%Z2|KGyP2Uq(+|MJlN7cQc7bxid)4B{|yzKLD5++)(4Q6_cx*5Y~6glj**!Ej5A zSB?Mv2w{IeLi?>(1;4d0@jh5G(Em$c{F|LoC;Pu0!ry;7yA1(;g#RwYgs^S7`*O( z9fHKhZ%a+Q6OJw9r1AQ0q(L=O&e=^_tDshngt_}JB3C&Hj{ueg*r;Ohm z^gYIT&mWh&zmc=!ntvo%KS`{EE>9rF*Io|b3tm|K+-i&c0lfUJ7hd%@!gcKp@Hg~^ zUV!xDRpHAf%O|<5#YX<;h4^O~)%$;Y>t6d6fVa&3{Sx^N8~P$Hf4@Yo))%kP|JfLG5G7DhZiZT$G0Q=Ps;p1$8hbC zhes6q;>)^B-RZ>K(r*3qg~bz+pu}{l%meVZr$2J=Yp6cG=&Z=xjmoxy z1X6qB2-6xaSH2JXZnNAQo*(}4_^rLQ_~F|MT6Bu1B!dBf32D%kD<^eIoratbKIm&&3D0GmbR* zmIaK@_HvLBUmC=VKI~-N`kl(U3Wd>*re?^Y)bm?wknJEcjTeF=mJTTcYv=4I>6VyW zft-8zQ19c0@8R)v+3BC&UcMv4EUE=ij0l^~Zu3;}usbG1y7jy}zdE!K`sNC&HJgRpp_isTjgj-sma?;qZ+7@YdBP(X zQd`QmT6T`Qr4vs*_HbZPU+aE{X$WR;%(HfZ=10}JB=8;cZA}_qZ6qV^@@0o}#`DuW z*7Tb~Uv9(4^as;fFD{{u#BJV8TNN7iLTdC!x?3pTB83oJu81ijXXBsyndv=SWeJK; zRzKaH+KD1$n9d{JBcI^r+_b716Ao%zZuZ9K=ASl^NfBv_j4!&|*qd{0g7CfB$k4jz z?33Gbf5=)kTZ#D!N4lA^WFAUT@qK~;k>5W`Qy2+EK<~0O8LLzecoP=F>&A}q7bzv! zMi3g9CRQH{h>bDW^+UFpj37@iMmVOU0p+fJRDSGGOmN_+sXOE6J+_{>*0r_iF0d~p zNWssT0}!F|MzmDNeCY&vWhvNx9mPw#a=us_zohD=S>iDb7%Auz*a;l=t~xsKfsAmhZCq<_>ZFNzJue-CTv-RBn$uaY{O@iIXZGf-h6_ObO>{1*!FghkxxlZ7hVp$a&Ct zv$b{@zS1dQh z`Vs{?M&?GLU4}I<<}$U6{1J=M6W=)MVe^~Kj~15PgGG0SVi$8?T?wwd(mR1L_|`u# z61Wai50rsfWvDxGB5!USB$-odF1j&wGYoGG6U!n)4k4KFZ@ZG}dA1)_$&6 zP40KHP4|7*I!R*?bn2-xsvWDiq}H>3E&dLA$+`{mEqD;=^@-0^W{4BZo90z{QD+YJ zveX`rnw+t_H3upo>%3Oyi*kL+?vv&iV%{QfSptXMcUhVmBrEZ?N*hZ=dU#u= z{lP8f(!JTcw>@6F4>$Oyv~qPJb1*Y}*$jteU3M=1T{8IgBzl(yU&P>Fx2E5lyBMFH zYi-QVyeSpt_KkX?fW2lV!SzOO2iS)Jf*asho){i}`mPtK!;1~JjB!{V25Y$HTRepE z5DNVo9S~F>TdF(kO@wrcr0Ohpl>==VQc)t>{1rgq`?5rltz2M0;_C@xFO{LTki(T; zhsV7KTJQ_PG@o;upH~yKjt*XSsM=mQhLrFErz$IVz26q3|qB^GHH*(=jzo2 z#j)N_Ze7wECAD_uyL!3{Ht0_C)2}Hrb8YDbtI$e&K{dC7eULnit9 z%LI}VjT9eIjT7idLxKEb)!KO#AAK5fk5HA@-P=5BiYoDBw4EEbx6RSlVynJkh3tsybnORQGFfcT8t%M(Cdl7n4 z)`a?Y<3gG~T5Rk#!8v_`w9h`Zbv%>UV0-6RDj{e>h3k3O{oZNTQe4mXiB%euAZ?b6 zvQ3T3xNNe$ZI}H;fx(Vs=fp=^q;mL@8HCkkG4|47P;4&9y*%G6-e~KLySo71KBrl+ z_=h0bU7Wx4T-=yw?nM+b{p8&cHK_OV1NW01&mE24zCVP=HE(O0lG=oQ!1E2&Cwt$k zH-WR8QQwF8rkL7TTPn36K(R$VhD(XTSM` zs}nx0Eo|3%uUBTx$YDd zO)M^|gS#Jjd_I1rSy4>Oqt{r#DwIV|mECid%>~^;ez*+uY(4bO@KQb!;f=Rko3fY6 zZe2AJ@qON{Jo{w&m;*H)qRUo4@%B+3>y&(ll1Z_ytJf1XA)hAuVhis>@6&BZv|#xd z^W2bxgrc~t&qT3?9cVHF&>}H`Oi*>raIeIExM1>Y5=MCoT%@r1!{AO_FQcvRm%sje zO4lSxwC87Bm!8||=jaeUiCbovUr@9YAc{axDVzN&tRBs8!P``yroFp)(E^k=Ky2Uq zyiL>Bv~Q2I*tcb-8OlYenkZS^-ah^`9tlM~d~2_AEBjT~3FH>^yUqHRx@Duc?WL!( z?;|n1itl-^1CxfRuUOiF63yH9`yP9oy3#0fgX{;JBQkn{FL_S))3O%5ShE8e(-(_%5?>n2pI z)@sgfR1n2+4Pk*o!_eCL)=eTV>%C{L+D&t22`Nn?K3o#F)&e%ka%s}d!>{8s3%)c0 z!iKXRIjMHxecWEIeyMOtR1aEFK06V!T74&)o<9WXZjw=~+wPe0k)$|kF~+}a-n-ia zL>=eUFjVNNGQ(H&`5JZ;U}o6E##*rIjfyj+@k{2Yk@7oej`c*9GRk8X!S&4>gJ;c7 zT#^qE`mYY%`xR)O3xxc@X%xDXZW!^yl#%)wmz#`$V%uwSly`&`TAq9lFSnz8za=6z zn^(;B{hl@C1(^Ke)Rl|K--txSat zc4c!$&q4w6%0@}URakH$2aqzYaq?Cf)y8&&EKx{HlW7$!tj}`)w9#-zQ2pp zs)j$T)^tfOPDzYceTW<55m8A_)zSz$XWsXJZu7_HfwP2n(tee&+vbC%hMQF^c?nP3 z=!+zipIucdgZ-{+%#y9U~^J`W-HVwdmoEsl-)letm!#SEapPXU$9;Vd0+;e>| z7@!_Jurgj~_at+PE!}IOgFa`BG2hYu6*^&egnT5DmB1v-IvabVF}m?;$GR$x`ISm= zH?lT{e`omphK5X;X)@n|R#{KzYXdLWg>LnTh^~ar-bivK%~6KgQ+LvVjp(4;J0?*j zVJ61hu#d%5E3lJ>=GzzN3Tf~k>9mwnYl-86nYCAW+U2LK?l!h$iVz+EoTCa`iUm6E zc#;K4NY}N$2-do{{F!>T?w0=$5ip4SS2!>iIeE19INkLDJLYu2MgV8Aa&_Np#d63x z%zYEQY`Q>Hz?9r17l)kvtoY(cWz!T~8pN{O&VlD%;oLhnkQO_xMTU+Q0SY3SX9rrM z=W_;8D*bhk=eWqB2g9~Ttl){~_mC%rF3h~vO{FthFhQqFY z7v$0=942S!H2lK|>D|_qow_vpCuP18SPzGsp z4Xx{LE3+}Ub_hxs6?8QLulgVOg8qBxU}DpCeVSPCF22Wnwsp}5vEPO@N1MIt5*mJ7 zqofyU)n%TePujs92D+LLoQ+|% z35o@3dk=#-uA>B!YUlaxfS}(ScJNeL2kfVrD3fOQc^Le^nTXH}<4rxMRi5r!$zR(-Uvx%o3OR zlB#Ij)9Gm!3xY*{om4a_4x}h(u_c-B<*GMD8~D9r^iR)Wv1M?y~JGc1VqzSgET3JvqkE@i5ik(o%VxvlCC zj6~%+sBWowodmnJNMMmldOQDoi%sm?wYM5?It8=8*L20AHkl)lS z^o=8w_?9cDwT#ZpPRAmH-gC@@3b_1b)cCxAAHxovQ`!npCULJ;eop$=TL2etLO{ae zkAmyL788M_&v&FCDK?L{V=);+qIcc~4z^LQOlePpZjB7>+@ozLt23+pF)BjgRaPAY zt?8=9#Qq982<;1ZgLd&*g@c~!=s~A!A6sKjujkjZ$IqtH_h`dD__IA?tS_qakBGWD zJ-$=y9N&<(b;E0;-E2U<=xj}}6ZxjeX-m(ZTqck=@GWhSkMw4%j_WsIjS?NTMeH)x z&3X4db9LUR&TeC&=yxL-BwIhfQDtGTWrgjU~Y0@^vl$295qd=JT&5;ok}yyCB>p7`p|!D8th-FK7R4{;+BB#^SNf z?gQ#;HbW65GAKeg8qeWein?4xP1KnD1*?4ulbJ>~W?dufns>KHv@YVc5Ah-lW#GRH z9{;x2Uq3%4gy zikXhCvAh>vY4d8c7Xff12JpkCVfJAQP}Akgt{m-f?;Adib_iUXIm(bBA6-I^&V|th z7TXx^65N>L4J1!{pD9RsCe>ods@bYUi{8;L1LsM(BRd z4*bQZUjYDykNpi!PY>k;11l3TmUXGO+TT*5l05gkDk$f?5jk^9su`_D5WUltC_d|~ zN3jIln1`Z6Kszvc_OlOsj5?5PPXKJZhe1hv-2U>;IJic;jn_dn9R*)Cddoe4sqB98moLqXF1Px0*vHb_iL^zdz;^gMH!c2LvRoVpDfo_qT?VT%EI%NV?|lvrl;!qVIKN zBtOT;2qmIBc;dYlyV6ru(N<2_`9{wu-(m3zuouI1(FRK%1(NT**&+B2AEjk(E4`QV zptib4Rsu05w6~c@8KB)MKHp$%t+FZ}z2{Jrku}-P9xB4HS)sJk@i4{@Dih5$8KR6m z3W|1`iPK;r{4z`JFPmY`9a4fbF4Q8y+S}eBGWn$;NG1syn|O?W(p@(@L~6ToNd}s^ zF0eQq8>FW5p=;*PaCphfbZOr2!{22=)kg1k`wj_YYg|X&_1%X(ZfxoDbtMT>#7BHx zyz*T9D%>$K@*{_?C+5`X<^I^A^%A0L;wDJBmTQDIw{T=|%J+iEEwzoiNm(}aaVBX8 zIJJvhO)#Z}7}fh$Gt+#r(#|*jo)_OPWU|A1d3)XWcsH#%F8i zlIQNwUm?^&>twH*nsW|^eeWsrdRZJIr2#R$(hqV>loSl5B#NZyi+7=(_a%+UqnNIT z*;Z7%nEZZaV{~s(i*;K%`_LscrSgZ18`+dj;II4sG`x10>(=POt*^~SlsP{3>!0%XDy|LbzP^-D77BQ<{=<_jzl}^kBYSTzp(W1k89Y2+ zN|YpBc-cPX@V8ge=*+dHZu3?T zbsk9bbD^hV&>n+mNW3O@2E@7TGjo@wg?SQi14bg-MX%iYU4i%W)$3ht&Qi8IrgWir zLGP9Nk09PGqgL*&lFPXmp3~ZsLPJQh2pXZ&=YJyh= z+#I>ht`d0H_PR1|!ckXtS;TQvtcHWHPW=7aConayOg?qEx6e^st%)hWtr~YXjbvM% z(7r`F9jlB|gMvZJVN_2bj73}uc- z1rZT>x-oTOW`+UeAj*0#q?540C?xI3Hu%yjeS*ZXYCxFQuhK$@@0^S9;>c3JG6g;9 zF4*AVgtET6nC9h=9y^*)*4wf1T=04b(sZ{@m4y82V;li>dCH^KxpL?-lDk9fnH(Z) z1y`!bEiM5Q-7DKYgFl+;o)RNEO_W6q;aJOzcU4Nc=*SwkGD*;!!R8~koJ@QEYPIrG zPu)SZ-KCwtWy7dq(u(5jr^U!0tD!r-F1E|t3w8RW&vr$Qd{D*pi*YbmIZ5~=;p$`1 zU=>kDspV56AsYa(M(#wLlYA}j$dCq@T2E1h@Aj1vHxv>lHzr>RpYJBEANiQgn%R<;Rc=6?nw*flCD1M1Swrex%AIn( zu>Cpp`Lm1+5!zDnZiOT8IR`C?sEalIt*N`b`%~#_ub*3X8y5#o%Y8_&C#jp^SfAZ7 zPiQQuUGxy1vBA!(dTLd`E#heFg9twMZC;_SF0K#|+`;9K)G;$y&|X}>6;@f9wW~^L zUL+qoWfu;p1!NTtpLM`zIz%6(xDV6JT$U8BteDe@M2@z zB!m;3dwV#ta#`!C{p1fP5Uk8<0CoAm{}vR+GJ?DJ+jge=W?hf1V)pEM`q0y55xXm= zbQ~v>Nz$+C?4f{*!EH(EcZlMe+eH?nd#V}9`sg3G`z`2@nc~gYnUPh+ZYT_N&&_`m zf~>7k2{&t@yX~7&!c!Ur7JMmx!gWdW%SrI1FY%!zO;>Ztp+7Nw!{oX*Rw4s5c5u}) z@M`p@#N|2f&Lw{=?l>Jvt~dV@u8waEMf{%YbTrHJ74SiBw{{jt-#Ib>+$(}(xON6Oh#BdyyG?2HY*vOEv*eiQJd*>!NO$7QzNB`AotV? za*ElMc+tA#??P;heebSr#1c>!=av}#r!0! zU(;x40rE=tCb}J9)*s#a;Np^1kT+#@3l7r&sT<87r8Q@TDJ-t`V}{SseSMiGe%zZu81;C{ozs% zz~7XV%MoA-9e9WL{*!0iOi9xF<`Rp51JLsf z>6tVvQqk3U@YtwBoD_%x_jbXkp|@EDO*)8T2_@1gN(lu`6?eY0eEGp;NXf}4m)TC~ z+RYslYhTh&D-y3yam-9cph^jK%SjZ3m!?nN(dgPEJM+`7;M6K(^(Cn`+?k4I z|1Gm_1Xd~;thBX5YdAjrZDNofmH@O%;qc$Op1b;nY1fP7z9BniHV67g&5Pda)1>o$ zcdt^y3ebL0wU3aWs0C~kr__6$;NOHs%uE%oGN$~+zYssx_)KHuP?;V{#Fh49x4LFn zqL*-mYgY-zZC^X=6Jv5pkJuh<4tfCo`f^_~GJOWdsXGdpn43!M|Eh#e^sayvxf2gY zH69_Ba=S#Z>FAzEQ5n0+Xhm11ec5_oS(Mxh1smZI`E!QjNfJW}FKp`vD&JuKE>x8Q z<`_rlz6e7v`u?uRLw?uevk+|_&s{sHzV&Ofa!Jf#2hjcc>!C@4w#_#LD;c8+uttjq z`{EhYO1)2T&-eS;uVUay9Cn@k=`aKTi&h`UjdiS&?_uV=*BVB1tjQ|QovI+@)j?M! z%w3WCSzMe2N6B^=caV@e>u4L7`=XwJkGG{4T(`m7`lEB-6<#K8=J%{GVLy#s=0STW zX`nTfSy2*}Z3ibgqq4kWmpYvS9*ix!dvx;`PMxjx$w@wf;w1Xz4dkm>--c3K1@T3P z^JQrgn;?9T3ooqVU;aTe5iU=$tGwPiy?yT6Uqsx&h%kBi?Uma7DpH%|C~T~RT}nR@ zQ)#k%t61sb{@DW(X)4u?S?;rGhuJ1W4Rw}AHT<2G_8DHe+pu;}l)+N#Zgmzzh zV@dBBGV_i^zfz=O!1)h`fdqX;Ma2X4=4W09&uOR7@;;ZFW=~2K9TLX_{s3RojB(8o zeLwK)4{kYQ&lv1?z0 z@!dy8zd01YRrmk?z%`PT-*!t^KkV_Y>2~~l75_Jz!C@r%@A}_A-~4l-r8Z9<^)IyS zw@m?dEDJa1i%EjN{Oe<%sCpsiS-8aZt8WX7qBE}f?wN}?7)up06dIy|QsjVo%6i-8xuP?{25MjuTwk+t4Z~9np z1-cHk@C`HPb&`hi2IBbtO5oF_v;aVpDY$2^UCR+MVt&1@;6KLb;lr)>KibItTs!nh zp2}@^zP@5+a0h@mxEjeqDEVFn{K;3bnJud~w8JpN@Jf=}aU}rogj;?6?!v<7zvwI$ z?fa;ocKX;r1IV6Ev)6gbI)D3r?DSLj{7W1+to<~fsIHOR(!`8=ytVyFp!r^3I&m`E zE$HVyLJt^J?^}cWWe@BL>Cj_pX-v$9&~o1!$STz@B-;9doqD+k?3!Se2y(kx-))6G z;I&iNk8vgJ5p$}^jF?<*%j>0JBNPGS$#L0zAky9o^Zxk}JJ56K^E zYQBn36Ix<=@Fh92_1LX^tXOfEBXEr?w~r%ZsKr|34w}DWOdR6S!zQ`#s zlz|X={TTs=nzrUmN2**gINLD~eBn`NgreooW@(jp{`L#&_`5_Zh7ZTLCYdln(Q&sz zCBujsvWs6k?{tpLIi!%}WRXbF+L1U$ zEiZvj&$cRe@9KKr6wMd(jDM(9*Y<9M`)P%{y|_aOCwCEUW1PMJxKEaL-ryT?VwqNz z?`>b;yXZAnX*zTtZNfy|(t=K8e;7x~#6#5mFX0}$lk*z1tq%|tuVyK6e)poRi>NSb zmJ~bE{FxX>pXzs(c6zgfMo@wKB~Y*YX}><}D2xp@z91&tnN#>CILyqh0u$dk`>4Bc zJEOgMi2H1B>eqy9SuI+( zgy<7kVtJo+Y?8Jl@0U2&mm|cOGA5Q8dJf$faYUWT8|_n$i)y;-%$ookhGv7N+o+S+Xwn|w%AN#<#}~-O>6VswpIkU- z*iSg8o?=2bOV!XlgM?O&QBsfss}&iJVRA^@2)Ynq~+OmgAs54_YSPIYWp*d=_O-S6Wj}bS5hZs3ffXj0|)KYiWj5i~$$8NFlFK@^+hpq3C^Ij(jvQv@> z;?)895=mfuI$QLJl8GRWO|kNBMVZg{eoG?gFrrx||K#qg@BAX9qTAwD5bY0~(u-CP zqx>2OyH7Oie6edV2qWT1)q0KFN`(FNK5AEAWMZZ;b6%Ccy6}Yw$(bdb z73$$+uGrwwy^}lV=o>4chg1*Eb=VSBJwV=Grj}QFY+)l)R#7C_X2sIz^#-4{($T1q zN~dTquAY#25g1>k(dqSvGUcDND0wn?YTlxd{Ha6T!5MS(5|yHPJU3(VmSi={iB7rG zKwHKWN*Uste8sd84h}|dh{StYd=82wji1}lKI8Q2(ogv%wwf9fdH08sFbM_1!LVfe zy){BMM2*XSwYf>%P>Y&j%JDMCRyB3V*yv0*K5tE%IY7VbZzn*3XWUe; zj_;>LN;b@iTY6S4d2OZO5yTU!siHC}Z`T6lWG&P268V$wY6sQ`2XocgKrTD~EEM&b z&}uFH-El!=TWni{=@?GZc*jS+l5#Y?o6m`=z^6cekFAJ7QVVK}HCS$E!E}r!` z;{-NyIpoS#JXLN%XrZrYXj9_NmIOcj?2C9g5f$TjLBH{H=&LC8fp)30VPcu?%WSYw z6*=d=nO6vOQ`zN*YoJbX(!*|NI|otJ6lp?V^cV)$T?BVeGsO3KxX8`tI@X|LYOYjj zVB~h17Yk1A;Wc}lv;0X7(gX+;6&c_~#Y&IpJLLVY$A+R%a^oknvIcQvSoNnC9q#{2T}|E92M^ zDU-EGoBfsLft@Ea--{hiUkAOXp;p!PO`%XlCb5ECF-sZT~u!?;KTMHYrH9 z{TqBUwjLJ={JO<&76Av(o6(n=#+rFYNqVkUKrSqj)U#C9TwnCbBUME-4&oU}$oHD7 z8t$-Hl#K`JOSV>8^*w;&p7qs4&rT_N#>GrQTa0T)8|_gN%p*f-?oX@`_f3$OG8J#F z7QIJWs!{$$I4o(k2uTX_cdJx&I@0u?pNpfov;r6h>NbOHq+`yMKOv&48@f zouHj^M9ahV=?UMDtrmbdBbRKQ5*0V7IK^0wqOAD=5q4RSNGN;1!uGflInMD8 ze7MC4JG;G(@kBQDit+?ONN24%w>#^$S!3tvd_R|CJ_qJFa?jC()^2a)o0;hh-ReUf zDX*V3jb2YDmp?P>)Gj?hIlf2#S_~$L!^JSGVjI6^vE59HkULY2u++!eUdZ`87V8lU z@_4BEPj1ITuxbh@J@gb($O8pIg!j6`{0^N{?blA`1{twI|2VzM_Lo zOY-g^u}4#yYv}8ehzDRt=oAn(m93>$DEKl82#a@&nn#w%Lb98WKR35YL2RD)v`pIr zBfFss&1QDMNRRu`>GC-btPoul^9~0Lbt_?Zx=K@1&9{v8^UGjV>gjsy^jPq^UUjL! z#^fCop|2rz?jozc48-PL6g~0W<)|Ah>Lak};CVI0V2ePiQ%+U0uQEkcSc{ zx!stIX>aqqUuAVH2&gZG&JrtuvsEIlH`A9tXLMdx>G_E8SaPx{5p2#@t0;rbVt+D< zeO&(ZF(W_$=HToy6=J8~Ja_4H=AQ*)Bx(j*)R_E9asJhN0yzh?xz0iO?J#NRbWdyl zf~)29O+Z=8=csgx`{}+#uP=83Q#h7P)r${9(QTuUZCwKTjtMp1inC+@$4JP(HDl)&V<1-NEOdVx!c*TodKtpWM zs8yZ6s$ZlN`=~^NR-Y04>n|U5VB)w0Vjd1`axHKo&7 zI*zbmYI#i`ziJ{lE=)V>&D+v44Jj|tpdjXfRV-|Mz4dLpIcLqAcA~ko?Bj{f5nY=C zD5vh(n4kD$x{InQy(^7MVH}`aU08X`Wz5rd+*3tX#Kyj=#{YHO?qI^^`PsKQ5Vd~od$6lCGKrJqpv2ssoHSdnW8-OjM?;dsAm z+^NABI(l4tX5_+a(F>6&zXzP_?pqS1dMBEN4@km_arQ#=B`%sYcREoBKA)vaGtIg! zA4$=VdfJ9kM=DEfZF^rCo(&Z{_c*XN;K(+oL7G0l_{f!ju3|}g3j*8JUj%c0aOtOsy5@&TWY_y^vDKDfkg!YwrqR- z8v`R=UGp`45G(+ z6e#Sz_Vx6O)OlRviCN1id=2PtAawkZ5+V{1+p@r87^|oIH8C;ht)-!7Lxe)Po<6Hi zx3~wN?Isn6y%cz;v-33{O*WQmoiz?c-xV`WJ^k#T#O30tUV^K*-W}Gdi1uT zEv{<*$}tPg+`aqD4Sl=t&rqlVcq=6(I_9rc{|rT`Df>VFb&Y{2i7UO{eep7}^<>@p zKX%CKx-+O{>z*bv@>!wzcus3~d#z%I6oPU8E14E~|JMN1=PytXG5-It^-l}~wg0Ja z@~L|upJ-!mz8-GIUjes)U&%o1fam9bwGKtEG*7h|@h^BRToa+IU+|gtJt+Kp^xq2h z>`3>v*DQ9|>p|5e08#6I2KLv2kHlXm{{OEKNi5gLgyO;=mxpp(0I~x3U7UP(^5rHm$>0@6g0;kJ$!L9e0Y?bIYHF+(%wMeI-RbBNq}XbAIXI}ro|GSl;dEr!HKQT{y&g9bqDA&ui7cgwTc_?`GAwl2)=LD{-tYt`r((tCn1_!78tNkjF z?iq3+Jy*?J8Qlx?cOmUwKbR+)GLy1oFRFq4+R$L$*$BYOEgLCUy`Bvr+h z8_ZU5x4-7)R+~%sAUrI8Po~w2GbG5U>ApK*VpYW89llDQm2fk@w52cK4P+)jC6o2U zp=tJF+bc>)t}7e{?I_yS)0*IUB5^~;7!nB`PT~UW zmkHNtn=*}~l{biuy+EqOn|soser2_l(bg8}AWIRh`%)0w%vfK1kD{-qPQOqHAekl? z`D3DIG*5F2Z7J<;Q^ey+99DcRaK^FICYGQW$fV!#AVH<4$x{(Dfp7ki+mVC?a+!>@ zv6s~pc~jgadMX$=hq~cOTpFK5oW55mpdVs#_+#6zt>rO>O*L7|uxpEFfuZzuHydc!%NVRg6Bz*uB4Q)|*4tyPaIXznblGiE+26r_SIpBuQdnku_qy`?&3%|C5ElK`3!VxM! z);C(0woU?tx%@2uJoXG95Ua}%R;l&<%egss=xu)0Rz>fU?>cPsjf`-G5+BinNEl@s7r3C zSKa8lxYWpaSD==lrRD3fb#lfNYSTn&On?6E7W#?SU=cr+o$-mf5GSXSI-{whQ2lqi z)KMXoAKFznagB`Ez!t&adFj|t~ zX~>*|Va*mYY|OC>HK89GX)TZuqsP03d>u={dTYXDGhoA1Q?Zk&aG7}s5bS{Do^aOJ|E*uyt9674m|)v#?IcE^!)Y}HK|n5i~`-#3-Q+P zAEG;2_Tc`eSq~6Ku~SOKB`D<=UH^LA_x%s%T!7qq*EYk%wtr*x<~2XvHz>53&ok8o zs+<-gJHsvOlWPYwFto#NV7+~eW8~vd7n)Ada_fXNXjB{){RaG64pM3POJ)r9Lgez7 z)Smu|z)7KY(ZRI=BpHL(oe{vHv2uo>8RH)lj4UUh_l$lFf%MG?C2P`j2i!ODN?ZQd zeMlLmIXGe6-q}ux_oh}~!H)MsL{%@(%$=~Dz5AUqWyaE;kLG-y9Yq4y2+)HX0*t=D zy0TB-0%DT7DB8RXxz7)^uVnM8zj2VN>O4>YU&{s-*_FR>*|AMvyy@TAZU2NmZISP= z#AeGxQYi)A#y&9-G@~x`!aBVp{CdG-XvUg>tRkJ9c>ZugPp>P~xR~Tk?UIJ4_QvV; z^!SD~BMmjeV#UDDUDX)G2CNm)}?`NPz@I*y4WN>3;&3GIr6;Nk-I zcG&l3&$d7N^=e`y{2=6r#2|#*ooYjEnTi%ZG*h7{X-O3=SD}n1Q-%~A$7$=R37n4akN6@Sl#bU!aD20yEKz1-6RML@@D_kb}PXO3@d7RR~sxQ!1k*wsiQ!fiPt z+u^tUA9sm%@Y2Zu=_eJ0PH#C%P&XXCOpsZ4^4?3WRY=J>a)>u`z&SC4V%_#l#A2~k zN$65Su;uZOadz$e&*8@}gEMZ-fHuoO{f;-IXwb?lEO7ynhR?eQIW)}ffPx)P>MK~R zd$^4g#;qNrRE6A*V_`$<5x`sg4292hW2x%#(UwZM-j_-XG4Ar1E{9wpdB}xQ1aafk z*Nm5|`Q)JOequY2?yMibV%Bn{Rw1+#BSbGFcv;j1zHmvz2!%C;3I$ZG$E@9zD~b zApO?3X2f2GJ4U?;w=G7`F@y*Cz7F+mbt_SQWq0vKo7dA|P4X04tfgf)?`w0J&JvT9 z-!eH^l6pLC>(6g8UI!%2SvcuV)-e2vp&r*KPMNZ?JvWi}r-#tm>bUxlj)i5|x1OiY zd#v2_zRFeF^^XGnX&rZH+U#P~y1fGoEqkG*!o`*OAY z#P~vhire_cFM?=jg~Ko4r`z^ z0EbGd`9?5$zxl@*U-+eZgugj%_EA%D+r^RTW={8c1*m$PLkWNr8+_Yzo;Hl|zKU!U z`ZE$QUEfZqm?@*J;Dtb3F=^ikCp(+FR=tT37E>4KIy_KHFB306H1X2yy{y;wL?r45T6!GM6i&4LXurw-Gem^=B6j?8Ih}Df_E#jeV!l! z5rv&#FsXz%W0%l=OiPy)*7$*w`Vu=mB@Dj$$8*NxS(Y5z=@^C>-Z3|V~q){QA=6CG@idzHT=y%N95!DN6DwMs} zUl*%tbn@5Cx^T~NJ>U^2Y3?^JQTTV1Noe7|_1C*QuM;rlI*QoJJRF4!=&Of)uFqyc z!(P=AOxE&sxt|?v{Fe%|xty;e!_X;8*bBZF@splT6qDG{ZrI%@5Z{aOhG2|l%$d2i zBFKR4b{1!?m&4@RLvTPfV4$zZF|OMF#Ejx2Q_D+|9;ycO)w;}R$9ql$P~gNVODH8< zYj^(n2Sr2BEF(Lg!D}(9zFFz0FF`5`33i}x+lTg`Qe6?!H^}_+cBgx~5&jz;jx(%n zK9So+HhNqmfCwaA>E(+*5Hw!`__U-~EX)I1N48_kwez#qN(?Q`H?bxhS=KZ4Vdjh* zUdLdKXN4y;6K357E0R}IG!Z7=wwkV7op*Stz6sXH3UDWP-I>{#I}y$CU!U7~=nib$ zh>L(#(7D6nP*n|CF2milc6#=G&t7m{@RSTBbE-QHt5H@?JY3}2X5N!eBii?@7S*rf z&KN<-9vP{VvAU^?{c1HSY-I74I{&mEWsTIw65e#?P}8SVZ~P(CPpHGdTA*i#pfU`a zciQt9-)&gU%+lkGQ~G~&eRo__Y16j57Ocb-1rZ@ust8CAB`PW+P3ck+iuB%V5)~Bz z1(haUdhZZgNJN@+=_Nqup(O!A0wjcdaoy+L=iPn3fB1!voZ-IDIdf*Nx#k)-zU3tK z&HbiTxaC05^c@Rjw_>Z!cT8j29HV44#h1)+H^6>(-+0x6JZ@4xTU+Ixen~ldr&MX3 zKHMN!VfX=XG4@oH%k%vcXN%~YnROd=v#&HbPn?JzW~(FP_R1Z2DW(4M*u=sLaD>PR zf=>PobIN~IUoU~#L3?f}R@gai<(#PUj@J*UjTPxZbb~R4$fw(PuUj`cO$NodPd%|v za=NMY45iEaPd6x}~gy|nZx+xEpL6f|CxXMBEb%~t1PFL1u5)M-@y4s>#UCt@4g zRt}o|Qt+NQk!4Qy-t``A0{Nx~=qEZpz910LIp1^__mS50z_t?lC#vEG;>1onlO-|g zQ&iQ0NYzRh(2N0)a5c@Wgra=kJ?g$JeZ3IT<@ND%YK@_sfl{H?>0_LQR)v|IA4^HW z&C7L>;j|WVta@q?WUo2U9`X5tq*=M!dv)UOgkST#tk0*i+WuNc1sKBuf>`p3=`Z_G zG~s_)olRUG)xUd;VK2HAT0DzVC%^D?m`d^_F4sk$k0S77kDx2P)^_9aqxB) zTJ>}|#hZrW12}P>^sl=IqWh(_D`Uk@R%Cb?gKV=L71LohIQchCwlwvUK+;~RPeiGa ze`(6DMMJabsK{roGZ8Bm3;Cbv* zZ{>`!#Z`-M!KbgH}Bs6+?$M zIK^R*Q5!wa7lKVqlrKSkd`ek3@7m2IelZWa@$^FEX_D&L8Jz8T7hdqT)c96KQiP_` zNL*bSd$VlOC$<)=>x`L|x_4Cdwnquha@&4^1$iQriz*2Urv3MrIn3!*DsCT;IwqVO zGS<=K5x<)D-bF;A!2QYsHt;o0NLYT`z0tE!=+po^q}x7Q`gOU5^t+hCMKvN9xYJ(q zvR2`nfKi7ffJygLEyv^TmePYw2D$;0A)2;B%tZxOf`|(k^D*@E&kdYxVcZ}bRH|N? zurOgN_Q5CFYM`TBOYLB!3w`bz{!uK=mh9SZ)A0ty$U%QxK-*KU%d3b?JvS^Kn9up&ub)bFV8!g9X=Ugo|)5or9%I$1L6s_fXHl~a{ z-G@zu@C(qV2I&Pp)m!8~t<%^1vzT9$Q_+Uz}}nggle&wGU{{kj4O@wIi~ z=;3a_szn9=h@1@plj)*t0x;1FSL<2!m_&0W-14OynnSiV+mMJcRc$Hqz=WVL2!YvT zpB73fvU?78?`nnfaMm^8=l2|&=RpyeNl;cbTF57_v!C$srtH(#8~M;Bps z%lERZVLHlgqx?EzZwf)Q@<*L-N>aZlpN`!ByyJl>jM&jIXws@K$Yv!n=8*5+jrY1vmV5)3y$$Sfb1%zSY4BiD9@D1aNA|Z9X z`n9Kl&0O>CchD)QU*9m4(Qh!!@{^pwl@;!#UOkTtF@7tbw$tw%S8uQOGTn?v%ZoU? zbo$&?vgf5qZlY0VcH5K714d<2sJ`Oo-(>AxBA+lKNn}^9-|q6P`Q-`zlbOxB_ zNpJ7P*dcHxGS9}Hl)9=T_O@qP_sqbz+NSFx3@(7XsYl=Bw}4T@Uf-agjYDu#Ior}q zzTxaD?~$fkG1<}!g{`3#Nr0qcp#o(fj;IU z%Si&lwAnW%`(FDN0i6Eh(3%ZfdEP9Tw^=XcdIo=Q!`x)Xa+MH|h=eQ?rezw(P?`h| z3$%nrvqdCFP?B?W5oW$d9c*a9?{w(?%GdoUC^L+)ULmGcCrl|7s04SZ@Jt%`AXhD{ zw^8#G1874=jRx&UU(`6eGRuXgIT@X@y3TU^^p;)^WAbSMCu^1uRY8n8JR-js&~QBN zX<(qDpfj#XB;t%)kl1a-%iEI6++1{yoOzO)QS z`wDADzugbkjFNMgA-@pNcULN0hh_XqS$_U}9yRu3?(5&b|9bVjV!k6QhXCCp%MzL* z!4=!ev}QPE0rm^jjKugdH(bv@S8Xc7!N=gF2C(d}ubKA|dtxW|iVO*hz7WTKB|EsM zIf8x|Nc-Di|N5Yez1=@e9?)PVdatSY3?STwNu9$~Vtt9f)Xn@9Cj(ZkSt%d(fZ~N> z$i6Y1+?2YX{8!PaeJC!q%0w1ESq$;_S*-q75yWZg$6uxtsc-(4bv_`lIVlS%W$w{D zsSRLy8H_{+R|N*L{i;y$0po72jk4I8G6y1KS8+j8@SOq7UjxMzYkho?Ym2T84zd`s zG1(Qu^Uq=1Nt`z1f2q-depaD|O-jbzJBp37`bjK-d()DC?Pmy+&ZLrfo~!n<{x}wh z*aZH~0-bL6pma$3tQHw2U{a-dlK$H2zqc>P(QmI;e0yZJgxtIUJ-mAY7djl-&HT0n zO;)vXU|xPThiPgb5t~F93)O{Rbj3(YQA4U$rFl~KMju%|T&)YV+n04yVO-U_>*<azx{qdmRVUZ5D&WR>qFEig- z#u&v)b!R4}Zb)*bZ2MB6p;*|A{4*&H`%3Y0m(7cHR!eHtm$#DOCqpbiVlwgUT71fJ z0VuzTC!807_3^0Rqh1YSNK{N|MrJ+#X0a= zjf?vg_bRzhz!XQ(!-hHMk5iL8jUX3}Y4O1_!6l(COKTo!zOY)CHSD6s=Z*rdn;yIZ zV4q4_d;g5bv70MZ5;qA}yOj>Uq&}N%UM?hQK_z5YPr71%wro&!hN0?av=Wj+`=~3> z@$ij&i?dsK{Re%a-aLikI+up%`rhNbwam?1@P_{SH&Y7=4iSeD^uC5;LWL{GLd{wh zUUt+)lqZ;xUM-iJA+q5-0kIp%GE-TkQ)i#Vczf^kA-yWEfphqiJm6Q~(rZMRCZ^^? zUgA$1JeoZ7Z)A;>Zm&04m=lUpKAu=foK8{61y!H6;qcINUTg8T-TW;lX=!qCViR6u zBb3U%anE@zOYn3ZF&^=IMQ6#N-YH2$2>P%dNKoUQ<*LiYFzc+^lVUE$^U;S^j*5s} zNp!jHtRT90V|vKG`N-WZ?aR@;`(9V6Z*_NH;Y>1DGX0<2uDV3mB=#NK>?n3VMB39x zLTFX#4q;(WqN_p41r&k6r=o>_^i$QZ)b(_}Tq+RZFUj2I6jSHLY1BUBQrWW z^)5bvJ+14R$G?I@xW*Y=(E=NPd_NIA3wqz-SY!u_dAjSngFRTYlIT<{!$! z0G#U18b;_Re+$c1-u*GO2pMg-`F^&G8cRR0CG@Hm@n)B~MQ`Tv2qp6SP2Ep24Ue!^ zu>lckjT${RJ%&`j++{dE%O`kzlbGIJk9lz2mdZT6x$;sX*c4Pk9yUVkH|U)mbt$G0>>( z>=3=_zG7ipUw4lsZ?boHs}%mnA5a+2fk}z;&-Pz#ur-3 z6BJnTAcC-H-6WGs1(G)Ul8o9kg_?&paREPgtBJI!I-;mDYb+9fhBg>~J`fJP7Z>0} zBh#`oGT~nbarnHU=+ebml8ftDHwooHViX|$;=cOr5r`)Vita>C} zJ6}J#tctHjz!DYjB7@p*!dn@VD<7ZTINt+LqjRwU;#LgWDVn110TzqGF z`CN*MVs%z(=*H%wGPu@|)Y&z#BSY1+E9@HF&tCBcXDm~48+mpl-s77r;g7e$E!#$% zpOIsP0=Xm!pz2~4PiD&d&UO)XR$Q(%{E?l-cU68Di0V6N)JA)~oU3P$d_PlH0$d?i zAk3QO31Qy3V@b@9E2;cAaFR>LZ18Mn9#O^Rx%ZKa7jHiRtDU9e<|XFmWBT9F)q3D9LoyJ)nCLhjQ)$Fi+cYg* zj{}aM1s;1{O)swIL=QYZ;b`3YbVTVj(NWxV{OxF4=<%2zRWCU7OhM?{CD@m=Ne?B) z0hqHAE_ow03}7)DC?`MLhnp+`{BSm9NDOXGBi8(P5QBkJx@kyy;8n+c9Iw;9fD|&{ zoQ|EM4u}}jtAC&?F9o>Xe8{!*1wq!_`EgA9P4HBVv*T$|y}-qlTGeGn3qj%CLio9R zHFEpr!CAo%OTMyKu#GZf$9ifEd!5V147L=gBC?!=nz_D_D~o)D+SQPiVt*R|$&>@% zqaRLRf9E(d_47sZ%NCxC_BjlSLNU^yy!rD z;#Pq*cY%CXK0gnkp5>8?+( zRnWXUnr!crGU!u5Tw0$Uipe#+8RDG!C9UrBKvsp4ELX~{!_~jp7gW8A9N8Y{b2lb= z8;I>sIGv^RoNwWrpSV+nek7DHCh$29){3lJipjxeJ9nX3dQ2}Jz}eoaizbweZ)s-L z?CFf9tw;^pLnMPD!rVdT&ruiBJe#tU^Ie?_R#%**cfSw!xd=!z;GLAIG2yS7&ND?o zeE*n15=r)>bCk_O0RNe6n4xF&jn5--F%d!Ho;&(W#t(+N^|7{{6J7J`J2XDf&16M< z6^CbbVdlbN?Vh%mRl3B!zr-2w`x$V&R^vdRD%4`>sZy@A-Oq$@r%6xs&M(lU@Ir z+w=MdW8xmfjASF#m=bSlO!<18l{0D2$5k;ur~!wWI}`Gmnw>2TY(h?UQ=EI~y6gw% zP!wxda}MP*tKlGhZyZ2ONaKdps1@(-=Z8lQ7hp3haxsdI;K$1oO=x)1*gDKT+(CaT z^xCb{V-FSIE>a3|C?fdtZ-#y_YJBKrHYJCVqZm{TJgW7jY%8~L_!Jcz)Kh=7@qLcB zr}Klkvig0a`Jt7HPVX)9Z_-4Gh*`L2q1Mp$3&g9-ZEqyOm^tlY}Fod=xGyWY8pY*V+jU~Pd?>pa$ zf3#qeIAwWhv*UEHHxte4Xzy?^hPgqyvsU~Rn4=6XA=F{WSK%=x`1p(1Z=>B4_w)8Z z+HV9^B1_yGN`pT01-qh38~oEBcn-#mc)dXSH>RK7lQ+DqK|9c|nCi(JazXc^`z98Y zQGKIkE;wxx4#oIH!(IphsjZ~`b6YD_%YbT0tr3OEQhu&8gn>IlP~h8Oy|V39jf41Y zp~FL(V9oW8iToAfoA+%hTL*K9rmu+?no3jnOisIBx>23nzq3EwRWkT4r{#Knmhrpq z&Rny&3B6<))2`~g$T_1)2@9KBr0zYd&lko#070UyA5^>*eJV%Xi%q&|2k{r*bPqYq zsaMQ3){u7gs1^zby+H;T!F+g%R1fYV-1`UYlf=14bS;oQm0@m*Wh77WO4;|7_)gIk zsa>w0&nw^&Ka$3&FTkFpSYB;;39>7B@E8>pP%CnV#>;<>nOO#W* zat#-~2Y`Y2&INCLU2U=iaq$v>Gy6P=1ssU;x~SvbFY%3hPR5NZ`&O6Mdj+_-ep#{k z2orahZuP3UP#8H3Mt$nL@3r+%b);M$BCG2b;kmRmq1bI(cP7VfgiCRrJp8)PGU(zeUEoPLR+&-*ic`%;7LB;e}0hE|T6N3isCfx)> z12_aIIh9)R2;z5bj&{)nvvd7&PBa@I+)gsUHTNTr`?tFfqy%f)h-Hb(w(Tu6V!!}U z-}XuGA0sQ=hVDTtO5u5hMvARt8xy0lH3}6@wmUPVmxxmt=jXM0Pt-<=#+*Ej*CA>B zG2&M^rE6`iryR?Fp{5tOI8TAB-^T1oOg7Er3yjO&xg@J7g!*3Illi^+Ozi7w|Ef5y z;VUQsF{L02wVpOV&L-Q=hA-oM+}lQI*(XY_&;S6?UAW{X1aZp0C`bTi#t9j37Tf=B zwV-|U(XtvESUJ!4)+<{eW~_BJk*B1GvnMd{eB0wXbeKv$M4nSDUwD7LGUg+t$0%0c znsPmi%S7h029wL!!Uv7p<}Vv?J`p-a>Er%slmy5An0uDfz(NZy7vBTjf zIz4L<($r^`^gFoUhm=oV_urVgJ9TsLSQv$E_DZg{s$kjt&d8kxSCm_ju8tME&k?5@ zMiRq3vAWJKwPU@U)U`7-{ul}8fh1^u{;=CvsK1SgWxIIdK7|n4znQzmZ)iP}uXVjs zgzT!TKQ1%s1u2+!Le*Sda1wDbF>37K<_Vqoqvmkp%}RCp?TCG&Ct47*(4mlIw=ic!>C!&6@~ zod4u1*FFR9wLAZUPQK1r`3BmtfSB}2)cz*|(P>N<&qwBB|Ml0u4cJcn2L<~3J)=h7 zl7`VelsOBDv1Kus5%$%jiC?$k`ceSCn~TtIh-6tM4Zp{g;^gUO#cgN677YIA`x2z{Hd>FZj_FS z?%wP48Eu!pl>K{BeiFp@dcu7eiM``7_>^0JFW}cJ+ur|UX~8D04K}jH4R$2NRwx6( zoV5MR8ZRp^G^Y0n9k6YCk3%{A*G`VPQ#K`i$h2@DO2=W^vww23B_p^S|7rSpRqanA z28^D-V3n$*=?KQg&-z>HujR{`;Tou?>S_IwoX*b<^hB(dAe#2wY&(fca(^{`E7ti` zhpCmky+gC{T&mk+o!5Xa#s@DizD(m#hE!E&#{kXKT{; z&K-24uKh|pS(NIXzgXU1GgzGMaB2@?(~`bTlquQ%CpgI`+jZvGZvEGKomiOgG-qqj-QWq|oN7m3g#NO zNak}96f0?;k;uy$Od>k^4g`RBkw3O{DKnM0ZWOBds^d*?+Iv*z+N&(W2vPbZfk}Ip zn0Sjlref6w?>_x1$IK}{=Yp3j#(`brWcsNlT_Vj}qhe`wfl@%-?7sN0`Ui(WOM7IC zCug!3C-#}Vo6nEtzEaW};>TVWG-Dw%SL+KA;QH+)`BNPKf)rv(Qd?2&RwUA^M*lpm zpxIdgG#3FIs!AOg?EY=IF9Oc_x&!=TPVWaS)#@?VrJlVpE=axVm-2ouKmbW4aP&$E zc{X>qJ~Dgmw%4sr(85`XxkL5Eh&m^Vh2<6%YBKUPGt;E{nD9=mcSqZ-2Sf^(+#>%f zf|;_L92Z$w$#_@P66Iu0-K%%01EJ!*&Lnu6J(9V_E7TYHc4p_(cIG^5@TiRW)Df@i zLQ)@#@|~?4ywil@x$b|A`!2XdP-M)cPRy@cx{iL?&DiX@oEcQ8AjWfYPRePpKESDC z6-2z@>JzX!j#BoEN#{oud>bCT&mWRJ%(XDK$&W7%6y1DL<3^iX^lFpD==O=+)H}be zn$I`tI=HshIJ>|Oy71awaU7@(UyLXb{R6d`4|;TvEu&qc%UOXC^aGlruldy7rDk$4 zxf==Ma-;%Dp9KhTJJt8a?AWQ5sJ-43T(T0Qaf>aUgrwb5xs}c&J}FzihB|uVR!(q7 zu#*R1a&=%0Q%+8{7_#77fHaM-G)_hk_;7JAZbZgq-LUf;baXln9@pUB5qTdn=6P)Ov_PNl zm*XYGI_3s7PQh5G5)@&a5330}HE@|17+cJBbGTqJqo_``O4NoYSR5-XU&uw_>A8U@ zuARnnZvIgPmmZKg@55K%cg(s$mQgQ1ReYm>P@wCry$a>e=^>cexYO@Cb!23}H=<-# zjUwG0%gFnVrdgoK#2%dx1BCN65nwnR^sW)XU7D|wKUJ25$QZtOO#S-(o+EhPjF8Iidi%tNGB9gZJM6b1z6p{61; zgp)&}^aWybv+vs%8J-f$fB2!J?(}_Z2FOhYY*+k3me{{$F`c?_JJ$9J?}I)r{tLS? z`PB)bl$dF;AwDQmB3n7Zoi&kre;eP1O zWJce!lV!4sVen}2k&x0GG1mL%i_QqgaPjTTG&03A>zZPAU3Ek*diOoE0eOfRJbCY! zDYrst$x`;LCMpklBjUC8!bmkb-mxqYMJQr-A+K06G)d3^4ssZXA5qq%m+Y;_2cGA` zHaaH{E3^fG3=lQHnY^t@mpYo)S}r}QW0<7v&F>v~w-+55*(Zq%S5^1EDKz^5guX`k z7!lBM<7v_>UY;EH6!hfVT2A|qWW85CA@yMhEl0+qqgtrAJ6P;z_ z;D|4sO+_@9ZDfvFcU2zhS~ApdXWmzzgReO#wuL(26cpC2Eq5s%B{qum&=ds(kBra{a3z*U#cfmHQeSnp9X;@2<;7g;am>2s2--OvCQ-AH--$xsA(2xw~Lak%q@~lI&JZ1zb%o zw)TD*=P$Dja<6+~4#!@qw6bDrST)gGm@)6y7I#c)?Eze^MnsOAI=FvnU{~dCzZOH^ zHm^?sqY1U{tRaH29QcTm-rYr$@id{PUS7xZPt?GHNoC;#yz-QfX+5d}G@))8#eNG0lZ`K79ld8O0{e z$*VOybHB3Qk%^RLdcC}FVQ%UoDPv*6gGap^-bw9gN&B1V>FCc&jW_^|=e2=2(?_O?!x z<~so}489*COrG$C+gAkhD;sK6Gj^t&1J}veWD5W_VSk2< zcdk)lYG^!?9)W^ffqM_TFuxwSUmut?Y)aSf)5tz^CSqg6+QE-f1i_W$^rhZ2%1K#c zK*%^Sb8$QloNRDUYmsYpMfUuz#qzG+2I_8!)EyMNb;xv)XU)`cMzifBMcUjBX0HEt zd7fqNYo}q<3Nh<2K1Mv6vWP;KKn~6qyIx5Nll}cW+ck!*%lLZD z>{pGRuRlOrr;dBI#1Hv=_yba&@p5OVI3=p@^=sz46El3?aPHUl6%%%F4MP4$)0`Ne z8XIDns0V!BryBHE+vSS5_!z#z-x+}+;>e*4d(c{+7clW!`0pQ&Rf|a)7wKQu$Kh*^m(^Slg-5$SwYmItBTUrM>gb48@O&&E1F81 z3b`mOOl0)Ka#bEX?~OwZwX%f-wXydHrOzxIT^}&M`1Mk>R^4V?dzeb1)1~<&s9H^Y z@-+A0(EMPx`nT10L+br^46^brP22;$kKzj2788eY2DA_a@>3r*7+w_#d+Wu&3Y(hv zZean+yVoFoH91f4n)5AS`(tCi{M`a)|M?ih*hZ6w@EdALR$6meQewJ#h%(_`VfSN$ z(m!1BTMJuPLtlN8RP$R{UshJEa$x46kfku=2{v)T&J$P@qaTKx9xFGpoY~wz8eH^= zAA1oq=0=yYrDy zC||6&5~$ixlP^^=xl{eA@Nt)2st^RkKD=wu^)#y+lV7S;u|d?Ke1dY!INE_jUNUS$ z6Hkc+wG~gnEr1UK0ER{5eEEtK&p=OL)Yvjc|9=0sItqvenp9uIgoCW6+q|Ihv|G=& z`4+cA1WC_8f8Y&`Q}kb3sRU~d+n$N((G=kgJa%|>QSj!?;{$meoniHXBOfDkQ8i9n zEtdB5B5}T$){ToU$=7m9y0AVs#KiPlO3#oAOYVas*4TudnTuViO1q=c4wP{*;#2hN zcTP4bh+pDerD%$NWkVEF86%8+vt(Pkq_ClwfB}J*hlZ))0159gqKlX zNlW18!LxD_yGOs^CrSgEj^P~KFlqO0x;C((L8*b*lcOU*&x_lxGTbDL=u#KprZl_K zz2W7AerTPG*@n_vz<2HPP;>3n3aagsuH2f}GDR(Db4}CWemVE_a*Ia4Q@giKWD0-G z=%fHNXr3xs7uQBdYRs9-qprQJp&Tx&w<%@EF({z-c%o;}^Q@5u5#aa4PO}v5%u0{? zlCEyMteDnqY|iIlW!Du8X#Os{u$)V_2D%=s84iIL^79lfl{(q22F_mag+=?LdICN> zw27@1NC9_-U?%=kt96^Wr}Dl#rSGL7x=Kz@^ma9Fh

y-M&wLGUJ^(f6(%S>%rw4 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%0DBZH0Zr^XxK-JWr0ngM>j-s9JFg;Ga;eNqZ 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 aH}*3eT+m;+WZz5$kX@dxelF{r5}E+*!7udy literal 0 HcmV?d00001 From 0b336b2362da684953922c48b0a429576bb74dfc Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Mon, 7 Apr 2025 16:15:52 +0100 Subject: [PATCH 02/38] update to format --- docs/README.md | 1 - docs/docs/01-introduction/01-introduction.md | 1 - docs/docs/01-introduction/02-sprinter-stash.md | 13 ++----------- docs/docs/01-introduction/03-sprinter-solve.md | 5 ++--- .../Sprinter DOCS.code-workspace | 18 +++++++++--------- 5 files changed, 13 insertions(+), 25 deletions(-) diff --git a/docs/README.md b/docs/README.md index aaf04e9..0c6c2c2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,3 @@ - # Website This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator. diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index 5fe7b8c..d3e65ba 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -10,7 +10,6 @@ sidebar_position: 1 Sprinter Logo White - # What is Sprinter? Sprinter combines solving-as-a-service infrastructure with credit-based cross-chain liquidity. It enables solvers to borrow and execute on-chain actions without pre-funded inventory, while giving dApps and protocols access to best-in-class execution routes, powered by the Project Blanc advanced solving technology. diff --git a/docs/docs/01-introduction/02-sprinter-stash.md b/docs/docs/01-introduction/02-sprinter-stash.md index 5139909..d8400b7 100644 --- a/docs/docs/01-introduction/02-sprinter-stash.md +++ b/docs/docs/01-introduction/02-sprinter-stash.md @@ -24,8 +24,6 @@ Sprinter Stash is a cross-chain credit liquidity protocol that uses a just-in-ti Sprinter Stash is powered by **Sprinter Solve**. - - ## Features & Utility ### For Solvers @@ -40,8 +38,6 @@ Sprinter Stash is powered by **Sprinter Solve**. - Participate in liquidity mining campaigns for SPRNT rewards. - Benefit from protocol-managed inventory strategies. - - ## Utilizing Sprinter Stash ### As a Liquidity Provider @@ -59,20 +55,17 @@ Sprinter Stash is powered by **Sprinter Solve**. 4. Borrow funds and execute swaps 5. Repay liquidity post-transaction - - ## Stash API Endpoints ```ts // Example Endpoints (see Swagger for full list) -GET /v1/liquidity/protocol/{protocol}/deposit/{txHash}/request -GET /v1/liquidity/protocol/{protocol}/type/{type}/quote +GET / v1 / liquidity / protocol / { protocol } / deposit / { txHash } / request; +GET / v1 / liquidity / protocol / { protocol } / type / { type } / quote; ``` ➡️ _To integrate Swagger: use `@theme/ApiDoc` component or embed link to OpenAPI spec._ - ## Supported Networks - Arbitrum @@ -86,5 +79,3 @@ GET /v1/liquidity/protocol/{protocol}/type/{type}/quote - Blue-Chip: WETH, WBTC Want to request support for a new chain or asset? [Submit a request](#). - - diff --git a/docs/docs/01-introduction/03-sprinter-solve.md b/docs/docs/01-introduction/03-sprinter-solve.md index 0f4be44..57e8834 100644 --- a/docs/docs/01-introduction/03-sprinter-solve.md +++ b/docs/docs/01-introduction/03-sprinter-solve.md @@ -3,6 +3,7 @@ id: solve title: Sprinter Solve sidebar_position: 3 --- + # Sprinter Solve Sprinter Solve enables efficient execution of intent-based swaps through an RFQ-based Swap API. It’s powered by the Sprinter Solver, built on top of Project Blanc. @@ -73,7 +74,5 @@ X-API-Key: ```ts // Reference: https://github.com/sprintertech/ass/blob/dev/swap/docs/openapi.yml -GET /v2/route +GET / v2 / route; ``` - - diff --git a/docs/docs/01-introduction/Sprinter DOCS.code-workspace b/docs/docs/01-introduction/Sprinter DOCS.code-workspace index eadec59..9e0bde5 100644 --- a/docs/docs/01-introduction/Sprinter DOCS.code-workspace +++ b/docs/docs/01-introduction/Sprinter DOCS.code-workspace @@ -1,10 +1,10 @@ { - "folders": [ - { - "path": "../../.." - }, - { - "path": "../../.." - } - ] -} \ No newline at end of file + "folders": [ + { + "path": "../../..", + }, + { + "path": "../../..", + }, + ], +} From 43a85ac15894a5c3289a2ad2e1e0493919b00bd1 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Mon, 14 Apr 2025 14:57:12 +0100 Subject: [PATCH 03/38] docs refresh to v2 --- docs/docusaurus.config.ts | 31 +- docs/package.json | 1 + docs/static/api/solve-openapi.yaml | 298 +++++++++ docs/static/api/stash-openapi.yaml | 934 +++++++++++++++++++++++++++++ yarn.lock | 764 +++++++++++++++++++++-- 5 files changed, 1982 insertions(+), 46 deletions(-) create mode 100644 docs/static/api/solve-openapi.yaml create mode 100644 docs/static/api/stash-openapi.yaml diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 719ab30..0c8b8af 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -50,11 +50,12 @@ const config: Config = { alt: "Sprinter Temp Logo", src: "img/sprinter-logo.svg", srcDark: "img/sprinter-logo-white.svg", + href: "sprinter.tech", }, items: [ { - href: "https://poc.sprinter.buildwithsygma.com/", - label: "POC", + href: "https://app.sprinter.tech", + label: "Stash", position: "left", }, { @@ -136,6 +137,32 @@ const config: Config = { }, } satisfies Preset.ThemeConfig, plugins: [ + [ + 'docusaurus-plugin-openapi-docs', + { + id: 'default', + docsPluginId: 'classic', + config: { + stash: { + specPath: 'static/api/stash-openapi.yaml', + outputDir: 'docs/api/stash', + sidebarOptions: { + groupPathsBy: 'tag', + categoryLinkSource: 'tag', + }, + }, + solve: { + specPath: 'static/api/solve-openapi.yaml', + outputDir: 'docs/api/solve', + sidebarOptions: { + groupPathsBy: 'tag', + categoryLinkSource: 'tag', + }, + }, + }, + }, + ], + ], [ require.resolve("@cmfcmf/docusaurus-search-local"), { diff --git a/docs/package.json b/docs/package.json index a0ab4d2..3de9a09 100644 --- a/docs/package.json +++ b/docs/package.json @@ -28,6 +28,7 @@ "clsx": "^2.1.1", "d3": "^7.9.0", "d3-sankey": "^0.12.3", + "docusaurus-plugin-openapi-docs": "^4.3.7", "prism-react-renderer": "^2.3.1", "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/docs/static/api/solve-openapi.yaml b/docs/static/api/solve-openapi.yaml new file mode 100644 index 0000000..90415ce --- /dev/null +++ b/docs/static/api/solve-openapi.yaml @@ -0,0 +1,298 @@ +openapi: 3.0.3 +info: + title: Swap by Blanc + description: API used by Blanc Swap + version: 1.0.0-beta + +security: + - ApiKeyAuth: [] + +paths: + /quote: + get: + description: Get a price estimation quote + parameters: + - in: query + name: amount_in + description: The amount of tokens to sell in decimal notation + schema: + $ref: "#/components/schemas/TokenAmount" + required: true + example: "1000000000000000000" + - in: query + name: token_in + description: The token address to sell + schema: + $ref: "#/components/schemas/Address" + required: true + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F" + - in: query + name: token_out + description: The token address to buy + schema: + $ref: "#/components/schemas/Address" + required: true + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" + responses: + 200: + description: Quote successfully created + content: + application/json: + schema: + $ref: "#/components/schemas/QuoteResponse" + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized - Invalid API key + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + /route: + get: + description: Get a route for execution + parameters: + - in: query + name: amount_in + description: The amount of tokens to sell in decimal notation + schema: + $ref: "#/components/schemas/TokenAmount" + required: true + example: "1000000000000000000" + - in: query + name: token_in + description: The token address to sell + schema: + $ref: "#/components/schemas/Address" + required: true + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F" + - in: query + name: min_amount_out + description: The minimum amount of tokens to receive + schema: + $ref: "#/components/schemas/TokenAmount" + required: true + example: "990000000000000000" + - in: query + name: token_out + description: The token address to buy + schema: + $ref: "#/components/schemas/Address" + required: true + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" + responses: + 200: + description: Route successfully generated + content: + application/json: + schema: + $ref: "#/components/schemas/RouteResponse" + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized - Invalid API key + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + + /v2/route: + get: + description: Get a route for execution with additional parameters + parameters: + - in: query + name: amount_in + description: The amount of tokens to sell in decimal notation + schema: + $ref: "#/components/schemas/TokenAmount" + required: true + example: "1000000000000000000" + - in: query + name: token_in + description: The token address to sell + schema: + $ref: "#/components/schemas/Address" + required: true + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F" + - in: query + name: token_out + description: The token address to buy + schema: + $ref: "#/components/schemas/Address" + required: true + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" + - in: query + name: slippage + description: The slippage tolerance in percentage (e.g., 0.5 for 0.5%) + schema: + type: number + format: float + required: false + example: 0.5 + - in: query + name: target_duration_ms + description: The target duration for the route search in milliseconds + schema: + type: integer + format: int64 + required: false + example: 200 + responses: + 200: + description: Route successfully generated + content: + application/json: + schema: + $ref: "#/components/schemas/RouteResponseV2" + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 401: + description: Unauthorized - Invalid API key + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 500: + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + +components: + securitySchemes: + ApiKeyAuth: + type: apiKey + in: header + name: X-API-Key + description: API key with format sk_live_* + + schemas: + Address: + description: 20 byte Ethereum address encoded as a hex with `0x` prefix + type: string + pattern: "^0x[a-fA-F0-9]{40}$" + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F" + + TokenAmount: + description: Amount of an ERC20 token as a decimal string (no scientific notation) + type: string + pattern: "^[0-9]+$" + example: "1000000000000000000" + + QuoteResponse: + description: Successful quote with the expected output amount + type: object + properties: + amount_out: + description: The amount of output tokens you would receive + $ref: "#/components/schemas/TokenAmount" + required: + - amount_out + + Call: + description: An EVM call for execution + type: object + required: + - to + - value + - data + properties: + to: + description: Target contract address + $ref: "#/components/schemas/Address" + value: + description: Amount of ETH to send with call (in wei) + $ref: "#/components/schemas/TokenAmount" + data: + description: Hex encoded calldata + type: string + pattern: "^0x[a-fA-F0-9]*$" + example: "0x38ed1739" + + RouteResponse: + description: Successfully created route with execution details + type: object + required: + - calls + - gas + properties: + calls: + description: Array of EVM calls to execute in sequence + type: array + items: + $ref: "#/components/schemas/Call" + gas: + description: Estimated gas required for execution + type: integer + example: 150000 + + RouteResponseV2: + description: Successfully created route with additional details + type: object + required: + - quote_id + - amount_out + - min_amount_out + - target + - swap_call_data + - rainbow_input + properties: + quote_id: + description: Unique identifier for the quote + type: string + example: "q_12345678" + amount_out: + description: The amount of output tokens you would receive + $ref: "#/components/schemas/TokenAmount" + min_amount_out: + description: The minimum amount of tokens to receive after slippage + $ref: "#/components/schemas/TokenAmount" + target: + description: The target contract address for the swap + $ref: "#/components/schemas/Address" + swap_call_data: + description: Hex encoded calldata for the swap + type: string + pattern: "^0x[a-fA-F0-9]*$" + example: "0x38ed1739" + rainbow_input: + description: Input data for the rainbow swap + type: string + example: "0x..." + + Error: + description: Error response with details + type: object + required: + - error + properties: + error: + description: Human readable error message + type: string + example: "insufficient output amount" diff --git a/docs/static/api/stash-openapi.yaml b/docs/static/api/stash-openapi.yaml new file mode 100644 index 0000000..abf29ae --- /dev/null +++ b/docs/static/api/stash-openapi.yaml @@ -0,0 +1,934 @@ +definitions: + entity.Aave: + properties: + pool: + type: string + poolAddressProvider: + type: string + priceOracle: + type: string + required: + - pool + - poolAddressProvider + - priceOracle + type: object + entity.Amount: + properties: + amount: + description: amount in lowest denomination + example: "" + type: string + amountUSD: + type: number + required: + - amount + - amountUSD + type: object + entity.ChainID: + enum: + - 1 + - 42161 + - 10 + - 137 + - 8453 + - 43114 + - 100 + - 8333 + - 11155111 + - 1993 + - 19934 + - 84532 + type: integer + x-enum-varnames: + - Ethereum + - Arbitrum + - Optimism + - Polygon + - Base + - Avalanche + - Gnosis + - B3 + - Sepolia + - B3Sepolia + - B4Sepolia + - BaseSepolia + entity.FungibleToken: + properties: + addresses: + additionalProperties: + type: string + description: Maps chain id to token address on that chain + example: + "1": 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + type: object + decimals: + type: integer + logoURI: + type: string + name: + type: string + symbol: + type: string + required: + - addresses + - decimals + - logoURI + - name + - symbol + type: object + entity.NativeToken: + properties: + decimals: + type: integer + name: + type: string + required: + - decimals + - name + type: object + entity.Network: + properties: + aave: + $ref: '#/definitions/entity.Aave' + aaveLiquidityPool: + type: string + blockTime: + type: integer + chainID: + $ref: '#/definitions/entity.ChainID' + chainType: + type: string + logoURI: + type: string + name: + type: string + nativeToken: + $ref: '#/definitions/entity.NativeToken' + rpcURLs: + items: + type: string + type: array + usdcLiquidityPool: + type: string + required: + - aave + - aaveLiquidityPool + - blockTime + - chainID + - chainType + - logoURI + - name + - nativeToken + - rpcURLs + - usdcLiquidityPool + type: object + entity.TokenTransferQuote: + properties: + amount: + description: amount of tokens in lowest denomination + example: "" + type: string + approvals: + description: approvals that need to be executed before transaction + items: + $ref: '#/definitions/entity.Transaction' + type: array + destinationChain: + $ref: '#/definitions/entity.ChainID' + destinationTokenAddress: + type: string + duration: + description: how long transfer will take in seconds + type: number + fee: + $ref: '#/definitions/entity.Amount' + gasCost: + $ref: '#/definitions/entity.Amount' + senderAddress: + type: string + sourceChain: + $ref: '#/definitions/entity.ChainID' + sourceTokenAddress: + type: string + tool: + $ref: '#/definitions/entity.Tool' + transaction: + allOf: + - $ref: '#/definitions/entity.Transaction' + description: transaction request to be sent to the wallet + required: + - amount + - approvals + - destinationChain + - destinationTokenAddress + - duration + - fee + - gasCost + - senderAddress + - sourceChain + - sourceTokenAddress + - tool + - transaction + type: object + entity.Tool: + properties: + logoURI: + type: string + name: + type: string + required: + - logoURI + - name + type: object + entity.Transaction: + properties: + chainId: + $ref: '#/definitions/entity.ChainID' + data: + type: string + from: + type: string + gasLimit: + type: string + to: + type: string + value: + type: string + required: + - chainId + - data + - from + - gasLimit + - to + - value + type: object + server.AccountFungibleBalanceHandler.response: + properties: + data: + items: + $ref: '#/definitions/server.chainBalance' + type: array + required: + - data + type: object + server.AggregateBalanceSolutionHandler.response: + properties: + data: + items: + $ref: '#/definitions/entity.TokenTransferQuote' + type: array + required: + - data + type: object + server.AggregateWithHookSolutionHandler.request: + properties: + account: + type: string + amount: + type: string + destination: + $ref: '#/definitions/entity.ChainID' + destinationContractCall: + properties: + approvalAddress: + type: string + callData: + type: string + contractAddress: + type: string + gasLimit: + type: integer + outputTokenAddress: + type: string + required: + - callData + - contractAddress + - gasLimit + type: object + threshold: + type: string + token: + type: string + type: + enum: + - fungible + type: string + whitelistedSourceChains: + items: + $ref: '#/definitions/entity.ChainID' + type: array + whitelistedTools: + items: + type: string + type: array + required: + - account + - amount + - destination + - destinationContractCall + - threshold + - token + - type + - whitelistedSourceChains + - whitelistedTools + type: object + server.AggregateWithHookSolutionHandler.response: + properties: + data: + items: + $ref: '#/definitions/entity.TokenTransferQuote' + type: array + required: + - data + type: object + server.BalanceSweepHandler.response: + properties: + data: + items: + $ref: '#/definitions/entity.TokenTransferQuote' + type: array + required: + - data + type: object + server.BorrowCost: + description: Borrow cost structure with a big.Int represented as string + properties: + borrowCost: + type: string + liquidityPool: + type: string + nonce: + type: string + signature: + type: string + required: + - borrowCost + - liquidityPool + - nonce + - signature + type: object + server.BorrowQuote.response: + properties: + data: + $ref: '#/definitions/server.Quote' + required: + - data + type: object + server.ErrorResponse: + properties: + debug: + type: string + error: + type: string + required: + - debug + - error + type: object + server.GetFungibleTokensByChainHandler.response: + properties: + data: + items: + $ref: '#/definitions/entity.FungibleToken' + type: array + required: + - data + type: object + server.GetNetworksHandler.response: + properties: + data: + items: + $ref: '#/definitions/entity.Network' + type: array + required: + - data + type: object + server.GetSupportedFungibleTokens.response: + properties: + data: + items: + $ref: '#/definitions/entity.FungibleToken' + type: array + required: + - data + type: object + server.GetSupportedToolsHandler.response: + properties: + tools: + items: + type: string + type: array + required: + - tools + type: object + server.HealthHandler.response: + properties: + status: + type: string + required: + - status + type: object + server.Quote: + properties: + borrowCost: + type: string + duration: + type: string + requiredInput: + type: string + requiredOutput: + type: string + required: + - borrowCost + - duration + - requiredInput + - requiredOutput + type: object + server.SingleHopWithHookHandler.request: + properties: + account: + type: string + amount: + type: string + destination: + $ref: '#/definitions/entity.ChainID' + destinationContractCall: + properties: + approvalAddress: + type: string + callData: + type: string + contractAddress: + type: string + gasLimit: + type: integer + outputTokenAddress: + type: string + required: + - callData + - contractAddress + - gasLimit + type: object + enableSwaps: + type: boolean + recipient: + type: string + threshold: + type: string + token: + type: string + type: + enum: + - fungible + type: string + whitelistedSourceChains: + items: + $ref: '#/definitions/entity.ChainID' + type: array + whitelistedTools: + items: + type: string + type: array + required: + - account + - amount + - destination + - destinationContractCall + - enableSwaps + - recipient + - threshold + - token + - type + - whitelistedSourceChains + - whitelistedTools + type: object + server.SingleHopWithHookHandler.response: + properties: + data: + items: + $ref: '#/definitions/entity.TokenTransferQuote' + type: array + required: + - data + type: object + server.chainBalance: + properties: + balance: + description: token balance in lowest denomination + example: "123" + type: string + chainId: + type: integer + tokenDecimals: + type: integer + required: + - balance + - chainId + - tokenDecimals + type: object +info: + contact: {} +paths: + /accounts/{account}/assets/fungible/{token}: + get: + consumes: + - application/json + description: Returns cross chain account balance in lowest denomination for + supported fungible token + parameters: + - description: Either token name or token symbol (case insensitive) + in: path + name: token + required: true + type: string + - description: Account address in hex format with 0x (case insensitive) + in: path + name: account + required: true + type: string + - description: comma separated list of source chain ids that can be used + in: query + name: whitelistedChains + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.AccountFungibleBalanceHandler.response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns cross chain account balance for supported fungible token + /accounts/{account}/assets/native: + get: + consumes: + - application/json + description: Returns cross chain account balance in lowest denomination for + eth + parameters: + - description: Account address in hex format with 0x (case insensitive) + in: path + name: account + required: true + type: string + - description: comma separated list of source chain ids that can be used + in: query + name: whitelistedChains + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.AccountFungibleBalanceHandler.response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns cross chain account balance for chains with eth as native token + /assets/fungible: + get: + consumes: + - application/json + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.GetSupportedFungibleTokens.response' + summary: Returns supported tokens + /assets/fungible/{token}: + get: + consumes: + - application/json + description: Using given token name or symbol it will return fungible token + details + parameters: + - description: Either token name or token symbol (case insensitive) + in: path + name: token + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/entity.FungibleToken' + "404": + description: Not Found + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns supported fungible token details + /health: + get: + consumes: + - application/json + description: health check + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.HealthHandler.response' + summary: health check + /liquidity/protocol/{protocol}/deposit/{txHash}/request: + get: + consumes: + - application/json + description: Get the borrow cost for a liquidity transaction + parameters: + - description: input data (relay data) + in: body + name: Input + required: true + schema: + type: string + - description: caller address (solver address) + in: body + name: Caller + required: true + schema: + type: string + - description: Protocol + in: path + name: protocol + required: true + type: string + - description: Transaction hash for the deposit + in: path + name: txHash + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.BorrowCost' + "400": + description: Bad request due to invalid input or missing parameters + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Get the borrow cost for a liquidity transaction + tags: + - Liquidity + /liquidity/protocol/{protocol}/type/{type}/quote: + get: + consumes: + - application/json + description: This endpoint calculates the borrow quote for a liquidity transaction, + including the borrow cost, required input/output, and duration. + parameters: + - description: Amount to borrow + in: body + name: amount + required: true + schema: + type: string + - description: Token address (in Ethereum address format) + in: body + name: token + required: true + schema: + type: string + - description: Network ID for the transaction + in: body + name: network + required: true + schema: + type: integer + - description: Protocol name (e.g., Across) + in: path + name: protocol + required: true + type: string + - description: Quote algorithm type (e.g., ExactInput, ExactOutput) + in: path + name: type + required: true + type: string + - description: Destination Network ID (optional, defaults to the network from + the request body) + in: query + name: network + type: integer + produces: + - application/json + responses: + "200": + description: Successfully retrieved borrow quote + schema: + $ref: '#/definitions/server.BorrowQuote.response' + "400": + description: Bad request due to invalid input or missing parameters + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Get the borrow quote for a liquidity transaction based on the input + data + tags: + - Liquidity + /networks: + get: + consumes: + - application/json + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.GetNetworksHandler.response' + summary: Returns all supported networks + /networks/{chainID}/assets/fungible: + get: + consumes: + - application/json + parameters: + - description: Chain ID + in: path + name: chainID + required: true + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.GetFungibleTokensByChainHandler.response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns supported tokens on a chain defined by given chainID + /solution/call: + post: + consumes: + - application/json + description: Endpoint will calculate best single-hop solution to execute crosschain + call. + parameters: + - description: request + in: body + name: request + required: true + schema: + $ref: '#/definitions/server.SingleHopWithHookHandler.request' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.SingleHopWithHookHandler.response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/server.ErrorResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns only single hop soulution to do contract call on destination + /solutions/aggregation: + get: + consumes: + - application/json + description: Endpoint will calculate best combination of single-hop transfers + to + parameters: + - description: account address in hex format with 0x which will send and receive + funds + in: query + name: account + required: true + type: string + - description: id of destination chain + in: query + name: destination + required: true + type: integer + - description: supported token name or symbol + in: query + name: token + required: true + type: string + - description: min targeted amount of tokens on destination in lowest denomination + in: query + name: amount + required: true + type: string + - description: min amount of tokensto leave on source in lowest denomination + in: query + name: threshold + type: string + - description: comma separated list of source chain ids that can be used + in: query + name: whitelistedSourceChains + type: string + - description: comma separated list of tools that can be used for getting quote + in: query + name: whitelistedTools + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.AggregateBalanceSolutionHandler.response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/server.ErrorResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns solution to aggregate fungible token balance on destination + post: + consumes: + - application/json + description: Endpoint will calculate best combination of single-hop transfers + to + parameters: + - description: request + in: body + name: request + required: true + schema: + $ref: '#/definitions/server.AggregateWithHookSolutionHandler.request' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.AggregateWithHookSolutionHandler.response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/server.ErrorResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns solution to aggregate fungible token balance on destination + and invoking contract call + /solutions/balance-sweep: + get: + consumes: + - application/json + description: Endpoint will return quote to transfer full token balances of source + chains to a destination chain + parameters: + - description: account address in hex format with 0x which will send funds + in: query + name: account + required: true + type: string + - description: recipient address in hex format with 0x which will receive funds + in: query + name: recipient + type: string + - description: id of destination chain + in: query + name: destination + required: true + type: integer + - description: supported token name or symbol + in: query + name: token + required: true + type: string + - description: comma separated list of source chain ids that can be used + in: query + name: whitelistedSourceChains + type: string + - description: comma separated list of tools that can be used for getting quote + in: query + name: whitelistedTools + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.BalanceSweepHandler.response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/server.ErrorResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns solution to sweep all token balances + /tools: + get: + consumes: + - application/json + description: It will return the list of tools that is currently supported in + sprinter + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/server.GetSupportedToolsHandler.response' + "404": + description: Not Found + schema: + $ref: '#/definitions/server.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/server.ErrorResponse' + summary: Returns supported tools for quote service +swagger: "2.0" diff --git a/yarn.lock b/yarn.lock index e5bb13c..8e90fb2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -303,6 +303,17 @@ __metadata: languageName: node linkType: hard +"@apidevtools/json-schema-ref-parser@npm:^11.5.4": + version: 11.9.3 + resolution: "@apidevtools/json-schema-ref-parser@npm:11.9.3" + dependencies: + "@jsdevtools/ono": "npm:^7.1.3" + "@types/json-schema": "npm:^7.0.15" + js-yaml: "npm:^4.1.0" + checksum: 10c0/5745813b3d964279f387677b7a903ba6634cdeaf879ff3a331a694392cbc923763f398506df190be114f2574b8b570baab3e367c2194bb35f50147ff6cf27d7a + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.8.3": version: 7.24.7 resolution: "@babel/code-frame@npm:7.24.7" @@ -3007,6 +3018,20 @@ __metadata: languageName: node linkType: hard +"@exodus/schemasafe@npm:^1.0.0-rc.2": + version: 1.3.0 + resolution: "@exodus/schemasafe@npm:1.3.0" + checksum: 10c0/e19397c14db76342154c32a9088536149babfd9b18ecae815add0b2f911d9aa292aa51c6ab33b857b4b6bb371a74ebde845e6f17b2824e73b4e307230f23f86a + languageName: node + linkType: hard + +"@faker-js/faker@npm:5.5.3": + version: 5.5.3 + resolution: "@faker-js/faker@npm:5.5.3" + checksum: 10c0/3f7fbf0b0cfe23c7750ab79b123be8f845e5f376ec28bf43b7b017983b6fc3a9dc22543c4eea52e30cc119699c0f47f62a2c02e9eae9b6a20b75955e9c3eb887 + languageName: node + linkType: hard + "@fastify/busboy@npm:^2.0.0": version: 2.1.1 resolution: "@fastify/busboy@npm:2.1.1" @@ -3194,6 +3219,13 @@ __metadata: languageName: node linkType: hard +"@jsdevtools/ono@npm:^7.1.3": + version: 7.1.3 + resolution: "@jsdevtools/ono@npm:7.1.3" + checksum: 10c0/a9f7e3e8e3bc315a34959934a5e2f874c423cf4eae64377d3fc9de0400ed9f36cb5fd5ebce3300d2e8f4085f557c4a8b591427a583729a87841fda46e6c216b9 + languageName: node + linkType: hard + "@leichtgewicht/ip-codec@npm:^2.0.1": version: 2.0.5 resolution: "@leichtgewicht/ip-codec@npm:2.0.5" @@ -3772,6 +3804,42 @@ __metadata: languageName: node linkType: hard +"@redocly/ajv@npm:^8.11.2": + version: 8.11.2 + resolution: "@redocly/ajv@npm:8.11.2" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js-replace: "npm:^1.0.1" + checksum: 10c0/249ca2e237f7b1248ee1018ba1ad3a739cb9f16e5f7fe821875948806980d65246c79ef7d5e7bd8db773c120e2cd5ce15aa47883893608e1965ca4d45c5572f4 + languageName: node + linkType: hard + +"@redocly/config@npm:^0.22.0": + version: 0.22.2 + resolution: "@redocly/config@npm:0.22.2" + checksum: 10c0/625e947e7939e2d59bd83f516af5a581411167e3fc83adf7322bddf9bc69038fc601ed4ee8abae44d298ed367a16a1a09e7cdbe8b5dde172b4ce53c88d8717f4 + languageName: node + linkType: hard + +"@redocly/openapi-core@npm:^1.10.5": + version: 1.34.1 + resolution: "@redocly/openapi-core@npm:1.34.1" + dependencies: + "@redocly/ajv": "npm:^8.11.2" + "@redocly/config": "npm:^0.22.0" + colorette: "npm:^1.2.0" + https-proxy-agent: "npm:^7.0.5" + js-levenshtein: "npm:^1.1.6" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^5.0.1" + pluralize: "npm:^8.0.0" + yaml-ast-parser: "npm:0.0.43" + checksum: 10c0/cba57798f7182229e9eb4e4e076f1b418cec23cebd49f2e1165bbaaacc2a7142481bbfe0a0cc798d2ebf472ec5715576fb0eb0bc3fcadde11bd1c11a9f0e8730 + languageName: node + linkType: hard + "@rollup/pluginutils@npm:^5.1.0": version: 5.1.1 resolution: "@rollup/pluginutils@npm:5.1.1" @@ -5339,7 +5407,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -6487,6 +6555,13 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -6497,7 +6572,7 @@ __metadata: languageName: node linkType: hard -"ajv-draft-04@npm:~1.0.0": +"ajv-draft-04@npm:1.0.0, ajv-draft-04@npm:~1.0.0": version: 1.0.0 resolution: "ajv-draft-04@npm:1.0.0" peerDependencies: @@ -6509,7 +6584,7 @@ __metadata: languageName: node linkType: hard -"ajv-formats@npm:^2.1.1": +"ajv-formats@npm:2.1.1, ajv-formats@npm:^2.1.1": version: 2.1.1 resolution: "ajv-formats@npm:2.1.1" dependencies: @@ -6557,6 +6632,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:8.11.0": + version: 8.11.0 + resolution: "ajv@npm:8.11.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: 10c0/8a4b1b639a53d52169b94dd1cdd03716fe7bbc1fc676006957ba82497e764f4bd44b92f75e37c8804ea3176ee3c224322e22779d071fb01cd89aefaaa42c9414 + languageName: node + linkType: hard + "ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -6639,6 +6726,15 @@ __metadata: languageName: node linkType: hard +"allof-merge@npm:^0.6.6": + version: 0.6.6 + resolution: "allof-merge@npm:0.6.6" + dependencies: + json-crawl: "npm:^0.5.3" + checksum: 10c0/dfa65e5bbebee869e53de7a28c768148c0630e3a4be137cdea954a5db6561a33f228ebcaa544a2fb7f20a76e8f05ea9cafc072b2105dbde75558cbc8dd4d441a + languageName: node + linkType: hard + "ansi-align@npm:^3.0.1": version: 3.0.1 resolution: "ansi-align@npm:3.0.1" @@ -6921,6 +7017,13 @@ __metadata: languageName: node linkType: hard +"async@npm:3.2.4": + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 10c0/b5d02fed64717edf49e35b2b156debd9cf524934ea670108fa5528e7615ed66a5e0bf6c65f832c9483b63aa7f0bffe3e588ebe8d58a539b833798d324516e1c9 + languageName: node + linkType: hard + "at-least-node@npm:^1.0.0": version: 1.0.0 resolution: "at-least-node@npm:1.0.0" @@ -7304,6 +7407,13 @@ __metadata: languageName: node linkType: hard +"call-me-maybe@npm:^1.0.1": + version: 1.0.2 + resolution: "call-me-maybe@npm:1.0.2" + checksum: 10c0/8eff5dbb61141ebb236ed71b4e9549e488bcb5451c48c11e5667d5c75b0532303788a1101e6978cafa2d0c8c1a727805599c2741e3e0982855c9f1d78cd06c9f + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -7456,6 +7566,13 @@ __metadata: languageName: node linkType: hard +"charset@npm:^1.0.0": + version: 1.0.1 + resolution: "charset@npm:1.0.1" + checksum: 10c0/20575230d85e940dcf4694ce488881207fb2a3c916f1c62b9e105c4e42f9ff7f3a52cd6c473ca0342dcef61272c6c6e533fcee62a08d101deeff0793a547a6ea + languageName: node + linkType: hard + "check-error@npm:^1.0.3": version: 1.0.3 resolution: "check-error@npm:1.0.3" @@ -7577,6 +7694,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + "clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" @@ -7661,6 +7789,13 @@ __metadata: languageName: node linkType: hard +"colorette@npm:^1.2.0": + version: 1.4.0 + resolution: "colorette@npm:1.4.0" + checksum: 10c0/4955c8f7daafca8ae7081d672e4bd89d553bd5782b5846d5a7e05effe93c2f15f7e9c0cb46f341b59f579a39fcf436241ff79594899d75d5f3460c03d607fe9e + languageName: node + linkType: hard + "colorette@npm:^2.0.10": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -7682,6 +7817,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:2.20.3, commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + "commander@npm:7, commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" @@ -7703,13 +7845,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 - languageName: node - linkType: hard - "commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -7769,6 +7904,29 @@ __metadata: languageName: node linkType: hard +"compute-gcd@npm:^1.2.1": + version: 1.2.1 + resolution: "compute-gcd@npm:1.2.1" + dependencies: + validate.io-array: "npm:^1.0.3" + validate.io-function: "npm:^1.0.2" + validate.io-integer-array: "npm:^1.0.0" + checksum: 10c0/e72f3485d6ecc0b258f30b3408d9bb8175530ceec91b6b925d094bbc03b4a52e129004009edecd825b9f5b6bd62882485c5c50831673ad29975b6ffcdf1714f4 + languageName: node + linkType: hard + +"compute-lcm@npm:^1.1.2": + version: 1.1.2 + resolution: "compute-lcm@npm:1.1.2" + dependencies: + compute-gcd: "npm:^1.2.1" + validate.io-array: "npm:^1.0.3" + validate.io-function: "npm:^1.0.2" + validate.io-integer-array: "npm:^1.0.0" + checksum: 10c0/3cb5dd4ae367aaf8926e0ac616303e5dac0bde7f6d737e8ff3c1081f99203315898a6112726556a61503ba9ddc25ea570b1dd6d1fe1f50dd86d35b450cef45f8 + languageName: node + linkType: hard + "computeds@npm:^0.0.1": version: 0.0.1 resolution: "computeds@npm:0.0.1" @@ -8986,6 +9144,7 @@ __metadata: clsx: "npm:^2.1.1" d3: "npm:^7.9.0" d3-sankey: "npm:^0.12.3" + docusaurus-plugin-openapi-docs: "npm:^4.3.7" prism-react-renderer: "npm:^2.3.1" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" @@ -9011,6 +9170,34 @@ __metadata: languageName: node linkType: hard +"docusaurus-plugin-openapi-docs@npm:^4.3.7": + version: 4.3.7 + resolution: "docusaurus-plugin-openapi-docs@npm:4.3.7" + dependencies: + "@apidevtools/json-schema-ref-parser": "npm:^11.5.4" + "@redocly/openapi-core": "npm:^1.10.5" + allof-merge: "npm:^0.6.6" + chalk: "npm:^4.1.2" + clsx: "npm:^1.1.1" + fs-extra: "npm:^9.0.1" + json-pointer: "npm:^0.6.2" + json5: "npm:^2.2.3" + lodash: "npm:^4.17.20" + mustache: "npm:^4.2.0" + openapi-to-postmanv2: "npm:^4.21.0" + postman-collection: "npm:^4.4.0" + slugify: "npm:^1.6.5" + swagger2openapi: "npm:^7.0.8" + xml-formatter: "npm:^2.6.1" + peerDependencies: + "@docusaurus/plugin-content-docs": ^3.5.0 + "@docusaurus/utils": ^3.5.0 + "@docusaurus/utils-validation": ^3.5.0 + react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/3427a4c4fbbe0b4452b387d1cab3f7369c181bf50512fe960cf739e7aa32fa912b7b2f2f16fc9a2add1eb831432c5a97ee544e46efa62e70bbffbf8d67a8a37c + languageName: node + linkType: hard + "dom-converter@npm:^0.2.0": version: 0.2.0 resolution: "dom-converter@npm:0.2.0" @@ -9397,7 +9584,7 @@ __metadata: languageName: node linkType: hard -"es6-promise@npm:^3.1.2": +"es6-promise@npm:^3.1.2, es6-promise@npm:^3.2.1": version: 3.3.1 resolution: "es6-promise@npm:3.3.1" checksum: 10c0/b4fc87cb8509c001f62f860f97b05d1fd3f87220c8b832578e6a483c719ca272b73a77f2231cb26395fa865e1cab2fd4298ab67786b69e97b8d757b938f4fc1f @@ -10422,6 +10609,13 @@ __metadata: languageName: node linkType: hard +"fast-safe-stringify@npm:^2.0.7": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: 10c0/d90ec1c963394919828872f21edaa3ad6f1dddd288d2bd4e977027afff09f5db40f94e39536d4646f7e01761d704d72d51dce5af1b93717f3489ef808f5f4e4d + languageName: node + linkType: hard + "fast-uri@npm:^3.0.1": version: 3.0.1 resolution: "fast-uri@npm:3.0.1" @@ -10504,6 +10698,13 @@ __metadata: languageName: node linkType: hard +"file-type@npm:3.9.0": + version: 3.9.0 + resolution: "file-type@npm:3.9.0" + checksum: 10c0/7ae074b350c2300807a99d428600a8ee6b2ace901400898706a20ddc2c43c9abb7e05177ff55ed67a2fd26dfa9b91857b21ec9c0ab3202b9cabebc7e65900240 + languageName: node + linkType: hard + "filesize@npm:^8.0.6": version: 8.0.7 resolution: "filesize@npm:8.0.7" @@ -10630,6 +10831,13 @@ __metadata: languageName: node linkType: hard +"foreach@npm:^2.0.4": + version: 2.0.6 + resolution: "foreach@npm:2.0.6" + checksum: 10c0/dc79f83997ac986dadbc95b4035ce8b86699fb654eb85446b0ad779fe69d567fc9894075e460243ca8bc20adb8fd178ad203aef66dc3c620ac78b18a4cb7059c + languageName: node + linkType: hard + "foreground-child@npm:^3.1.0": version: 3.3.0 resolution: "foreground-child@npm:3.3.0" @@ -10717,7 +10925,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^9.0.0": +"fs-extra@npm:^9.0.0, fs-extra@npm:^9.0.1": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" dependencies: @@ -10824,6 +11032,13 @@ __metadata: languageName: node linkType: hard +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + "get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": version: 2.0.2 resolution: "get-func-name@npm:2.0.2" @@ -11144,6 +11359,15 @@ __metadata: languageName: node linkType: hard +"graphlib@npm:2.1.8": + version: 2.1.8 + resolution: "graphlib@npm:2.1.8" + dependencies: + lodash: "npm:^4.17.15" + checksum: 10c0/41c525e4d91a6d8b4e8da1883bf4e85689a547e908557ccc53f64db9141bdfb351b9162a79f13cae81c5b3a410027f59e4fc1edc1ea442234ec08e629859b188 + languageName: node + linkType: hard + "gray-matter@npm:^4.0.3": version: 4.0.3 resolution: "gray-matter@npm:4.0.3" @@ -11621,6 +11845,20 @@ __metadata: languageName: node linkType: hard +"http-reasons@npm:0.1.0": + version: 0.1.0 + resolution: "http-reasons@npm:0.1.0" + checksum: 10c0/1de8a3b4675eec6ed8730c3051a0e5bd63f930c5bec4df3f59878be2a04f4a9815fc614b1b6f0285f440912334b2b1b2b636d2fbbe38990754bfac5e720b2141 + languageName: node + linkType: hard + +"http2-client@npm:^1.2.5": + version: 1.3.5 + resolution: "http2-client@npm:1.3.5" + checksum: 10c0/4974f10f5c8b5b7b9e23771190471d02690e9a22c22e028d84715b7ecdcda05017fc9e565476558da3bdf0ba642d24186a94818d0b9afee706ccf9874034be73 + languageName: node + linkType: hard + "http2-wrapper@npm:^2.1.10": version: 2.2.1 resolution: "http2-wrapper@npm:2.2.1" @@ -11651,6 +11889,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.5": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -11674,7 +11922,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6, iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -12509,6 +12757,13 @@ __metadata: languageName: node linkType: hard +"js-levenshtein@npm:^1.1.6": + version: 1.1.6 + resolution: "js-levenshtein@npm:1.1.6" + checksum: 10c0/14045735325ea1fd87f434a74b11d8a14380f090f154747e613529c7cff68b5ee607f5230fa40665d5fb6125a3791f4c223f73b9feca754f989b059f5c05864f + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -12523,26 +12778,26 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" + argparse: "npm:^2.0.1" bin: js-yaml: bin/js-yaml.js - checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f languageName: node linkType: hard -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" dependencies: - argparse: "npm:^2.0.1" + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" bin: js-yaml: bin/js-yaml.js - checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b languageName: node linkType: hard @@ -12578,6 +12833,13 @@ __metadata: languageName: node linkType: hard +"json-crawl@npm:^0.5.3": + version: 0.5.3 + resolution: "json-crawl@npm:0.5.3" + checksum: 10c0/3169db8a765da94a6f6303fc997725bc4d1f4c0ca20de34a537f71460d57535019f03928b835a8750b5b2429ca9e373974083d56aecf8c1ee08bf52859081865 + languageName: node + linkType: hard + "json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -12585,6 +12847,35 @@ __metadata: languageName: node linkType: hard +"json-pointer@npm:0.6.2, json-pointer@npm:^0.6.2": + version: 0.6.2 + resolution: "json-pointer@npm:0.6.2" + dependencies: + foreach: "npm:^2.0.4" + checksum: 10c0/47f6103032c0340b3392cb650e0ec817f785eccb553407da13fae85bc535483c9b359d7e756de4ed73130172c28d2b02f8beb53a700a98b12e72c7bf70e734b7 + languageName: node + linkType: hard + +"json-schema-compare@npm:^0.2.2": + version: 0.2.2 + resolution: "json-schema-compare@npm:0.2.2" + dependencies: + lodash: "npm:^4.17.4" + checksum: 10c0/75a5b0f18040d414bb59f3567cf8a3de50419a6cedd5b86eca64f531a8b0bccdeb3f56786c900fd6565c4bab33b5e8a0e922ab0fc836df7de0aab166c3c64a33 + languageName: node + linkType: hard + +"json-schema-merge-allof@npm:0.8.1": + version: 0.8.1 + resolution: "json-schema-merge-allof@npm:0.8.1" + dependencies: + compute-lcm: "npm:^1.1.2" + json-schema-compare: "npm:^0.2.2" + lodash: "npm:^4.17.20" + checksum: 10c0/b8fcc222286d9bfe7873c6fa47369b28cc3986f17eb151d619af41257c4657ad4af6ef9b66c467e837ba8472f0ef2b904bb9901e0cff56bebb11fd457b68acd7 + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -12780,6 +13071,13 @@ __metadata: languageName: node linkType: hard +"liquid-json@npm:0.3.1": + version: 0.3.1 + resolution: "liquid-json@npm:0.3.1" + checksum: 10c0/ce222e9e14891d1153efb2c9d74cc3972cb86dc8cf82d58cbde77fb5f77b66045a3a63c1e89deff12a4d22696143667871d686d45e0db5a5d34f206131600549 + languageName: node + linkType: hard + "loader-runner@npm:^4.2.0": version: 4.3.0 resolution: "loader-runner@npm:4.3.0" @@ -12892,7 +13190,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.15": +"lodash@npm:4.17.21, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -13909,6 +14207,15 @@ __metadata: languageName: node linkType: hard +"mime-format@npm:2.0.1": + version: 2.0.1 + resolution: "mime-format@npm:2.0.1" + dependencies: + charset: "npm:^1.0.0" + checksum: 10c0/f6c0183841c3f48eab9674384270191414112cd334359741fc2c8448ef1e488fe9740cc63dd6bf6eb09ffe5a44a8122ac8e305bc90077afbffea33338944a412 + languageName: node + linkType: hard + "mime-types@npm:2.1.18": version: 2.1.18 resolution: "mime-types@npm:2.1.18" @@ -13918,7 +14225,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:2.1.35, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -14057,6 +14364,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + "minimatch@npm:^8.0.2": version: 8.0.4 resolution: "minimatch@npm:8.0.4" @@ -14337,6 +14653,13 @@ __metadata: languageName: node linkType: hard +"neotraverse@npm:0.6.15": + version: 0.6.15 + resolution: "neotraverse@npm:0.6.15" + checksum: 10c0/44a06fb80e38a4dee9de4458c0e597cdbb6db5be12f54e731c786e41be94d7332cf0ffcf5f635949c4285bf094f9c3b2fceb1cc54fcef0a575283737785d0c9c + languageName: node + linkType: hard + "no-case@npm:^3.0.4": version: 3.0.4 resolution: "no-case@npm:3.0.4" @@ -14359,6 +14682,15 @@ __metadata: languageName: node linkType: hard +"node-fetch-h2@npm:^2.3.0": + version: 2.3.0 + resolution: "node-fetch-h2@npm:2.3.0" + dependencies: + http2-client: "npm:^1.2.5" + checksum: 10c0/10f117c5aa1d475fff05028dddd617a61606083e4d6c4195dd5f5b03c973182e0d125e804771e6888d04f7d92b5c9c27a6149d1beedd6af1e0744f163e8a02d9 + languageName: node + linkType: hard + "node-fetch-native@npm:^1.6.4": version: 1.6.4 resolution: "node-fetch-native@npm:1.6.4" @@ -14366,7 +14698,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -14407,6 +14739,15 @@ __metadata: languageName: node linkType: hard +"node-readfiles@npm:^0.2.0": + version: 0.2.0 + resolution: "node-readfiles@npm:0.2.0" + dependencies: + es6-promise: "npm:^3.2.1" + checksum: 10c0/9de2f741baae29f2422b22ef4399b5f7cb6c20372d4e88447a98d00a92cf1a35efdf942d24eee153a87d885aa7e7442b4bc6de33d4b91c47ba9da501780c76a1 + languageName: node + linkType: hard + "node-releases@npm:^2.0.18": version: 2.0.18 resolution: "node-releases@npm:2.0.18" @@ -14487,6 +14828,80 @@ __metadata: languageName: node linkType: hard +"oas-kit-common@npm:^1.0.8": + version: 1.0.8 + resolution: "oas-kit-common@npm:1.0.8" + dependencies: + fast-safe-stringify: "npm:^2.0.7" + checksum: 10c0/5619a0bd19a07b52af1afeff26e44601002c0fd558d0020fdb720cb3723b60c83b80efede3a62110ce315f15b971751fb46396760e0e507fb8fd412cdc3808dd + languageName: node + linkType: hard + +"oas-linter@npm:^3.2.2": + version: 3.2.2 + resolution: "oas-linter@npm:3.2.2" + dependencies: + "@exodus/schemasafe": "npm:^1.0.0-rc.2" + should: "npm:^13.2.1" + yaml: "npm:^1.10.0" + checksum: 10c0/5a8ea3d8a0bf185b676659d1e1c0b9b50695aeff53ccd5c264c8e99b4a7c0021f802b937913d76f0bc1a6a2b8ae151df764d95302b0829063b9b26f8c436871c + languageName: node + linkType: hard + +"oas-resolver-browser@npm:2.5.6": + version: 2.5.6 + resolution: "oas-resolver-browser@npm:2.5.6" + dependencies: + node-fetch-h2: "npm:^2.3.0" + oas-kit-common: "npm:^1.0.8" + path-browserify: "npm:^1.0.1" + reftools: "npm:^1.1.9" + yaml: "npm:^1.10.0" + yargs: "npm:^17.0.1" + bin: + resolve: resolve.js + checksum: 10c0/62ce600609380eb1a548c8e3c3b9a9e24c2945c94cc7c889733ab09edf51c9cc2d1886910817f740b9e65f769e02b93fdd8f61507412aa2ef853a2e59311aa04 + languageName: node + linkType: hard + +"oas-resolver@npm:^2.5.6": + version: 2.5.6 + resolution: "oas-resolver@npm:2.5.6" + dependencies: + node-fetch-h2: "npm:^2.3.0" + oas-kit-common: "npm:^1.0.8" + reftools: "npm:^1.1.9" + yaml: "npm:^1.10.0" + yargs: "npm:^17.0.1" + bin: + resolve: resolve.js + checksum: 10c0/cfba5ba3f7ea6673a840836cf194a80ba7f77e6d1ee005aa35cc838cad56d7e455fa53753ae7cc38810c96405b8606e675098ea7023639cf546cb10343f180f9 + languageName: node + linkType: hard + +"oas-schema-walker@npm:^1.1.5": + version: 1.1.5 + resolution: "oas-schema-walker@npm:1.1.5" + checksum: 10c0/8ba6bd2a9a8ede2c5574f217653a9e2b889a7c5be69c664a57e293591c58952e8510f4f9e2a82fd5f52491c859ce5c2b68342e9b971e9667f6b811e7fb56fd54 + languageName: node + linkType: hard + +"oas-validator@npm:^5.0.8": + version: 5.0.8 + resolution: "oas-validator@npm:5.0.8" + dependencies: + call-me-maybe: "npm:^1.0.1" + oas-kit-common: "npm:^1.0.8" + oas-linter: "npm:^3.2.2" + oas-resolver: "npm:^2.5.6" + oas-schema-walker: "npm:^1.1.5" + reftools: "npm:^1.1.9" + should: "npm:^13.2.1" + yaml: "npm:^1.10.0" + checksum: 10c0/16bb722042dcba93892c50db2201df6aeea9c3dd60e2f7bc18b36f23c610d136f52a5946908817f6fdd4139219fa4b177f952b9831039078b4c8730fa026b180 + languageName: node + linkType: hard + "object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -14494,7 +14909,7 @@ __metadata: languageName: node linkType: hard -"object-hash@npm:^3.0.0": +"object-hash@npm:3.0.0, object-hash@npm:^3.0.0": version: 3.0.0 resolution: "object-hash@npm:3.0.0" checksum: 10c0/a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 @@ -14643,6 +15058,33 @@ __metadata: languageName: node linkType: hard +"openapi-to-postmanv2@npm:^4.21.0": + version: 4.25.0 + resolution: "openapi-to-postmanv2@npm:4.25.0" + dependencies: + ajv: "npm:8.11.0" + ajv-draft-04: "npm:1.0.0" + ajv-formats: "npm:2.1.1" + async: "npm:3.2.4" + commander: "npm:2.20.3" + graphlib: "npm:2.1.8" + js-yaml: "npm:4.1.0" + json-pointer: "npm:0.6.2" + json-schema-merge-allof: "npm:0.8.1" + lodash: "npm:4.17.21" + neotraverse: "npm:0.6.15" + oas-resolver-browser: "npm:2.5.6" + object-hash: "npm:3.0.0" + path-browserify: "npm:1.0.1" + postman-collection: "npm:^4.4.0" + swagger2openapi: "npm:7.0.8" + yaml: "npm:1.10.2" + bin: + openapi2postmanv2: bin/openapi2postmanv2.js + checksum: 10c0/27023cbac174a48dfa6988b83db7f11f96d77ccd144ad8d2594b24cac69c81ddc55daed493b4c0f17b2036f5f2e2cbd20d35c05733febdb64260f5244b848b7b + languageName: node + linkType: hard + "opener@npm:^1.5.2": version: 1.5.2 resolution: "opener@npm:1.5.2" @@ -14883,7 +15325,7 @@ __metadata: languageName: node linkType: hard -"path-browserify@npm:^1.0.1": +"path-browserify@npm:1.0.1, path-browserify@npm:^1.0.1": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" checksum: 10c0/8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 @@ -15141,6 +15583,13 @@ __metadata: languageName: node linkType: hard +"pluralize@npm:^8.0.0": + version: 8.0.0 + resolution: "pluralize@npm:8.0.0" + checksum: 10c0/2044cfc34b2e8c88b73379ea4a36fc577db04f651c2909041b054c981cd863dd5373ebd030123ab058d194ae615d3a97cfdac653991e499d10caf592e8b3dc33 + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" @@ -15780,6 +16229,34 @@ __metadata: languageName: node linkType: hard +"postman-collection@npm:^4.4.0": + version: 4.5.0 + resolution: "postman-collection@npm:4.5.0" + dependencies: + "@faker-js/faker": "npm:5.5.3" + file-type: "npm:3.9.0" + http-reasons: "npm:0.1.0" + iconv-lite: "npm:0.6.3" + liquid-json: "npm:0.3.1" + lodash: "npm:4.17.21" + mime-format: "npm:2.0.1" + mime-types: "npm:2.1.35" + postman-url-encoder: "npm:3.0.5" + semver: "npm:7.6.3" + uuid: "npm:8.3.2" + checksum: 10c0/94708eeadd37d9713c7dbbc53e74133db9414f1fcc9f217e8e0e3d98f86d5b6ec6de4f8f24c2cabd1474811c81c6ace83a49d1d7e0a4b8280adc29dd0a8c8cac + languageName: node + linkType: hard + +"postman-url-encoder@npm:3.0.5": + version: 3.0.5 + resolution: "postman-url-encoder@npm:3.0.5" + dependencies: + punycode: "npm:^2.1.1" + checksum: 10c0/b7d389c1e7edd27e3992685caf0443fde6f47c92cb26fd9536fccbdf4f3a8bb4e723940c6fcb63eb69db72221f472143b3db3b4c28d4e0588d766f1668624b4d + languageName: node + linkType: hard + "preact@npm:^10.13.2": version: 10.23.1 resolution: "preact@npm:10.23.1" @@ -15975,7 +16452,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -16397,6 +16874,13 @@ __metadata: languageName: node linkType: hard +"reftools@npm:^1.1.9": + version: 1.1.9 + resolution: "reftools@npm:1.1.9" + checksum: 10c0/4b44c9e75d6e5328b43b974de08776ee1718a0b48f24e033b2699f872cc9a698234a4aa0553b9e1a766b828aeb9834e4aa988410f0279e86179edb33b270da6c + languageName: node + linkType: hard + "regenerate-unicode-properties@npm:^10.1.0": version: 10.1.1 resolution: "regenerate-unicode-properties@npm:10.1.1" @@ -16619,6 +17103,13 @@ __metadata: languageName: node linkType: hard +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -17154,21 +17645,21 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" +"semver@npm:7.6.3, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2": + version: 7.6.3 + resolution: "semver@npm:7.6.3" bin: semver: bin/semver.js - checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2": - version: 7.6.3 - resolution: "semver@npm:7.6.3" +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js - checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d languageName: node linkType: hard @@ -17369,6 +17860,62 @@ __metadata: languageName: node linkType: hard +"should-equal@npm:^2.0.0": + version: 2.0.0 + resolution: "should-equal@npm:2.0.0" + dependencies: + should-type: "npm:^1.4.0" + checksum: 10c0/b375e1da2586671e2b9442ac5b700af508f56438af9923f69123b1fe4e02ccddc9a8a3eb803447a6df91e616cec236c41d6f28fdaa100467f9fdb81651089538 + languageName: node + linkType: hard + +"should-format@npm:^3.0.3": + version: 3.0.3 + resolution: "should-format@npm:3.0.3" + dependencies: + should-type: "npm:^1.3.0" + should-type-adaptors: "npm:^1.0.1" + checksum: 10c0/ef2a31148d79a3fabd0dc6c1c1b10f90d9e071ad8e1f99452bd01e8aceaca62985b43974cf8103185fa1a3ade85947c6f664e44ca9af253afd1ce93c223bd8e4 + languageName: node + linkType: hard + +"should-type-adaptors@npm:^1.0.1": + version: 1.1.0 + resolution: "should-type-adaptors@npm:1.1.0" + dependencies: + should-type: "npm:^1.3.0" + should-util: "npm:^1.0.0" + checksum: 10c0/cf127f8807f69ace9db04dbec3f274330a854405feef9821b5fa525748961da65747869cca36c813132b98757bd3e42d53541579cb16630ccf3c0dd9c0082320 + languageName: node + linkType: hard + +"should-type@npm:^1.3.0, should-type@npm:^1.4.0": + version: 1.4.0 + resolution: "should-type@npm:1.4.0" + checksum: 10c0/50cb50d776ee117b151068367c09ec12ac8e6f5fe2bd4d167413972813f06e930fe8624232a56c335846d3afcb784455f9a9690baa4350b3919bd001f0c4c94b + languageName: node + linkType: hard + +"should-util@npm:^1.0.0": + version: 1.0.1 + resolution: "should-util@npm:1.0.1" + checksum: 10c0/1790719e05eae9edae86e44cbbad98529bd333df3f7cdfd63ea80acb6af718990e70abbc173aa9ccb93fff5ab6ee08d38412d707ff4003840be2256a278a61f3 + languageName: node + linkType: hard + +"should@npm:^13.2.1": + version: 13.2.3 + resolution: "should@npm:13.2.3" + dependencies: + should-equal: "npm:^2.0.0" + should-format: "npm:^3.0.3" + should-type: "npm:^1.4.0" + should-type-adaptors: "npm:^1.0.1" + should-util: "npm:^1.0.0" + checksum: 10c0/99581d8615f6fb27cd23c9f431cfacef58d118a90d0cccf58775b90631a47441397cfbdcbe6379e2718e9e60f293e3dfc0e87857f4b5a36fe962814e46ab05fa + languageName: node + linkType: hard + "side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": version: 1.0.6 resolution: "side-channel@npm:1.0.6" @@ -17457,6 +18004,13 @@ __metadata: languageName: node linkType: hard +"slugify@npm:^1.6.5": + version: 1.6.6 + resolution: "slugify@npm:1.6.6" + checksum: 10c0/e7e63f08f389a371d6228bc19d64ec84360bf0a538333446cc49dbbf3971751a6d180d2f31551188dd007a65ca771e69f574e0283290a7825a818e90b75ef44d + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -17711,7 +18265,7 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -18150,6 +18704,29 @@ __metadata: languageName: node linkType: hard +"swagger2openapi@npm:7.0.8, swagger2openapi@npm:^7.0.8": + version: 7.0.8 + resolution: "swagger2openapi@npm:7.0.8" + dependencies: + call-me-maybe: "npm:^1.0.1" + node-fetch: "npm:^2.6.1" + node-fetch-h2: "npm:^2.3.0" + node-readfiles: "npm:^0.2.0" + oas-kit-common: "npm:^1.0.8" + oas-resolver: "npm:^2.5.6" + oas-schema-walker: "npm:^1.1.5" + oas-validator: "npm:^5.0.8" + reftools: "npm:^1.1.9" + yaml: "npm:^1.10.0" + yargs: "npm:^17.0.1" + bin: + boast: boast.js + oas-validate: oas-validate.js + swagger2openapi: swagger2openapi.js + checksum: 10c0/441a4d3a7d353f99395b14a0c8d6124be6390f2f8aa53336905e7314a7f80b66f5f2a40ac0dc2dbe2f7bc01f52a223a94f54a2ece345095fd3ad8ae8b03d688b + languageName: node + linkType: hard + "synckit@npm:^0.9.1": version: 0.9.1 resolution: "synckit@npm:0.9.1" @@ -18604,11 +19181,11 @@ __metadata: "typescript@patch:typescript@npm%3A^5.5.3#optional!builtin": version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=379a07" + resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/e6c1662e4852e22fe4bbdca471dca3e3edc74f6f1df043135c44a18a7902037023ccb0abdfb754595ca9028df8920f2f8492c00fc3cbb4309079aae8b7de71cd + checksum: 10c0/94eb47e130d3edd964b76da85975601dcb3604b0c848a36f63ac448d0104e93819d94c8bdf6b07c00120f2ce9c05256b8b6092d23cf5cf1c6fa911159e4d572f languageName: node linkType: hard @@ -18894,6 +19471,13 @@ __metadata: languageName: node linkType: hard +"uri-js-replace@npm:^1.0.1": + version: 1.0.1 + resolution: "uri-js-replace@npm:1.0.1" + checksum: 10c0/0be6c972c84c316e29667628ce7b4ce4de7fc77cec9a514f70c4a3336eea8d1d783c71c9988ac5da333f0f6a85a04a7ae05a3c4aa43af6cd07b7a4d85c8d9f11 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -18961,7 +19545,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^8.3.2": +"uuid@npm:8.3.2, uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" bin: @@ -18970,6 +19554,46 @@ __metadata: languageName: node linkType: hard +"validate.io-array@npm:^1.0.3": + version: 1.0.6 + resolution: "validate.io-array@npm:1.0.6" + checksum: 10c0/ece1e93d24fe1c92f5ec5983e186f7890021c9144c2ad0e45d76695267861e9ad0362474a038a240caf3ab30f7b7595738c7f6efe9f6f0f9ae94290d23c39ef6 + languageName: node + linkType: hard + +"validate.io-function@npm:^1.0.2": + version: 1.0.2 + resolution: "validate.io-function@npm:1.0.2" + checksum: 10c0/210b4bbf8c71c7863df122beae76387406eb960a6540b003568dcde2bbb4baac17a2c8f0eda014f0c5d2440396e87141e62028cc8758ddc61589e3425bd26c27 + languageName: node + linkType: hard + +"validate.io-integer-array@npm:^1.0.0": + version: 1.0.0 + resolution: "validate.io-integer-array@npm:1.0.0" + dependencies: + validate.io-array: "npm:^1.0.3" + validate.io-integer: "npm:^1.0.4" + checksum: 10c0/10231e41b862d17749d9dda996165d36c949409980545133a66f94d30c057cecc6bb75356f1cafa18ae84051bff7c560ec50be5bd20266cd4dd21615c063397a + languageName: node + linkType: hard + +"validate.io-integer@npm:^1.0.4": + version: 1.0.5 + resolution: "validate.io-integer@npm:1.0.5" + dependencies: + validate.io-number: "npm:^1.0.3" + checksum: 10c0/c1e85c0fa3edbbca55e7ac423ca037864960711f673f118072965557de4ba503d686676f73746bfca1a3d418ee92e00fea21e74788cec4a557832fc3fde27333 + languageName: node + linkType: hard + +"validate.io-number@npm:^1.0.3": + version: 1.0.3 + resolution: "validate.io-number@npm:1.0.3" + checksum: 10c0/fdc016a4eeb255529001dd4210a717f84d2fe4a9cddbb9e3df5c402d046eef74e1b42cae390a4943ad3328c58096794b5013888a2315eed0ac5cf6c5e8340ef3 + languageName: node + linkType: hard + "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -19986,7 +20610,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -20079,6 +20703,15 @@ __metadata: languageName: node linkType: hard +"xml-formatter@npm:^2.6.1": + version: 2.6.1 + resolution: "xml-formatter@npm:2.6.1" + dependencies: + xml-parser-xo: "npm:^3.2.0" + checksum: 10c0/97af94786f14d295eb74d5062e311f6c7b351d7b2b11c76d275eeb5197d98450bd0197de51dda9fbd6f03fbd23432e535fd13e8780a207cb1158a3d987bf02e5 + languageName: node + linkType: hard + "xml-js@npm:^1.6.11": version: 1.6.11 resolution: "xml-js@npm:1.6.11" @@ -20090,6 +20723,13 @@ __metadata: languageName: node linkType: hard +"xml-parser-xo@npm:^3.2.0": + version: 3.2.0 + resolution: "xml-parser-xo@npm:3.2.0" + checksum: 10c0/33101bc707eeccda575f2df2de20d9b01513467c16c53e9f87205ab4bcc800586f1080cf37550b681b9c123b4a7778dcdb324989782c2a6c6698ae5ab623be84 + languageName: node + linkType: hard + "xtend@npm:^4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -20104,6 +20744,13 @@ __metadata: languageName: node linkType: hard +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -20118,7 +20765,14 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^1.10.2, yaml@npm:^1.7.2": +"yaml-ast-parser@npm:0.0.43": + version: 0.0.43 + resolution: "yaml-ast-parser@npm:0.0.43" + checksum: 10c0/4d2f1e761067b2c6abdd882279a406f879258787af470a6d4a659cb79cb2ab056b870b25f1f80f46ed556e8b499d611d247806376f53edf3412f72c0a8ea2e98 + languageName: node + linkType: hard + +"yaml@npm:1.10.2, yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f @@ -20134,6 +20788,28 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.0.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" From aa9694cfbe6bed4325d50df86dfc9f8ed3e9e243 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Mon, 14 Apr 2025 15:05:05 +0100 Subject: [PATCH 04/38] docs v2 update --- docs/docs/01-introduction/01-introduction.md | 7 + .../docs/01-introduction/02-sprinter-stash.md | 81 -- .../docs/01-introduction/03-sprinter-solve.md | 78 -- .../01-introduction/04-supported-networks.md | 29 - docs/docs/02-Stash/01-utilizing-stash.md | 38 + docs/docs/02-Stash/02-stash-api.md | 26 + docs/docs/02-Stash/index.md | 84 ++ docs/docs/02-quick-start.md | 104 --- docs/docs/03-Solve/02-use-solve.md | 27 + docs/docs/03-Solve/03-solve-api.md | 11 + docs/docs/03-Solve/03-solve-api/index.md | 10 + docs/docs/03-Solve/index.md | 36 + docs/docs/03-sdk/02-installation.md | 72 -- docs/docs/03-sdk/03-configuration.md | 88 -- .../04-methods-reference/_category_.json | 3 - .../03-sdk/04-methods-reference/_gas-tip.md | 3 - .../04-methods-reference/_how-to-calldata.md | 136 --- .../04-methods-reference/_how-to-gas-limit.md | 160 ---- .../general/_category_.json | 6 - .../general/getAvailableChains.md | 99 --- .../general/getAvailableTokens.md | 80 -- .../general/getUserBalances.md | 117 --- .../pool-asset-on-destination/_category_.json | 6 - .../poolAssetOnDestination.md | 149 ---- .../poolAssetOnDestinationWithHook.md | 260 ------ .../transfer/_category_.json | 6 - .../04-methods-reference/transfer/sweep.md | 141 ---- .../transfer/transferWithHook.md | 255 ------ .../transfer/transfer_method.md | 148 ---- docs/docs/03-sdk/index.md | 24 - docs/docs/04-liquidityhubpools copy.md | 40 + docs/docs/04-react-sdk/02-installation.md | 56 -- docs/docs/04-react-sdk/03-using-hooks.md | 151 ---- .../04-methods-reference/_category_.json | 4 - .../useSprinterBalances.md | 82 -- .../04-methods-reference/useSprinterChains.md | 105 --- .../04-methods-reference/useSprinterTokens.md | 92 --- .../useSprinterTransfers.md | 106 --- docs/docs/04-react-sdk/index.md | 24 - docs/docs/05-breaking-changes.md | 326 -------- docs/docs/05-sprnt.md | 40 + docs/docs/06-fees.md | 59 ++ docs/docs/07-governance.md | 46 ++ docs/docs/08-partnerships.md | 22 + docs/docs/09-Resources.md | 10 + docs/docusaurus.config.ts | 35 +- docs/package.json | 5 +- docs/src/components/SwaggerUI.jsx | 32 + docs/src/css/custom.css | 22 + docs/static/api/solve-openapi.yaml | 18 +- docs/static/api/stash-openapi.yaml | 773 +++++------------- yarn.lock | 343 +++++++- 52 files changed, 1073 insertions(+), 3602 deletions(-) delete mode 100644 docs/docs/01-introduction/02-sprinter-stash.md delete mode 100644 docs/docs/01-introduction/03-sprinter-solve.md delete mode 100644 docs/docs/01-introduction/04-supported-networks.md create mode 100644 docs/docs/02-Stash/01-utilizing-stash.md create mode 100644 docs/docs/02-Stash/02-stash-api.md create mode 100644 docs/docs/02-Stash/index.md delete mode 100644 docs/docs/02-quick-start.md create mode 100644 docs/docs/03-Solve/02-use-solve.md create mode 100644 docs/docs/03-Solve/03-solve-api.md create mode 100644 docs/docs/03-Solve/03-solve-api/index.md create mode 100644 docs/docs/03-Solve/index.md delete mode 100644 docs/docs/03-sdk/02-installation.md delete mode 100644 docs/docs/03-sdk/03-configuration.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/_category_.json delete mode 100644 docs/docs/03-sdk/04-methods-reference/_gas-tip.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/_how-to-calldata.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/_how-to-gas-limit.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/general/_category_.json delete mode 100644 docs/docs/03-sdk/04-methods-reference/general/getAvailableChains.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/general/getAvailableTokens.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/general/getUserBalances.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/_category_.json delete mode 100644 docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/poolAssetOnDestination.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/poolAssetOnDestinationWithHook.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/transfer/_category_.json delete mode 100644 docs/docs/03-sdk/04-methods-reference/transfer/sweep.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/transfer/transferWithHook.md delete mode 100644 docs/docs/03-sdk/04-methods-reference/transfer/transfer_method.md delete mode 100644 docs/docs/03-sdk/index.md create mode 100644 docs/docs/04-liquidityhubpools copy.md delete mode 100644 docs/docs/04-react-sdk/02-installation.md delete mode 100644 docs/docs/04-react-sdk/03-using-hooks.md delete mode 100644 docs/docs/04-react-sdk/04-methods-reference/_category_.json delete mode 100644 docs/docs/04-react-sdk/04-methods-reference/useSprinterBalances.md delete mode 100644 docs/docs/04-react-sdk/04-methods-reference/useSprinterChains.md delete mode 100644 docs/docs/04-react-sdk/04-methods-reference/useSprinterTokens.md delete mode 100644 docs/docs/04-react-sdk/04-methods-reference/useSprinterTransfers.md delete mode 100644 docs/docs/04-react-sdk/index.md delete mode 100644 docs/docs/05-breaking-changes.md create mode 100644 docs/docs/05-sprnt.md create mode 100644 docs/docs/06-fees.md create mode 100644 docs/docs/07-governance.md create mode 100644 docs/docs/08-partnerships.md create mode 100644 docs/docs/09-Resources.md create mode 100644 docs/src/components/SwaggerUI.jsx diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index d3e65ba..aa9b3c4 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -27,3 +27,10 @@ A solving-as-a-service platform that offers a request-for-quote (RFQ) based swap ### Need to Chat to us? If you have questions about Sprinter, the code, the docs, or have a partnership inquiry, please reach out to us on [Telegram](https://t.me/sprinter_tech/1) or via email at [hello@sprinter.tech](mailto:hello@sprinter.tech). + +### Join our Community + +- **Telegram:** [t.me/sprinter_tech](https://t.me/sprinter_tech) +- **Twitter:** [@sprinter_ux](https://twitter.com/sprinter_ux) +- **Website:** [Sprinter.tech](https://sprinter.tech) +- **Stash:** [Stash dApp](https://app.sprinter.tech) diff --git a/docs/docs/01-introduction/02-sprinter-stash.md b/docs/docs/01-introduction/02-sprinter-stash.md deleted file mode 100644 index d8400b7..0000000 --- a/docs/docs/01-introduction/02-sprinter-stash.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -id: sprinter-stash -title: Sprinter Stash -sidebar_position: 2 ---- - -# Sprinter Stash - -Sprinter Stash is a cross-chain credit liquidity protocol that uses a just-in-time liquidity management system to efficiently allocate funds across multiple blockchains. - -## How Sprinter Stash Works - -- **Liquidity Providers** deposit USDC on Base into the protocol’s liquidity hub and receive `spUSDC-LP` tokens in return. -- **Liquidity Management** is dynamic—funds are allocated across supported chains based on solver demand. -- **Solvers** borrow liquidity instantly, without collateral, enabling seamless cross-chain execution. -- After fills are completed, the Stash receives funds on the source chain, repays the credit, and distributes profits to LPs and solvers. - -## Stash Rewards - -- **LPs earn dynamic rewards**: - - Base APY from supply on lending protocols (e.g., Aave) - - SPRNT staking rewards with multiplier boosts for longer locks - - Earlybird incentives - -Sprinter Stash is powered by **Sprinter Solve**. - -## Features & Utility - -### For Solvers - -- Reduce capital requirements by borrowing liquidity on demand. -- Eliminate need to manage inventory across chains. -- Improve execution efficiency with shared liquidity access. - -### For LPs - -- Earn passive yield and solver-generated fees. -- Participate in liquidity mining campaigns for SPRNT rewards. -- Benefit from protocol-managed inventory strategies. - -## Utilizing Sprinter Stash - -### As a Liquidity Provider - -1. Visit [app.sprinter.tech](https://app.sprinter.tech) -2. Connect your wallet (e.g., MetaMask) -3. Deposit USDC and stake LP tokens -4. Monitor rewards, pool stats, or withdraw liquidity - -### As a Solver - -1. Request API access via [Google Form](#) -2. Review API Docs -3. Query borrow rates -4. Borrow funds and execute swaps -5. Repay liquidity post-transaction - -## Stash API Endpoints - -```ts -// Example Endpoints (see Swagger for full list) - -GET / v1 / liquidity / protocol / { protocol } / deposit / { txHash } / request; -GET / v1 / liquidity / protocol / { protocol } / type / { type } / quote; -``` - -➡️ _To integrate Swagger: use `@theme/ApiDoc` component or embed link to OpenAPI spec._ - -## Supported Networks - -- Arbitrum -- Optimism -- Base -- Ethereum Mainnet (coming soon) - -## Supported Assets - -- Stablecoins: USDC, DAI, USDT -- Blue-Chip: WETH, WBTC - -Want to request support for a new chain or asset? [Submit a request](#). diff --git a/docs/docs/01-introduction/03-sprinter-solve.md b/docs/docs/01-introduction/03-sprinter-solve.md deleted file mode 100644 index 57e8834..0000000 --- a/docs/docs/01-introduction/03-sprinter-solve.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: solve -title: Sprinter Solve -sidebar_position: 3 ---- - -# Sprinter Solve - -Sprinter Solve enables efficient execution of intent-based swaps through an RFQ-based Swap API. It’s powered by the Sprinter Solver, built on top of Project Blanc. - -## Key Benefits - -- **Best Price:** Finds optimal routes and prices with MEV protection and low slippage. -- **Fast Integration:** Dedicated API that can be integrated in hours. -- **Cross-chain Liquidity:** Leverages Sprinter Stash for real-time liquidity allocation. -- **Zero Collateral:** Solvers execute transactions without upfront capital. -- **Support:** 24/7 support with flexible SLAs. - ---- - -## Features & Utility - -### For dApps & Wallets - -- Seamless swap and bridge execution -- Better UX with reliable pricing - -### For Intent-Based Protocols - -- Competitive solver participation -- Access solver liquidity via unified API - -### For Solvers - -- Compete for fills and maximize returns -- Access credit without holding capital -- Simplify operations with automation - ---- - -## Getting Started - -### Accessing the Solve API - -- **Mainnet:** `https://swaps.sprinter.tech/mainnet` -- **Base:** `https://swaps.sprinter.tech/base` - -### Authentication - -All requests must include: - -```http -X-API-Key: -``` - -### Basic Usage Flow - -1. Request API key via [Google Form](#) -2. Call `/v2/route` to get quote + execution data -3. Send transaction using `swap_call_data` - ---- - -## Limitations - -- Supported networks: Ethereum, Base -- Rate limit: ~25 req/s per client (contact us to raise) -- No on-chain simulation (must simulate client-side) - ---- - -## Solver API Endpoints - -```ts -// Reference: https://github.com/sprintertech/ass/blob/dev/swap/docs/openapi.yml - -GET / v2 / route; -``` diff --git a/docs/docs/01-introduction/04-supported-networks.md b/docs/docs/01-introduction/04-supported-networks.md deleted file mode 100644 index cf58ad5..0000000 --- a/docs/docs/01-introduction/04-supported-networks.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -id: supported -title: Supported Bridges And Networks -sidebar_position: 4 ---- - -import SupportedList from '@site/src/components/SupportedList'; - -:::tip -New routes, networks, and tokens can readily be added by the Sprinter team. Please reach out at [requests@buildwithsygma.com](mailto:requests@buildwithsygma.com) to get a conversation started. -::: - -### Supported Bridges - -- [LI.FI](https://li.fi/) -- [Across](https://across.to/) -- [Relay](https://relay.link/) - -### Supported Networks and Tokens - -:::note -Test networks and main networks have different API endpoints. Make sure to use the correct one based on your needs. -::: - -:::tip -Hover over network icon or token to show available routes -::: - - diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md new file mode 100644 index 0000000..b5ce118 --- /dev/null +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -0,0 +1,38 @@ +--- +id: use-stash +title: Utilizing Stash +sidebar_position: 1 +--- + +:::tip +There are two main ways to utilize Sprinter Stash. Either as a Liquidity Provider or as a Solver. +::: + +### As a Liquidity Provider + +1. Visit [app.sprinter.tech](https://app.sprinter.tech) +2. Connect your wallet (e.g., MetaMask) +3. Deposit USDC and stake LP tokens +4. Monitor rewards, pool stats, unstake or withdraw liquidity + +### As a Solver + +1. Request API access via [Google Form](https://forms.gle/kgpcQK722Ley2gke7) +2. Review [Stash API](stashApi) or visit the [Stash Swagger](https://api.test.sprinter.buildwithsygma.com/swagger/index.html#/Liquidity/get_liquidity_protocol__protocol__deposit__txHash__request) +3. Query borrow rates +4. Borrow funds and execute swaps +5. Repay liquidity post-transaction + +### Supported Networks + +- Arbitrum +- Optimism +- Base +- Ethereum Mainnet (coming soon) + +### Supported Assets + +- Stablecoins: USDC, DAI, USDT +- Blue-Chip: WETH, WBTC + +Want to request support for a new chain or asset? [Submit a request](https://forms.gle/an5vZrmyDkyYR8Ni7). diff --git a/docs/docs/02-Stash/02-stash-api.md b/docs/docs/02-Stash/02-stash-api.md new file mode 100644 index 0000000..99c4c84 --- /dev/null +++ b/docs/docs/02-Stash/02-stash-api.md @@ -0,0 +1,26 @@ +--- +id: StashAPI +title: Stash API Endpoints +hide_table_of_contents: true +sidebar_position: 3 +--- + +:::tip +You can also visit the [Stash swagger](https://api.sprinter.buildwithsygma.com/swagger/index.html#/Liquidity/get_liquidity_protocol__protocol__deposit__txHash__request) directly +::: + +GET +`/liquidity/protocol/{protocol}/deposit/{txHash}/request` + +→ Get the borrow cost for a liquidity transaction + +GET +`/liquidity/protocol/{protocol}/type/{type}/quote` + +→ Get the borrow quote for a liquidity transaction based on the input data + +--- + +import SwaggerUI from '@site/src/components/SwaggerUI'; + + diff --git a/docs/docs/02-Stash/index.md b/docs/docs/02-Stash/index.md new file mode 100644 index 0000000..f7109bf --- /dev/null +++ b/docs/docs/02-Stash/index.md @@ -0,0 +1,84 @@ +--- +id: Stash +title: Sprinter Stash +sidebar_position: 3 +--- + +# Sprinter Stash + +Sprinter Stash is a cross-chain credit liquidity protocol that uses a just-in-time liquidity management system to efficiently allocate funds across multiple blockchains. + +## How Sprinter Stash Works + +- **Liquidity Providers** deposit USDC on Base into the protocol’s liquidity hub and receive `spUSDC-LP` tokens in return. +- **Liquidity Management** is dynamic—funds are allocated across supported chains based on solver demand. +- **Solvers** borrow liquidity instantly, without collateral, enabling seamless cross-chain execution. +- After fills are completed, the Stash receives funds on the source chain, repays the credit, and distributes profits to LPs and solvers. + +## Stash Rewards + +- **LPs earn dynamic rewards**: + - Base APY from supply on lending protocols (e.g., Aave) + - SPRNT staking rewards with multiplier boosts for longer locks + - Earlybird incentives + +Sprinter Stash is powered by **Sprinter Solve**. + +## Features & Utility + +### For Solvers + +- Reduce capital requirements by borrowing liquidity on demand. +- Eliminate need to manage inventory across chains. +- Improve execution efficiency with shared liquidity access. + +### For LPs + +- Earn passive yield and solver-generated fees. +- Participate in liquidity mining campaigns for SPRNT rewards. +- Benefit from protocol-managed inventory strategies. + +## How Sprinter Enables Zero-Collateral Loans + +Sprinter Stash enables solvers to borrow liquidity with near zero collateral, and achieves this through a series of mechanisms below: + +#### 1. Approved Solvers + +On launch only approved solvers can access Stash credit. These solvers: + +- Undergo screening and onboarding by the Sprinter team +- Must use authenticated API keys tied to their accounts +- Are rate-limited and monitored to ensure responsible usage + +Sprinter also tracks solver performance and creditworthiness over time. Solvers who consistently repay on time may be granted higher limits, while misbehavior results in penalties or revoked access with both informed through regular reviews of: + +- Fill accuracy and repayment behavior +- Volume solved and protocols interacted with +- On-chain and off-chain repayment events + +#### 2. Transaction-Level Guarantees + +Each fill is validated against the user’s original intent using: + +- Verified source deposits (e.g. via Across) +- MPC-signed authorization signatures +- Controlled function execution (via calldata) + +Sprinter acts as an intermediary: the solver never touches user funds directly. The system ensures that repayment is guaranteed by the user's transaction on the source chain before the solver receives liquidity. + +#### 3. Protocol Guardrails & Limits + +Sprinter enforces: + +- Per-solver daily limits (to minimize exposure) +- Per-transaction liquidity caps +- Circuit breakers triggered by irregular repayment behavior +- Slashing (or bond requirements) for higher-risk integrations + +#### 4. Future Safety Module Activation + +Sprinter will in future, activate the Sprinter Stash Safety Module (STSM) which incentivizes solvers to stake SPRNT tokens as a safeguard against potential liquidity shortfalls (eg reorgs or defaults) or protocol insolvencies, essentially providing a security backstop to the protocol. + +#### 5. Bonding Pools + +Sprinter will also allow Solver Operators to create Bonding Pools, that escrow funds to vouch for their solvers, enabling more favourable borrowing conditions. Sprinter Bonding Pools will be controlled by governance and similarly allow slashing by governance for any malicious activity or violations. diff --git a/docs/docs/02-quick-start.md b/docs/docs/02-quick-start.md deleted file mode 100644 index 29b6033..0000000 --- a/docs/docs/02-quick-start.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -id: quickstart -title: Quick Start -sidebar_position: 2 ---- - -## Quick Examples - -Jump to the section that fits your development needs: - -- [Using the SDK](#using-the-sdk) -- [Using the React SDK](#using-the-react-sdk) -- [Calling API Endpoints Directly](#calling-api-endpoints-directly) - -You have three main options for interacting with Sprinter, depending on your development environment and the level of control you need: - -- **Using the SDK**: Ideal for developers working in TypeScript or modern JavaScript frameworks. The SDK provides a simple, unified interface for retrieving intent-based solutions from Sprinter, helping developers easily determine the actions or transactions users should execute on the blockchain. - -- **Using the React SDK**: Designed for React developers, this option offers hooks and context that make it simple to access intent-based solutions provided by Sprinter within React components, allowing seamless interaction with the intent engine. - -- **Calling API Endpoints Directly**: This option is best suited for developers who want full control over API interactions. It’s flexible and can be used in any programming environment, but requires a deeper understanding of the Sprinter protocol. We recommend this for advanced users or those working in non-JavaScript environments. - -### Using the SDK - -The Sprinter SDK provides a streamlined interface for retrieving intent-based solutions from Sprinter, with built-in TypeScript support to ensure type safety and an enhanced development experience. This approach is recommended for developers who are comfortable with TypeScript or those working in modern web frameworks. - -**Quick Example** - -Here’s a quick example of how to use the SDK in your project: - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -sprinter.getUserBalances("0xYourAddressHere").then(console.log); -``` - -For more details on using the SDK, refer to the [SDK Documentation](./sdk). - -### Using the React SDK - -If you're building a React application, you can use the Sprinter React SDK (`@chainsafe/sprinter-react`), which provides hooks and context to interact with the Sprinter core SDK. - -**Quick Example** - -Here’s how to set up a simple React component to fetch user balances: - -```tsx -import React, { useEffect } from "react"; -import { SprinterContext, useSprinterBalances } from "@chainsafe/sprinter-react"; -import { Environment } from "@chainsafe/sprinter-sdk"; - -function BalancesComponent() { - const { balances, getUserBalances } = useSprinterBalances("0xYourAddressHere"); - - useEffect(() => { - getUserBalances(); - }, [getUserBalances]); - - if (balances.loading) return
Loading...
; - if (balances.error) return
Error: {balances.error}
; - - return ( -
    - {Object.entries(balances.data || {}).map(([symbol, balanceEntry]) => ( -
  • - {symbol}: {balanceEntry.total} -
  • - ))} -
- ); -} - -function App() { - return ( - - - - ); -} - -export default App; -``` - -For detailed usage, check the [React SDK Documentation](./react-sdk). - -### Calling API Endpoints Directly - -This approach provides more control over how you interact with the API but is generally suited for advanced users or developers working in non-JavaScript environments. - -:::caution For Advanced Users -Calling the API directly provides the most flexibility but requires a deeper understanding of the Sprinter protocol and how to structure API requests. It's recommended for experienced developers who need full control over API interactions. -::: - -**Quick Example** - -Here’s how you can call the API directly using `curl`: - -```bash -curl -X GET "https://api.sprinter.buildwithsygma.com/accounts/0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519/assets/fungible/USDC" -``` - -For a comprehensive list of available endpoints and how to use them, check out the [API Documentation](https://api.sprinter.buildwithsygma.com/swagger/index.html). diff --git a/docs/docs/03-Solve/02-use-solve.md b/docs/docs/03-Solve/02-use-solve.md new file mode 100644 index 0000000..bdced37 --- /dev/null +++ b/docs/docs/03-Solve/02-use-solve.md @@ -0,0 +1,27 @@ +--- +id: solvestart +title: Utilizing Solve +sidebar_position: 2 +--- + +## Getting Started + +### Accessing the Solve API + +- **Mainnet:** `https://swaps.sprinter.tech/mainnet` +- **Base:** `https://swaps.sprinter.tech/base` + +### Authentication + +All requests must include: + +```http +X-API-Key: +``` + +### Basic Usage Flow + +1. Request an API key via the [Sprinter Solve Request Form](https://forms.gle/TCAUwcYqguQbWi3bA) +2. Review [Solve API](solveapi) +3. Call `/v2/route` to get quote + execution data +4. Send transaction using `swap_call_data` diff --git a/docs/docs/03-Solve/03-solve-api.md b/docs/docs/03-Solve/03-solve-api.md new file mode 100644 index 0000000..01c655d --- /dev/null +++ b/docs/docs/03-Solve/03-solve-api.md @@ -0,0 +1,11 @@ +--- +id: solveapi +title: Solve API Endpoints +sidebar_position: 4 +--- + +## Solver API Endpoints + +import SwaggerUI from '@site/src/components/SwaggerUI'; + + diff --git a/docs/docs/03-Solve/03-solve-api/index.md b/docs/docs/03-Solve/03-solve-api/index.md new file mode 100644 index 0000000..a17ee91 --- /dev/null +++ b/docs/docs/03-Solve/03-solve-api/index.md @@ -0,0 +1,10 @@ +--- +id: solveapi +title: Solve API Endpoints +hide_table_of_contents: true +sidebar_position: 4 +--- + +import SwaggerUI from '@site/src/components/SwaggerUI'; + + diff --git a/docs/docs/03-Solve/index.md b/docs/docs/03-Solve/index.md new file mode 100644 index 0000000..6e308b5 --- /dev/null +++ b/docs/docs/03-Solve/index.md @@ -0,0 +1,36 @@ +--- +id: solveapi +title: Sprinter Solve +sidebar_position: 4 +--- + +# Sprinter Solve + +Sprinter Solve enables the efficient execution of intent-based Swaps through its Solve API (RFQ and Swap), powered by the Sprinter Solver, built on top of the Project Blanc solver. It provides: + +- **Best Price:** Finds optimal routes and prices with MEV protection and low slippage. +- **Fast Integration:** Dedicated API that can be integrated in hours. +- **Cross-chain Liquidity:** Leverages Sprinter Stash for real-time liquidity allocation. +- **Zero Collateral:** Solvers execute transactions without upfront capital. +- **Support:** 24/7 support with flexible SLAs. + +## Key Features & Utility + +### For dApps & Wallets + +dApps and wallets can easily interface with the Solve API to: + +- Enable seamless swaps and cross-chain execution for users. +- Improve transaction reliability and reduce slippage. +- Integrate directly with the Solver API for superior UX. + +### For Intent-Based Protocols + +Sprinter can seamlessly integrate our Solver into intent-based protocols to: + +- Best-In-class intent execution for your protocol across swaps, cross-chain and complex Intents +- Improve fulfillment rates across chains. +- Fast Solver onboarding via dedicated protocol integration or ERC-7683 compliant interface +- Day 1 support for new protocol launches + +Feel free to contact us at hello@sprinter.tech to see how we can help your intent protocol. diff --git a/docs/docs/03-sdk/02-installation.md b/docs/docs/03-sdk/02-installation.md deleted file mode 100644 index 66ebef3..0000000 --- a/docs/docs/03-sdk/02-installation.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -id: sdk-installation -title: Installation -sidebar_position: 2 ---- - -# Installation - -The Sprinter SDK allows developers to interact with cross-chain solutions such as balance aggregation and asset transfers across multiple blockchain networks. This guide will walk you through the installation process. - -## Prerequisites - -Before installing the SDK, ensure you have the following installed: - -- **Node.js**: Version 20 (recommended) or higher -- **npm** or **yarn**: A package manager for JavaScript - -## Installation - -To install the SDK in your project, use either `npm` or `yarn`: - -```bash npm2yarn -npm install @chainsafe/sprinter-sdk -``` - -## Basic Setup - -Once the SDK is installed, you can initialize it to interact with blockchain networks and fetch data like user balances and supported tokens. - -:::note -The `baseUrl` should be changed depending on whether you want to interract with test networks or main networks. -::: - -### Example: Initialize `Sprinter` - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -const ownerAddress = "0xYourAddressHere"; -sprinter.getUserBalances(ownerAddress).then(console.log); -``` - -## API Usage - -You can also call specific API endpoints directly using the SDK. Here’s an example: - -```typescript -import { api } from "@chainsafe/sprinter-sdk"; - -const ownerAddress = "0xYourAddressHere"; -const tokenSymbol = "USDC"; - -api.getErc20Balances(ownerAddress, tokenSymbol).then(console.log); -``` - -## Base url Configuration - -The base url will define the url used for API requests. If you want to make calls to test networks (e.g Sepolia, BaseSepolia...) you should use the test endpoint available from the exported `Environment` Enum: `Environment.TESTNET`. For main networks you can use `Environment.MAINNET`. - -### Example: Set Base URL - -```typescript -import { setBaseUrl } from "@chainsafe/sprinter-sdk"; - -setBaseUrl("https://api.sprinter.buildwithsygma.com"); -``` - -This allows the SDK to communicate with the appropriate API server for cross-chain solutions. - -For more advanced configuration and usage examples, refer to the next section on configuring the SDK. diff --git a/docs/docs/03-sdk/03-configuration.md b/docs/docs/03-sdk/03-configuration.md deleted file mode 100644 index 122a6fc..0000000 --- a/docs/docs/03-sdk/03-configuration.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -id: sdk-configuration -title: Configuration -sidebar_position: 3 ---- - -# Configuration - -The Sprinter SDK provides flexible options to configure the base URL for API interactions and allows you to override these settings on a per-method basis. This guide will show you how to configure the SDK effectively. - -## Configuring the `Sprinter` Instance - -When initializing the `Sprinter` class, you can pass a `baseUrl` configuration option. This sets the default API endpoint for all interactions. - -### `baseUrl` - -The `baseUrl` is the API server endpoint. You can either set it manually or use the predefined `Environment` enum to simplify configuration. - -:::note -Test networks and main networks have different API endpoints. Make sure to use the correct one based on your needs. -::: - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -// Using a custom base URL -const sprinter = new Sprinter({ - baseUrl: "https://api.sprinter.buildwithsygma.com", -}); - -// Or using a predefined environment URL -const sprinterWithEnv = new Sprinter({ - baseUrl: Environment.TESTNET, // Enum that provides predefined URLs, use `Environment.TESTNET` for mainnet -}); -``` - -## Set Base URL Using `setBaseUrl` - -You can change the `baseUrl` dynamically in your application using the `setBaseUrl` function provided by the SDK. This is useful when you need to modify the API endpoint during runtime. - -```typescript -import { setBaseUrl } from "@chainsafe/sprinter-sdk"; - -// Dynamically set the base URL during runtime -setBaseUrl("https://custom.api.url"); -``` - -## Set Base URL Using Environment Variables - -To configure the base URL for all SDK interactions, you can set the `SPRINTER_URL` environment variable in your environment configuration. This is particularly useful for different deployment environments such as development, staging, or production. - -```typescript -// In your environment file (e.g., .env) -SPRINTER_URL=https://api.sprinter.buildwithsygma.com -``` - -In your code, the SDK will use this environment variable automatically: - -```typescript -import { setBaseUrl } from "@chainsafe/sprinter-sdk"; - -// Automatically set the base URL from the environment variable -setBaseUrl(process.env.SPRINTER_URL); -``` - -## Available URLs - -Here are the URLs you can use for the `baseUrl`. -If you interract with test networks (e.g Sepolia, BaseSepolia...) use the Testnet url otherwise use the Mainnet one. - -- **Mainnet**: `https://api.sprinter.buildwithsygma.com/` -- **Testnet**: `https://api.test.sprinter.buildwithsygma.com/` - -You can either use these directly in the `baseUrl` option or reference them in your environment variables. - -## Overriding `baseUrl` Per Request - -Every method in the SDK accepts an optional `fetchOptions` parameter, which contains only the `baseUrl`. This allows you to override the `baseUrl` for individual requests, even if the `Sprinter` instance was initialized with a different URL. - -### Example: Overriding `baseUrl` for a Single Request - -```typescript -sprinter.getAvailableTokens({ baseUrl: "https://custom.api.url" }).then((tokens) => { - console.log(tokens); -}); -``` - -In this example, the `baseUrl` in `fetchOptions` is used only for this specific API request, without changing the base URL for the entire `Sprinter` instance. diff --git a/docs/docs/03-sdk/04-methods-reference/_category_.json b/docs/docs/03-sdk/04-methods-reference/_category_.json deleted file mode 100644 index 4beb563..0000000 --- a/docs/docs/03-sdk/04-methods-reference/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Methods Reference" -} diff --git a/docs/docs/03-sdk/04-methods-reference/_gas-tip.md b/docs/docs/03-sdk/04-methods-reference/_gas-tip.md deleted file mode 100644 index 71e4619..0000000 --- a/docs/docs/03-sdk/04-methods-reference/_gas-tip.md +++ /dev/null @@ -1,3 +0,0 @@ -:::tip Gas Estimation Tip -For better accuracy when dealing with contract calls and transactions, it’s recommended to estimate the `gasPrice` and `gasLimit` using your own blockchain provider. This ensures that the values reflect the current network conditions and avoid overpaying or underestimating gas fees. -::: diff --git a/docs/docs/03-sdk/04-methods-reference/_how-to-calldata.md b/docs/docs/03-sdk/04-methods-reference/_how-to-calldata.md deleted file mode 100644 index 08a4aa0..0000000 --- a/docs/docs/03-sdk/04-methods-reference/_how-to-calldata.md +++ /dev/null @@ -1,136 +0,0 @@ -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -### Creating `callData` - -The following examples demonstrate how to create the `callData` parameter required for interacting with a staking smart contract. We provide examples using different web3 libraries: Web3JS, Viem, and Ethers. - -
- Show Example Staking Contract and ABI - -```solidity -pragma solidity ^0.8.0; - -contract StakingContract { - mapping(address => uint256) public stakes; - uint256 public totalStakes; - - function stake(uint256 amount) public { - require(amount > 0, "Amount must be greater than zero"); - stakes[msg.sender] += amount; - totalStakes += amount; - } - - function withdraw(uint256 amount) public { - require(amount > 0 && stakes[msg.sender] >= amount, "Invalid amount"); - stakes[msg.sender] -= amount; - totalStakes -= amount; - } - - function getStake(address user) public view returns (uint256) { - return stakes[user]; - } -} -``` - -```json -{ - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "getStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} -``` - -
- - - - - ```typescript - import Web3 from 'web3'; - import contractABI from './stakingContractABI'; - - const web3 = new Web3(''); - const contractAddress = ''; - - const stakingContract = new web3.eth.Contract(contractABI, contractAddress); - const encodedData = stakingContract.methods.stake(100).encodeABI(); - console.log('Encoded Data:', encodedData); - ``` - - - - - ```typescript - import { encodeFunctionData } from 'viem'; - import contractABI from './stakingContractABI'; - - const abi = contractABI; - const functionName = 'stake'; - const args = [100]; - - const encodedData = encodeFunctionData({ abi, functionName, args }); - console.log('Encoded Data:', encodedData); - ``` - - - - - ```typescript - import { ethers } from 'ethers'; - import contractABI from './stakingContractABI'; - - const provider = new ethers.providers.JsonRpcProvider(''); - const contractAddress = ''; - - const stakingContract = new ethers.Contract(contractAddress, contractABI, provider); - const encodedData = stakingContract.interface.encodeFunctionData('stake', [100]); - console.log('Encoded Data:', encodedData); - ``` - - - diff --git a/docs/docs/03-sdk/04-methods-reference/_how-to-gas-limit.md b/docs/docs/03-sdk/04-methods-reference/_how-to-gas-limit.md deleted file mode 100644 index b12a414..0000000 --- a/docs/docs/03-sdk/04-methods-reference/_how-to-gas-limit.md +++ /dev/null @@ -1,160 +0,0 @@ -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -### Estimating `gasLimit` - -The following examples demonstrate how to estimate the `gasLimit` parameter required for interacting with a staking smart contract. We provide examples using different web3 libraries: Web3JS, Viem, and Ethers. - -:::note -To ensure that the transaction has enough gas, we recommend using the estimated gas limit from the provider, adding 25% as a buffer, and then adding an additional 100,000 units for fail-safe calculations. This ensures the transaction won’t run out of gas, even for complex contract interactions. -::: - -
- Show Example Staking Contract and ABI - -```solidity -pragma solidity ^0.8.0; - -contract StakingContract { - mapping(address => uint256) public stakes; - uint256 public totalStakes; - - function stake(uint256 amount) public { - require(amount > 0, "Amount must be greater than zero"); - stakes[msg.sender] += amount; - totalStakes += amount; - } - - function withdraw(uint256 amount) public { - require(amount > 0 && stakes[msg.sender] >= amount, "Invalid amount"); - stakes[msg.sender] -= amount; - totalStakes -= amount; - } - - function getStake(address user) public view returns (uint256) { - return stakes[user]; - } -} -``` - -```json -{ - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "stake", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "getStake", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} -``` - -
- - - - - ```typescript - import Web3 from 'web3'; - import contractABI from './stakingContractABI'; - - const web3 = new Web3(''); - const contractAddress = ''; - const account = ''; - - const stakingContract = new web3.eth.Contract(contractABI, contractAddress); - - async function estimateGas() { - const estimatedGas = await stakingContract.methods.stake(100).estimateGas({ from: account }); - const gasLimit = Math.floor(estimatedGas * 1.25) + 100000; // Add 25% and 100k for safety - console.log('Estimated Gas Limit:', gasLimit); - } - - estimateGas(); - ``` - - - - - ```typescript - import { encodeFunctionData } from 'viem'; - import { estimateGas } from 'viem'; - import contractABI from './stakingContractABI'; - - const abi = contractABI; - const functionName = 'stake'; - const args = [100]; - - async function estimateGas() { - const estimatedGas = await estimateGas({ abi, functionName, args }); - const gasLimit = Math.floor(estimatedGas * 1.25) + 200000; // Add 25% and 200k for safety - console.log('Estimated Gas Limit:', gasLimit); - } - - estimateGas(); - ``` - - - - - ```typescript - import { ethers } from 'ethers'; - import contractABI from './stakingContractABI'; - - const provider = new ethers.providers.JsonRpcProvider(''); - const contractAddress = ''; - const signer = provider.getSigner(''); - - const stakingContract = new ethers.Contract(contractAddress, contractABI, signer); - - async function estimateGas() { - const estimatedGas = await stakingContract.estimateGas.stake(100); - const gasLimit = Math.floor(Number(estimatedGas) * 1.25) + 200000; // Add 25% and 200k for safety - console.log('Estimated Gas Limit:', gasLimit.toString()); - } - - estimateGas(); - ``` - - - diff --git a/docs/docs/03-sdk/04-methods-reference/general/_category_.json b/docs/docs/03-sdk/04-methods-reference/general/_category_.json deleted file mode 100644 index f207bf3..0000000 --- a/docs/docs/03-sdk/04-methods-reference/general/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "General", - "collapsed": false, - "collapsible": false, - "position": 1 -} diff --git a/docs/docs/03-sdk/04-methods-reference/general/getAvailableChains.md b/docs/docs/03-sdk/04-methods-reference/general/getAvailableChains.md deleted file mode 100644 index e3d3469..0000000 --- a/docs/docs/03-sdk/04-methods-reference/general/getAvailableChains.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -id: get-available-chains -title: getAvailableChains -sidebar_position: 1 ---- - -# `getAvailableChains` - -The `getAvailableChains` method retrieves a list of supported blockchain networks, including chain details like chain ID, RPC URLs, and native tokens. - -## Usage - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -sprinter.getAvailableChains().then((chains) => { - console.log(chains); -}); -``` - -## Parameters - -- `fetchOptions?`: _(Optional)_ An object containing `baseUrl` to override the default API endpoint for this request. - -### Example: Using `fetchOptions` - -```typescript -sprinter.getAvailableChains({ baseUrl: "https://custom.api.url" }).then((chains) => { - console.log(chains); -}); -``` - -## Response - -Returns a promise that resolves to an `Array`. - -```typescript -type Response = Array; - -interface Chain { - chainType: string; - name: string; - chainID: number; - rpcURLs: Array; - logoURI: string; - blockTime: number; - nativeToken: { - name: string; - decimals: number; - }; -} -``` - -### Example Response - -```json -{ - "data": [ - { - "chainType": "evm", - "name": "Sepolia", - "chainID": 11155111, - "rpcURLs": ["https://ethereum-sepolia-rpc.publicnode.com/"], - "logoURI": "https://scan.buildwithsygma.com/assets/icons/evm.svg", - "blockTime": 12000000000, - "nativeToken": { - "name": "ETH", - "decimals": 18 - } - }, - { - "chainType": "evm", - "name": "B3Sepolia", - "chainID": 1993, - "rpcURLs": ["https://sepolia.b3.fun"], - "logoURI": "https://cdn.b3.fun/b3_logo.svg", - "blockTime": 1000000000, - "nativeToken": { - "name": "ETH", - "decimals": 18 - } - }, - { - "chainType": "evm", - "name": "BaseSepolia", - "chainID": 84532, - "rpcURLs": ["https://sepolia.base.org"], - "logoURI": "https://scan.buildwithsygma.com/assets/icons/base.svg", - "blockTime": 12000000000, - "nativeToken": { - "name": "ETH", - "decimals": 18 - } - } - ] -} -``` diff --git a/docs/docs/03-sdk/04-methods-reference/general/getAvailableTokens.md b/docs/docs/03-sdk/04-methods-reference/general/getAvailableTokens.md deleted file mode 100644 index 0d9ad59..0000000 --- a/docs/docs/03-sdk/04-methods-reference/general/getAvailableTokens.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -id: get-available-tokens -title: getAvailableTokens -sidebar_position: 2 ---- - -# `getAvailableTokens` - -The `getAvailableTokens` method retrieves a list of supported fungible tokens across multiple blockchain networks. - -## Usage - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -sprinter.getAvailableTokens().then((tokens) => { - console.log(tokens); -}); -``` - -## Parameters - -- `fetchOptions?`: _(Optional)_ An object containing `baseUrl` to override the default API endpoint for this request. - -### Example: Using `fetchOptions` - -```typescript -sprinter.getAvailableTokens({ baseUrl: "https://custom.api.url" }).then((tokens) => { - console.log(tokens); -}); -``` - -## Response - -Returns a promise that resolves to an `Array`. - -```typescript -type Response = Array; - -interface FungibleToken { - addresses: Record; - decimals: number; - logoURI: string; - name: string; - symbol: TokenSymbol; -} -``` - -### Example Response - -```json -{ - "data": [ - { - "name": "USDC", - "decimals": 6, - "symbol": "USDC", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/8cee462de2cc16eed81ded90ced5dbd64f7145cb/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png", - "addresses": { - "11155111": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "1993": "0xE61e5ed4c4f198c5384Ef57E69aAD1eF0c911004", - "84532": "0x036CbD53842c5426634e7929541eC2318f3dCF7e" - } - }, - { - "name": "Wrapped ETH", - "decimals": 18, - "symbol": "WETH", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/8cee462de2cc16eed81ded90ced5dbd64f7145cb/blockchains/optimism/assets/0x4200000000000000000000000000000000000006/logo.png", - "addresses": { - "11155111": "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14", - "1993": "0x3538f4C55893eDca690D1e4Cf9Fb61FB70cd0DD8", - "84532": "0x4200000000000000000000000000000000000006" - } - } - ] -} -``` diff --git a/docs/docs/03-sdk/04-methods-reference/general/getUserBalances.md b/docs/docs/03-sdk/04-methods-reference/general/getUserBalances.md deleted file mode 100644 index 18892ab..0000000 --- a/docs/docs/03-sdk/04-methods-reference/general/getUserBalances.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -id: get-user-balances -title: getUserBalances -sidebar_position: 3 ---- - -# `getUserBalances` - -The `getUserBalances` method retrieves the aggregated balance of a user across multiple chains for specified tokens or native assets. - -## Usage - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -const ownerAddress = "0xYourAddressHere"; -sprinter.getUserBalances(ownerAddress).then((balances) => { - console.log(balances); -}); -``` - -## Parameters - -- `account`: _(Required)_ The address of the user whose balances will be retrieved. -- `tokens?`: _(Optional)_ An array of tokens for which balances will be retrieved. If omitted, the method will return balances for all tokens and native assets. If an empty array is provided, only native token balances will be returned. -- `fetchOptions?`: _(Optional)_ An object containing `baseUrl` to override the default API endpoint for this request. - -### Example: Using `tokens` and `fetchOptions` - -```typescript -const tokens = [ - { - symbol: "USDC", - decimals: 6, - addresses: { "11155111": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238" }, - }, -]; - -sprinter - .getUserBalances(ownerAddress, tokens, { baseUrl: "https://custom.api.url" }) - .then((balances) => { - console.log(balances); - }); -``` - -## Behavior of the `tokens` Parameter - -- **If `tokens` is omitted**: The method will return balances for all supported tokens and native assets. -- **If `tokens` is specified**: The method will return balances only for the specified tokens and native assets. -- **If `tokens` is an empty array**: The method will return only native token balances. - -Providing specific tokens or an empty array can help reduce the response time, as fewer tokens need to be fetched. - -## Response - -Returns a promise that resolves to an `AggregateBalances` object. - -```typescript -type AggregateBalances = { - [symbol: string]: { - balances: Array; - total: string; - }; -}; - -interface TokenBalance { - balance: string; - chainId: number; - tokenDecimals: number; -} -``` - -### Example Response - -```json -{ - "ETH": { - "balances": [ - { - "balance": "1234567890000000000", - "chainId": 11155111, - "tokenDecimals": 18 - }, - { - "balance": "9876543210000000000", - "chainId": 84532, - "tokenDecimals": 18 - } - ], - "total": "11111111100000000000" - }, - "USDC": { - "balances": [ - { - "balance": "1000000", - "chainId": 11155111, - "tokenDecimals": 6 - }, - { - "balance": "2000000", - "chainId": 84532, - "tokenDecimals": 6 - } - ], - "total": "3000000" - } -} -``` - -## Notes - -- If the `tokens` array is omitted, balances for all tokens and native assets will be returned. -- If you provide specific tokens, balances will be fetched only for those tokens and native assets. -- If you provide an empty `tokens` array, only native token balances will be returned. -- Specifying tokens or an empty array can result in faster responses, as fewer tokens need to be fetched. diff --git a/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/_category_.json b/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/_category_.json deleted file mode 100644 index 5b922a7..0000000 --- a/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pool Asset On Destination", - "collapsed": false, - "collapsible": false, - "position": 3 -} diff --git a/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/poolAssetOnDestination.md b/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/poolAssetOnDestination.md deleted file mode 100644 index d19a507..0000000 --- a/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/poolAssetOnDestination.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -id: pool-asset-on-destination -title: poolAssetOnDestination -sidebar_position: 1 ---- - -# `poolAssetOnDestination` - -The `poolAssetOnDestination` method generates a solution for pooling fungible token balances across multiple source chains and transferring them to a specified destination chain. This method calculates the best combination of multi-hop transfers from available source chains, ultimately pooling the assets on the destination chain. - -## Usage - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "USDC", - amount: 1000000, // Targeted balance on the destination chain, in the smallest denomination - sourceChains: [84532, 1993], // Optional: List of source chains to be considered -}; - -sprinter.poolAssetOnDestination(settings).then((solution) => { - console.log(solution); -}); -``` - -## Parameters - -- `settings`: _(Required)_ An object containing the following fields: - - - `account`: The user’s address. - - `destinationChain`: The ID of the destination chain. - - `token`: The symbol of the token to be pooled and transferred (e.g., `USDC`, `ETH`). - - `amount`: The target amount of the token on the destination chain, in the smallest denomination (e.g., for USDC with 6 decimals, 1 USDC = 1,000,000). - - `sourceChains?`: _(Optional)_ An array of source chain IDs to be considered for pooling. If omitted, Sprinter will use all available source chains. - - `threshold?`: _(Optional)_ The minimum amount of the token to leave on the source chain, in the smallest denomination (useful for avoiding emptying the source chain completely). - -- `fetchOptions?`: _(Optional)_ An object containing `baseUrl` to override the default API endpoint for this request. - -### Example: Pooling from Multiple Chains - -In this example, balances from multiple source chains (e.g., BaseSepolia and B3Sepolia) are pooled to the destination chain (Sepolia). - -```typescript -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "USDC", - amount: 1000000, // Target balance on destination chain - sourceChains: [84532, 1993], // BaseSepolia and B3Sepolia as source chains -}; - -sprinter.poolAssetOnDestination(settings).then((solution) => { - console.log(solution); -}); -``` - -### Example: Using `fetchOptions` - -```typescript -sprinter - .poolAssetOnDestination(settings, { baseUrl: "https://custom.api.url" }) - .then((solution) => { - console.log(solution); - }); -``` - -## Response - -Returns a promise that resolves to a `SolutionResponse`. - -```typescript -type SolutionResponse = Array | FailedSolution; - -interface Solution { - destinationChain: number; - destinationTokenAddress: string; - duration: number; // Time estimate in seconds - fee: Amount; - gasCost: Amount; - senderAddress: string; - sourceChain: number; - sourceTokenAddress: string; - amount: string; - tool: Tool; - transaction: Transaction; - approvals?: Array; -} - -interface FailedSolution { - error: string; -} -``` - -### Example Response - -import GasTip from "../\_gas-tip.md" - - - -```json -[ - { - "sourceChain": 84532, - "destinationChain": 11155111, - "sourceTokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "destinationTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "senderAddress": "0x3e101ec02e7a48d16dade204c96bff842e7e2519", - "tool": { - "name": "Sygma-Testnet", - "logoURI": "https://scan.buildwithsygma.com/assets/images/logo1.svg" - }, - "gasCost": { - "amount": "221055913000", - "amountUSD": 0 - }, - "fee": { - "amount": "1000000000000000", - "amountUSD": 0 - }, - "amount": "100000000", - "duration": 60000000000, - "transaction": { - "data": "0x73c45c98000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000143e101ec02e7a48d16dade204c96bff842e7e251900000000000000000000000000000000000000000000000000000000000000000000000000000000000000023078000000000000000000000000000000000000000000000000000000000000", - "to": "0x9D5C332Ebe0DaE36e07a4eD552Ad4d8c5067A61F", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x38d7ea4c68000", - "gasPrice": "0xf433d", - "gasLimit": "0x35f48", - "chainId": 84532 - }, - "approvals": [ - { - "data": "0x095ea7b30000000000000000000000003b0f996c474c91de56617da13a52b22bb659d18e0000000000000000000000000000000000000000000000000000000005f5e100", - "to": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x0", - "gasPrice": "0xf433d", - "gasLimit": "0xe484", - "chainId": 84532 - } - ] - } -] -``` diff --git a/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/poolAssetOnDestinationWithHook.md b/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/poolAssetOnDestinationWithHook.md deleted file mode 100644 index c872314..0000000 --- a/docs/docs/03-sdk/04-methods-reference/pool-asset-on-destination/poolAssetOnDestinationWithHook.md +++ /dev/null @@ -1,260 +0,0 @@ ---- -id: pool-asset-on-destination-with-hook -title: poolAssetOnDestinationWithHook -sidebar_position: 2 ---- - -# `poolAssetOnDestinationWithHook` - -The `poolAssetOnDestinationWithHook` method generates a solution for pooling token balances from multiple source chains and transferring them to a specified destination chain, followed by a contract call on the destination chain. This method calculates the best combination of transfers from available source chains and includes a contract interaction after the token transfer. - -:::warning Cross-Chain Aggregation Behavior - -When pooling balances from multiple chains, the contract call will be executed once per source chain. This means the same contract will be called multiple times, which may result in unintended behavior for certain use cases. Ensure that your contract can handle repeated calls, as this may not be suitable for actions like NFT minting or governance voting, where a single action is expected. - -This behavior is generally fine for operations like staking or liquidity deposits, where multiple transactions are acceptable. - -::: - -## Usage - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - - - - -In this example, a token transfer (e.g., `USDC`) is pooled from multiple source chains, followed by a contract call on the destination chain. You need to provide `outputTokenAddress` and `approvalAddress` to allow the contract to move tokens on behalf of the user. - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "USDC", - amount: 1000000, // Targeted balance on the destination chain, in the smallest denomination - contractCall: { - contractAddress: "0xContractAddressHere", - callData: "0xSomeCallData", // Encoded contract interaction data - gasLimit: 100000, - outputTokenAddress: "0xOutputTokenAddressHere", // Where tokens will be sent - approvalAddress: "0xApprovalAddressHere", // Contract that needs approval to transfer tokens - }, - recipient: "0xRecipientAddress", // Optional recipient of leftover tokens - sourceChains: [84532, 1993], // Optional: List of source chains to be considered -}; - -sprinter.poolAssetOnDestinationWithHook(settings).then((solution) => { - console.log(solution); -}); -``` - - - - - -In this example, a native token (e.g., `ETH`) is pooled from multiple source chains, followed by a contract call on the destination chain. - -```typescript -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "ETH", - amount: 5000000000000000000, // 5 ETH in the smallest denomination (wei) - contractCall: { - contractAddress: "0xContractAddressHere", - callData: "0xSomeCallData", // Encoded contract interaction data - gasLimit: 21000, // Standard gas limit for ETH transfers - }, - recipient: "0xRecipientAddressHere", // The recipient of the native token transfer - sourceChains: [84532, 1993], // Optional: List of source chains to be considered -}; - -sprinter.poolAssetOnDestinationWithHook(settings).then((solution) => { - console.log(solution); -}); -``` - - - - -:::note -You can limit the solution to a specific source chain using the `sourceChains` field. For example, to use only `BaseSepolia` (chain ID `84532`) and another chain, provide it as an array like this: - -```typescript -sourceChains: [84532, 1993]; -``` - -If omitted, Sprinter will consider all available source chains. -::: - -### Example: Using `fetchOptions` - -```typescript -sprinter - .poolAssetOnDestinationWithHook(settings, { baseUrl: "https://custom.api.url" }) - .then((solution) => { - console.log(solution); - }); -``` - -## Parameters - -- `settings`: _(Required)_ An object containing the following fields: - - `account`: The user’s address. - - `destinationChain`: The ID of the destination chain. - - `token`: The symbol of the token to be pooled and transferred (e.g., `USDC`, `ETH`). - - `amount`: The target amount of the token on the destination chain, in the smallest denomination (e.g., for USDC with 6 decimals, 1 USDC = 1,000,000). - - `contractCall`: An object containing the contract call details, depending on the type of contract call: - - **Native Contract Call**: - - `contractAddress`: The contract address on the destination chain. - - `callData`: The data to interact with the contract, in hex format. - - `gasLimit`: The maximum amount of gas to use for the contract call. - - **Token Contract Call**: - - `contractAddress`: The contract address on the destination chain. - - `callData`: The data to interact with the contract, in hex format. - - `gasLimit`: The maximum amount of gas to use for the contract call. - - `outputTokenAddress?`: _(Optional)_ The token address where tokens will be sent after the contract call. - - `approvalAddress?`: _(Optional)_ The contract address that requires approval to transfer tokens (e.g., for `transferFrom`). - - `recipient?`: _(Optional)_ The address of the recipient of any leftover tokens. - - `sourceChains?`: _(Optional)_ An array of source chain IDs to be considered for pooling. If omitted, Sprinter will use all available source chains. - - `threshold?`: _(Optional)_ The minimum amount of the token to leave on the source chain, in the smallest denomination (useful for avoiding emptying the source chain completely). -- `fetchOptions?`: _(Optional)_ An object containing `baseUrl` to override the default API endpoint for this request. - -import HowToCallData from "../\_how-to-calldata.md" - - - -import GasLimit from "../\_how-to-gas-limit.md" - - - -
- -## Response - -Returns a promise that resolves to a `SolutionResponse`. - -```typescript -type SolutionResponse = Array | FailedSolution; - -interface Solution { - destinationChain: number; - destinationTokenAddress: string; - duration: number; // Time estimate in seconds - fee: Amount; - gasCost: Amount; - senderAddress: string; - sourceChain: number; - sourceTokenAddress: string; - amount: string; - tool: Tool; - transaction: Transaction; - approvals?: Array; -} - -interface FailedSolution { - error: string; -} -``` - -### Example Response - -import GasTip from "../\_gas-tip.md" - - - - - - -```json -[ - { - "sourceChain": 84532, - "destinationChain": 11155111, - "sourceTokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "destinationTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "senderAddress": "0x3e101ec02e7a48d16dade204c96bff842e7e2519", - "tool": { - "name": "Sygma-Testnet", - "logoURI": "https://scan.buildwithsygma.com/assets/images/logo1.svg" - }, - "gasCost": { - "amount": "221055913000", - "amountUSD": 0 - }, - "fee": { - "amount": "1000000000000000", - "amountUSD": 0 - }, - "amount": "100000000", - "duration": 60000000000, - "transaction": { - "data": "0x73c45c98000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000143e101ec02e7a48d16dade204c96bff842e7e251900000000000000000000000000000000000000000000000000000000000000000000000000000000000000023078000000000000000000000000000000000000000000000000000000000000", - "to": "0x9D5C332Ebe0DaE36e07a4eD552Ad4d8c5067A61F", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x38d7ea4c68000", - "gasPrice": "0xf433d", - "gasLimit": "0x35f48", - "chainId": 84532 - }, - "approvals": [ - { - "data": "0x095ea7b30000000000000000000000003b0f996c474c91de56617da13a52b22bb659d18e0000000000000000000000000000000000000000000000000000000005f5e100", - "to": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x0", - "gasPrice": "0xf433d", - "gasLimit": "0xe484", - "chainId": 84532 - } - ] - } -] -``` - - - - - -```json -[ - { - "sourceChain": 84532, - "destinationChain": 11155111, - "sourceTokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "destinationTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "senderAddress": "0x3e101ec02e7a48d16dade204c96bff842e7e2519", - "tool": { - "name": "Sygma-Testnet", - "logoURI": "https://scan.buildwithsygma.com/assets/images/logo1.svg" - }, - "gasCost": { - "amount": "221055913000", - "amountUSD": 0 - }, - "fee": { - "amount": "1000000000000000", - "amountUSD": 0 - }, - "amount": "100000000", - "duration": 60000000000, - "transaction": { - "data": "0x73c45c98000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000143e101ec02e7a48d16dade204c96bff842e7e251900000000000000000000000000000000000000000000000000000000000000000000000000000000000000023078000000000000000000000000000000000000000000000000000000000000", - "to": "0x9D5C332Ebe0DaE36e07a4eD552Ad4d8c5067A61F", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x38d7ea4c68000", - "gasPrice": "0xf433d", - "gasLimit": "0x35f48", - "chainId": 84532 - }, - "approvals": null - } -] -``` - - - diff --git a/docs/docs/03-sdk/04-methods-reference/transfer/_category_.json b/docs/docs/03-sdk/04-methods-reference/transfer/_category_.json deleted file mode 100644 index ddaff6d..0000000 --- a/docs/docs/03-sdk/04-methods-reference/transfer/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Transfer", - "collapsed": false, - "collapsible": false, - "position": 2 -} diff --git a/docs/docs/03-sdk/04-methods-reference/transfer/sweep.md b/docs/docs/03-sdk/04-methods-reference/transfer/sweep.md deleted file mode 100644 index 0dc75cf..0000000 --- a/docs/docs/03-sdk/04-methods-reference/transfer/sweep.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -id: sweep -title: sweep -sidebar_position: 3 ---- - -# `sweep` - -The `sweep` method generates a quote to transfer the full token balances of source chains to a destination chain. - -## Usage - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -const settings = { - account: "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - destinationChain: 11155111, - token: "USDC", -}; - -sprinter.sweep(settings).then((solution) => { - console.log(solution); -}); -``` - -## Parameters - -- `settings`: _(Required)_ An object containing the following fields: - - - `account`: The user’s address. - - `destinationChain`: The ID of the destination chain. - - `token`: The symbol of the token to be transferred (e.g., `USDC`, `ETH`). - - `recipient?`: _(Optional)_ The address of the recipient of the tokens on the destination chain. - - `sourceChains?`: _(Optional)_ An array of source chain IDs to be considered for the sweep. If omitted, Sprinter will use all available chains for the solution. To limit the solution to a specific chain, provide an array containing only that chain's ID. - -- `fetchOptions?`: _(Optional)_ An object containing `baseUrl` to override the default API endpoint for this request. - -### Example: Using `sourceChains` for sweeping from specific chains - -To get a sweep solution from specific chains, you can set `sourceChains` to an array with chain IDs. - -```typescript -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "USDC", - sourceChains: [84532, 137], -}; - -sprinter.sweep(settings).then((solution) => { - console.log(solution); -}); -``` - -### Example: Using `fetchOptions` - -```typescript -sprinter.sweep(settings, { baseUrl: "https://custom.api.url" }).then((solution) => { - console.log(solution); -}); -``` - -## Response - -Returns a promise that resolves to a `SolutionResponse`. - -```typescript -type SolutionResponse = Array | FailedSolution; - -interface Solution { - destinationChain: number; - destinationTokenAddress: string; - duration: number; // Time estimate in seconds - fee: Amount; - gasCost: Amount; - senderAddress: string; - sourceChain: number; - sourceTokenAddress: string; - tool: Tool; - transaction: Transaction; - approvals?: Array; - amount: Amount; -} - -interface FailedSolution { - error: string; -} -``` - -### Example Response - -import GasTip from "../\_gas-tip.md" - - - -```json -[ - { - "sourceChain": 84532, - "destinationChain": 11155111, - "sourceTokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "destinationTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "senderAddress": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "tool": { - "name": "Across", - "logoURI": "https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/bridges/acrossv2.png" - }, - "gasCost": { - "amount": "130680140710000", - "amountUSD": 0 - }, - "fee": { - "amount": "6239846", - "amountUSD": 0 - }, - "amount": "1178950000", - "duration": 120000000000, - "transaction": { - "data": "0x7b9392320000000000000000000000003e101ec02e7a48d16dade204c96bff842e7e25190000000000000000000000003e101ec02e7a48d16dade204c96bff842e7e2519000000000000000000000000036cbd53842c5426634e7929541ec2318f3dcf7e0000000000000000000000001c7d4b196cb0c7b01d743fbc6116a902379c723800000000000000000000000000000000000000000000000000000000464559700000000000000000000000000000000000000000000000000000000045e6230a0000000000000000000000000000000000000000000000000000000000aa36a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006780030c000000000000000000000000000000000000000000000000000000006780576c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000001dc0de", - "to": "0x82B564983aE7274c86695917BBf8C99ECb6F0F8F", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x0", - "gasLimit": "0x16378", - "chainId": 84532 - }, - "approvals": [ - { - "data": "0x095ea7b300000000000000000000000082b564983ae7274c86695917bbf8c99ecb6f0f8f0000000000000000000000000000000000000000000000000000000046455970", - "to": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x0", - "gasLimit": "0xe484", - "chainId": 84532 - } - ] - } -] -``` diff --git a/docs/docs/03-sdk/04-methods-reference/transfer/transferWithHook.md b/docs/docs/03-sdk/04-methods-reference/transfer/transferWithHook.md deleted file mode 100644 index 13a2ec9..0000000 --- a/docs/docs/03-sdk/04-methods-reference/transfer/transferWithHook.md +++ /dev/null @@ -1,255 +0,0 @@ ---- -id: transfer-with-hook -title: transferWithHook -sidebar_position: 2 ---- - -# `transferWithHook` - -The `transferWithHook` method generates a solution for performing a token transfer from a single source chain, followed by a contract call on the destination chain. The contract call can involve either a native token or a token transfer. This method returns the necessary transaction details to execute both the token transfer and the contract interaction. - -## Usage - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - - - - -In this example, a token transfer (e.g., `USDC`) is followed by a contract call on the destination chain. You need to provide `outputTokenAddress` and `approvalAddress` to allow the contract to move tokens on behalf of the user. - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "USDC", - amount: 1000000, // In smallest denomination (e.g., 1 USDC = 1,000,000 in USDC with 6 decimals) - contractCall: { - contractAddress: "0xContractAddressHere", - callData: "0xSomeCallData", // Encoded contract interaction data - gasLimit: 100000, - outputTokenAddress: "0xOutputTokenAddressHere", // Where tokens will be sent - approvalAddress: "0xApprovalAddressHere", // Contract that needs approval to transfer tokens - }, - recipient: "0xRecipientAddress", // Optional recipient of leftover tokens - sourceChains: [84532], // Optional: List of source chains to be considered -}; - -sprinter.transferWithHook(settings).then((solution) => { - console.log(solution); -}); -``` - - - - - -In this example, a native token (e.g., `ETH`) is transferred to a contract on the destination chain, followed by a contract call. The contract can receive the native token in addition to executing the call. - -```typescript -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "ETH", - amount: 5000000000000000000, // 5 ETH in the smallest denomination (wei) - contractCall: { - contractAddress: "0xContractAddressHere", - callData: "0xSomeCallData", // Encoded contract interaction data - gasLimit: 21000, // Standard gas limit for simple ETH transfers - }, - recipient: "0xRecipientAddressHere", // The recipient of the native token transfer - sourceChains: [84532], // Optional: List of source chains to be considered -}; - -sprinter.transferWithHook(settings).then((solution) => { - console.log(solution); -}); -``` - - - - -:::note -You can limit the solution to a specific source chain using the `sourceChains` field. For example, to use only `BaseSepolia` (chain ID `84532`), provide it as an array like this: - -```typescript -sourceChains: [84532]; -``` - -If omitted, Sprinter will consider all available source chains. -::: - -### Example: Using `fetchOptions` - -```typescript -sprinter.transferWithHook(settings, { baseUrl: "https://custom.api.url" }).then((solution) => { - console.log(solution); -}); -``` - -## Parameters - -- `settings`: _(Required)_ An object containing the following fields: - - - `account`: The user’s address. - - `destinationChain`: The ID of the destination chain. - - `token`: The symbol of the token to be transferred (e.g., `USDC`, `ETH`). - - `amount`: The amount of the token to be transferred in the smallest denomination (e.g., for USDC with 6 decimals, 1 USDC = 1,000,000). - - `contractCall`: An object containing the contract call details, depending on the type of contract call: - - **Native Contract Call**: - - `contractAddress`: The contract address on the destination chain. - - `callData`: The data to interact with the contract, in hex format. - - `gasLimit`: The maximum amount of gas to use for the contract call. - - **Token Contract Call**: - - `contractAddress`: The contract address on the destination chain. - - `callData`: The data to interact with the contract, in hex format. - - `gasLimit`: The maximum amount of gas to use for the contract call. - - `outputTokenAddress?`: _(Optional)_ The token address where tokens will be sent after the contract call. - - `approvalAddress?`: _(Optional)_ The contract address that requires approval to transfer tokens (e.g., for `transferFrom`). - - `recipient?`: _(Optional)_ The address of the recipient of any leftover tokens. - - `sourceChains?`: _(Optional)_ An array of source chain IDs to be considered for the transfer. If omitted, Sprinter will use all available chains for the solution. - - `threshold?`: _(Optional)_ The minimum amount of tokens required to trigger the transfer solution. If not met, the transfer solution will not proceed. - - `enableSwaps`: _(Optional)_ Defaults to `false`. Whether to enable token swaps on the source chain. - -- `fetchOptions?`: _(Optional)_ An object containing `baseUrl` to override the default API endpoint for this request. - -import HowToCallData from "../\_how-to-calldata.md" - - - -import GasLimit from "../\_how-to-gas-limit.md" - - - -
- -## Response - -Returns a promise that resolves to a `SolutionResponse`. - -```typescript -type SolutionResponse = Array | FailedSolution; - -interface Solution { - destinationChain: number; - destinationTokenAddress: string; - duration: number; // Time estimate in seconds - fee: Amount; - gasCost: Amount; - senderAddress: string; - sourceChain: number; - sourceTokenAddress: string; - amount: string; - tool: Tool; - transaction: Transaction; - approvals?: Array; -} - -interface FailedSolution { - error: string; -} -``` - -### Example Response - -import GasTip from "../\_gas-tip.md" - - - - - - -```json -[ - { - "sourceChain": 84532, - "destinationChain": 11155111, - "sourceTokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "destinationTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "senderAddress": "0x3e101ec02e7a48d16dade204c96bff842e7e2519", - "tool": { - "name": "Sygma-Testnet", - "logoURI": "https://scan.buildwithsygma.com/assets/images/logo1.svg" - }, - "gasCost": { - "amount": "221055913000", - "amountUSD": 0 - }, - "fee": { - "amount": "1000000000000000", - "amountUSD": 0 - }, - "amount": "100000000", - "duration": 60000000000, - "transaction": { - "data": "0x73c45c98000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000143e101ec02e7a48d16dade204c96bff842e7e251900000000000000000000000000000000000000000000000000000000000000000000000000000000000000023078000000000000000000000000000000000000000000000000000000000000", - "to": "0x9D5C332Ebe0DaE36e07a4eD552Ad4d8c5067A61F", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x38d7ea4c68000", - "gasPrice": "0xf433d", - "gasLimit": "0x35f48", - "chainId": 845 - -32 - }, - "approvals": [ - { - "data": "0x095ea7b30000000000000000000000003b0f996c474c91de56617da13a52b22bb659d18e0000000000000000000000000000000000000000000000000000000005f5e100", - "to": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "from": "0x3E101Ec02e7a48d16dade204c96bff842e7e2519", - "value": "0x0", - "gasPrice": "0xf433d", - "gasLimit": "0xe484", - "chainId": 84532 - } - ] - } -] -``` - - - - - -```json -[ - { - "sourceChain": 84532, - "destinationChain": 11155111, - "sourceTokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "destinationTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "senderAddress": "0x3e101ec02e7a48d16dade204c96bff842e7e2519", - "tool": { - "name": "Sygma-Testnet", - "logoURI": "https://scan.buildwithsygma.com/assets/images/logo1.svg" - }, - "gasCost": { - "amount": "221055913000", - "amountUSD": 0 - }, - "fee": { - "amount": "1000000000000000", - "amountUSD": 0 - }, - "amount": "100000000", - "duration": 60000000000, - "transaction": { - "data": "0x73c45c98000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000143e101ec02e7a48d16dade204c96bff842e7e251900000000000000000000000000000000000000000000000000000000000000000000000000000000000000023078000000000000000000000000000000000000000000000000000000000000", - "to": "0x9D5C332Ebe0DaE36e07a4eD552Ad4d8c5067A61F", - "from": "0x3E101Ec02e7a48D16DADE204C96bFF842E7E2519", - "value": "0x38d7ea4c68000", - "gasPrice": "0xf433d", - "gasLimit": "0x35f48", - "chainId": 84532 - }, - "approvals": null - } -] -``` - - - diff --git a/docs/docs/03-sdk/04-methods-reference/transfer/transfer_method.md b/docs/docs/03-sdk/04-methods-reference/transfer/transfer_method.md deleted file mode 100644 index e259303..0000000 --- a/docs/docs/03-sdk/04-methods-reference/transfer/transfer_method.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -id: transfer -title: transfer -sidebar_position: 1 ---- - -# `transfer` - -The `transfer` method generates a solution for performing a token transfer from a single source chain. It returns the necessary transaction details to initiate the transfer on the source chain and complete it on the destination chain. - -## Usage - -```typescript -import { Sprinter, Environment } from "@chainsafe/sprinter-sdk"; - -const sprinter = new Sprinter({ baseUrl: Environment.TESTNET }); - -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "USDC", - amount: 1000000, // In smallest denomination (e.g., 1 USDC = 1,000,000 in USDC with 6 decimals) -}; - -sprinter.transfer(settings).then((solution) => { - console.log(solution); -}); -``` - -## Parameters - -- `settings`: _(Required)_ An object containing the following fields: - - - `account`: The user’s address. - - `destinationChain`: The ID of the destination chain. - - `token`: The symbol of the token to be transferred (e.g., `USDC`, `ETH`). - - `amount`: The amount of the token to be transferred in the smallest denomination (e.g., for USDC with 6 decimals, 1 USDC = 1,000,000). - - `recipient?`: _(Optional)_ The address of the recipient of any leftover tokens. - - `sourceChains?`: _(Optional)_ An array of source chain IDs to be considered for the transfer. If omitted, Sprinter will use all available chains for the solution. To limit the solution to a specific chain, provide an array containing only that chain's ID. - - `threshold?`: _(Optional)_ The minimum amount of tokens required to trigger the transfer solution. If not met, the transfer solution will not proceed. - - `enableSwaps`: _(Optional)_ Defaults to `false`. Whether to enable token swaps on the source chain. - -- `fetchOptions?`: _(Optional)_ An object containing `baseUrl` to override the default API endpoint for this request. - -### Example: Using `sourceChains` for a Specific Chain - -To get a transfer solution from a specific chain (e.g., BaseSepolia with chain ID `84532`), you can set `sourceChains` to an array with that chain's ID. - -```typescript -const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "USDC", - amount: 1000000, - sourceChains: [84532], // Limit to BaseSepolia as the source chain -}; - -sprinter.transfer(settings).then((solution) => { - console.log(solution); -}); -``` - -### Example: Using `fetchOptions` - -```typescript -sprinter.transfer(settings, { baseUrl: "https://custom.api.url" }).then((solution) => { - console.log(solution); -}); -``` - -## Response - -Returns a promise that resolves to a `SolutionResponse`. - -```typescript -type SolutionResponse = Array | FailedSolution; - -interface Solution { - destinationChain: number; - destinationTokenAddress: string; - duration: number; // Time estimate in seconds - fee: Amount; - gasCost: Amount; - senderAddress: string; - sourceChain: number; - sourceTokenAddress: string; - amount: string; - tool: Tool; - transaction: Transaction; - approvals?: Array; -} - -interface FailedSolution { - error: string; -} -``` - -### Example Response - -import GasTip from "../\_gas-tip.md" - - - -```json -[ - { - "sourceChain": 84532, - "destinationChain": 11155111, - "sourceTokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "destinationTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "senderAddress": "0x3e101ec02e7a48d16dade204c96bff842e7e2519", - "tool": { - "name": "Sygma-Testnet", - "logoURI": "https://scan.buildwithsygma.com/assets/images/logo1.svg" - }, - "gasCost": { - "amount": "221055913000", - "amountUSD": 0 - }, - "fee": { - "amount": "1000000000000000", - "amountUSD": 0 - }, - "amount": "100000000", - "duration": 60000000000, - "transaction": { - "data": "0x73c45c98000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000143e101ec02e7a48d16dade204c96bff842e7e251900000000000000000000000000000000000000000000000000000000000000000000000000000000000000023078000000000000000000000000000000000000000000000000000000000000", - "to": "0x9D5C332Ebe0DaE36e07a4eD552Ad4d8c5067A61F", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x38d7ea4c68000", - "gasPrice": "0xf433d", - "gasLimit": "0x35f48", - "chainId": 84532 - }, - "approvals": [ - { - "data": "0x095ea7b30000000000000000000000003b0f996c474c91de56617da13a52b22bb659d18e0000000000000000000000000000000000000000000000000000000005f5e100", - "to": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "from": "0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519", - "value": "0x0", - "gasPrice": "0xf433d", - "gasLimit": "0xe484", - "chainId": 84532 - } - ] - } -] -``` diff --git a/docs/docs/03-sdk/index.md b/docs/docs/03-sdk/index.md deleted file mode 100644 index 362b61d..0000000 --- a/docs/docs/03-sdk/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -id: sdk-overview -title: SDK -sidebar_position: 3 ---- - -# SDK Overview - -The Sprinter SDK provides a set of tools and functionalities to interact with the Sprinter Intent Engine. It allows developers to easily retrieve intent-based solutions, such as cross-chain balance aggregation, token transfers, and contract calls, across multiple blockchain networks. - -## Key Features - -- **Cross-Chain Balance Retrieval**: Fetch user balances across multiple supported blockchains. -- **Bridging Solutions**: Generate solutions for single-hop and multi-hop token transfers across chains. -- **Contract Call Solutions**: Generate solutions to perform contract calls along with cross-chain transfers. -- **Typed Methods**: TypeScript support for all SDK methods, ensuring type safety and better developer experience. - -## Use Cases - -1. **Balance Aggregation**: Aggregate a user's balance for a specific token across multiple chains. -2. **Token Bridging**: Create bridging solutions to transfer tokens across different chains. -3. **Contract Interactions**: Retrieve solutions for executing contract calls while bridging tokens. - -For more detailed usage and examples, please refer to the Methods Reference. diff --git a/docs/docs/04-liquidityhubpools copy.md b/docs/docs/04-liquidityhubpools copy.md new file mode 100644 index 0000000..9764b89 --- /dev/null +++ b/docs/docs/04-liquidityhubpools copy.md @@ -0,0 +1,40 @@ +--- +id: liquidity-hub-pools +title: Liquidity Hub & Pools +sidebar_position: 4 +--- + +# Liquidity Hub & Liquidity Pools + +Central to both Sprinter Stash and Solve is the **Liquidity Hub**—the smart contract that manages and distributes liquidity. + +## Liquidity Hub + +**Contract Address (Base):** +`0xa593A9bBBc65be342FF610a01e96da2EB8539FF2` + +### Responsibilities: + +- **Depositing Liquidity:** LPs deposit USDC → receive `spUSDC-LP` tokens. +- **Allocation:** Hub allocates liquidity across supported chains based on solver demand. +- **Yield:** Idle liquidity is deployed into lending protocols like Aave. +- **Withdrawals:** LPs redeem their LP tokens for USDC when available. + +## Liquidity Pools + +Deployed across multiple chains, these on-chain vaults serve solver requests. + +### Key Pools + +- **Aave USDC Pool** (Base, OP, Arbitrum): + `0x7C255279c098fdF6c3116D2BecD9978002c09f4b` + +- **Standard USDC Pool** (Base, OP, Arbitrum): + `0xB58Bb9643884abbbad64FA7eBcD9978002c09f4b` + +### Functionality + +- **Cross-Chain Execution:** Pools enable real-time execution of swaps and bridges. +- **Collateral-Free Borrowing:** Solvers access liquidity backed by hub-signed approvals. +- **Rebalancing:** Liquidity is auto-optimized across chains. +- **Risk Management:** Protocol maintains loan-to-value ratios to ensure solvency. diff --git a/docs/docs/04-react-sdk/02-installation.md b/docs/docs/04-react-sdk/02-installation.md deleted file mode 100644 index b3e086d..0000000 --- a/docs/docs/04-react-sdk/02-installation.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -id: react-sdk-installation -title: Installation -sidebar_position: 2 ---- - -# Installation - -To use the **Sprinter React SDK** in your project, follow these installation instructions. - -## Step 1: Install the React SDK and Sprinter SDK - -The React SDK requires the core Sprinter SDK (`@chainsafe/sprinter-sdk`) to function properly. You can install both packages using `yarn` or `npm`. - -```bash npm2yarn -npm install @chainsafe/sprinter-react @chainsafe/sprinter-sdk -``` - -## Step 2: Ensure React Version - -Make sure your project uses **React** version 18.3.1 or higher, as it’s the minimum version supported by the React SDK. - -```bash npm2yarn -npm install react@latest react-dom@latest -``` - -## Step 3: Wrap Your App with `SprinterContext` - -Once the installation is complete, wrap your app’s component tree with `SprinterContext` to provide access to Sprinter’s functionalities across your React components. - -:::note -The `baseUrl` should be changed depending on whether you want to interract with test networks or main networks. E.g for Sepolia or BaseSepolia use `Environment.TESTNET`, otherwise use `Environment.MAINNET` -::: - -```tsx -import React from "react"; -import { SprinterContext } from "@chainsafe/sprinter-react"; -import { Environment } from "@chainsafe/sprinter-sdk"; - -function App() { - return ( - - - - ); -} -``` - -By passing the `baseUrl`, you specify which endpoint to use for API calls. If you interract with test networks (e.g Sepolia, BaseSepolia...) use the Testnet url otherwise use the Mainnet one. - -### Available URLs: - -- **Testnet**: `https://api.test.sprinter.buildwithsygma.com` -- **Mainnet**: `https://api.sprinter.buildwithsygma.com` - -For more information on available hooks and methods, proceed to the [Using Hooks](03-using-hooks.md) section. diff --git a/docs/docs/04-react-sdk/03-using-hooks.md b/docs/docs/04-react-sdk/03-using-hooks.md deleted file mode 100644 index a3f41ba..0000000 --- a/docs/docs/04-react-sdk/03-using-hooks.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -id: using-hooks -title: Using React SDK Hooks -sidebar_position: 3 ---- - -# Using React SDK Hooks - -The Sprinter React SDK provides a set of hooks to simplify access to the core Sprinter SDK's functionality. These hooks allow you to easily retrieve and manage user balances, tokens, chains, and transfer solutions directly within your React components. - -Each hook returns stateful data (`data`, `loading`, `error`) along with functions to interact with Sprinter’s Intent Engine. - -## Available Hooks - -### 1. `useSprinter` - -Access all of the context provided by `SprinterContext`. It allows you to get access to balances, chains, tokens, and solutions across your app. - -```tsx -import { useSprinter } from "@chainsafe/sprinter-react"; - -function YourComponent() { - const { - balances, - tokens, - chains, - solution, - getUserBalances, - getAvailableTokens, - getAvailableChains, - getSweep, - getTransfer, - getTransferWithHook, - getPoolAssetOnDestination, - getPoolAssetOnDestinationWithHook, - } = useSprinter(); - - // You now have access to the full Sprinter context! -} -``` - -### 2. `useSprinterTokens` - -Fetch the list of available tokens supported by Sprinter across various chains. - -```tsx -import { useSprinterTokens } from "@chainsafe/sprinter-react"; - -function TokenList() { - const { tokens, getAvailableTokens } = useSprinterTokens(); - - useEffect(() => { - getAvailableTokens(); // Fetch tokens on component mount - }, []); - - if (tokens.loading) return
Loading tokens...
; - if (tokens.error) return
Error: {tokens.error}
; - - return ( -
    {tokens.data && tokens.data.map((token) =>
  • {token.name}
  • )}
- ); -} -``` - -### 3. `useSprinterChains` - -This hook retrieves the supported blockchain networks. - -```tsx -import { useSprinterChains } from "@chainsafe/sprinter-react"; - -function ChainList() { - const { chains, getAvailableChains } = useSprinterChains(); - - useEffect(() => { - getAvailableChains(); // Fetch chains on component mount - }, []); - - if (chains.loading) return
Loading chains...
; - if (chains.error) return
Error fetching chains: {chains.error}
; - - return ( -
    {chains.data && chains.data.map((chain) =>
  • {chain.name}
  • )}
- ); -} -``` - -### 4. `useSprinterBalances` - -This hook allows you to fetch user balances across multiple blockchains. - -```tsx -import { useSprinterBalances } from "@chainsafe/sprinter-react"; - -function BalanceComponent({ account }) { - const { balances, getUserBalances } = useSprinterBalances(account); - - useEffect(() => { - getUserBalances(); // Fetch balances when the component mounts - }, [account]); - - if (balances.loading) return
Loading balances...
; - if (balances.error) return
Error fetching balances: {balances.error}
; - - return ( -
    - {balances.data && - balances.data.map((balance) => ( -
  • - {balance.symbol}: {balance.amount} -
  • - ))} -
- ); -} -``` - -### 5. `useSprinterTransfers` - -Generate cross-chain transfer and contract call solutions. - -```tsx -import { useSprinterTransfers } from "@chainsafe/sprinter-react"; - -function TransferSolution() { - const { getPoolAssetOnDestination, solution } = useSprinterTransfers(); - - useEffect(() => { - const settings = { - account: "0xYourAddressHere", - destinationChain: 11155111, // Sepolia testnet - token: "USDC", - amount: 1000000, // 1 USDC in smallest denomination - sourceChains: [84532, 1993], // Optional: source chains to consider - }; - - getPoolAssetOnDestination(settings); - }, []); - - if (solution.loading) return
Loading transfer solution...
; - if (solution.error) return
Error: {solution.error}
; - - return
Transfer Solution: {JSON.stringify(solution.data)}
; -} -``` - ---- - -## Summary - -The Sprinter React SDK hooks provide an easy way to interact with cross-chain balances, tokens, chains, and transfer solutions. These hooks manage state for you (`loading`, `error`, and `data`) and allow you to integrate Sprinter functionality seamlessly into your React components. diff --git a/docs/docs/04-react-sdk/04-methods-reference/_category_.json b/docs/docs/04-react-sdk/04-methods-reference/_category_.json deleted file mode 100644 index 74901d7..0000000 --- a/docs/docs/04-react-sdk/04-methods-reference/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Methods Reference", - "collapsed": false -} diff --git a/docs/docs/04-react-sdk/04-methods-reference/useSprinterBalances.md b/docs/docs/04-react-sdk/04-methods-reference/useSprinterBalances.md deleted file mode 100644 index 3de79e2..0000000 --- a/docs/docs/04-react-sdk/04-methods-reference/useSprinterBalances.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -id: use-sprinter-balances -title: useSprinterBalances -sidebar_position: 3 ---- - -# `useSprinterBalances` - -The `useSprinterBalances` hook allows you to retrieve a user's available token balances across multiple chains. It provides access to both native and fungible token balances for the specified account. - -## Usage - -### Example - -```tsx -import { useSprinterBalances } from "@chainsafe/sprinter-react"; -import React, { useEffect } from "react"; - -function BalancesComponent() { - const { balances, getUserBalances } = useSprinterBalances("0xYourAddress"); - - useEffect(() => { - getUserBalances(); // Fetch balances when the component mounts - }, [getUserBalances]); - - if (balances.loading) { - return
Loading...
; - } - - if (balances.error) { - return
Error: {balances.error}
; - } - - return ( -
    - {Object.entries(balances.data || {}).map(([symbol, balanceEntry]) => ( -
  • - {symbol}: {balanceEntry.total} -
  • - ))} -
- ); -} -``` - -## Return Value - -The `useSprinterBalances` hook returns an object with the following properties: - -- **`balances`**: An object containing: - - - `data`: The user's balances across chains, keyed by token symbol. Each token's balances are represented by: - - `balances`: An array of balances on different chains. - - `total`: The total balance for the token across all chains. - - `loading`: A boolean indicating if the balances are being fetched. - - `error`: A string containing the error message if the fetch fails. - -- **`getUserBalances`**: A function that triggers the retrieval of the user's balances. - -## Example Response - -Here’s an example of what `balances.data` might look like after calling `getUserBalances()`: - -```json -{ - "ETH": { - "balances": [ - { "balance": "1000000000000000000", "chainId": 11155111, "tokenDecimals": 18 }, - { "balance": "500000000000000000", "chainId": 84532, "tokenDecimals": 18 } - ], - "total": "1500000000000000000" - }, - "USDC": { - "balances": [{ "balance": "2000000", "chainId": 11155111, "tokenDecimals": 6 }], - "total": "2000000" - } -} -``` - -## Parameters - -- `getUserBalances()`: A function that fetches the user's balances across all available tokens and native token balances for the specified account. diff --git a/docs/docs/04-react-sdk/04-methods-reference/useSprinterChains.md b/docs/docs/04-react-sdk/04-methods-reference/useSprinterChains.md deleted file mode 100644 index fbba8fd..0000000 --- a/docs/docs/04-react-sdk/04-methods-reference/useSprinterChains.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -id: use-sprinter-chains -title: useSprinterChains -sidebar_position: 2 ---- - -# `useSprinterChains` - -The `useSprinterChains` hook allows you to fetch and manage the list of supported blockchain networks (chains) in the Sprinter ecosystem. It provides access to details such as chain ID, name, and supported RPC URLs. - -## Usage - -### Example - -```tsx -import { useSprinterChains } from "@chainsafe/sprinter-react"; - -function ChainList() { - const { chains, getAvailableChains } = useSprinterChains(); - - useEffect(() => { - getAvailableChains(); // Fetch chains on component mount - }, []); - - if (chains.loading) return
Loading chains...
; - if (chains.error) return
Error fetching chains: {chains.error}
; - - return ( -
    - {chains.data && - chains.data.map((chain) => ( -
  • - {chain.name} - Chain ID: {chain.chainID} -
  • - ))} -
- ); -} -``` - -## Return Value - -The `useSprinterChains` hook returns an object with the following properties: - -- **`chains`**: An object containing: - - - `data`: The list of supported blockchain networks, or `null` if chains haven’t been loaded yet. - - `loading`: A boolean indicating if the chains are being fetched. - - `error`: A string containing the error message if the fetch fails. - -- **`getAvailableChains`**: A function that triggers the retrieval of available chains. - -## Example Response - -Here is an example of what the `chains.data` might look like after calling `getAvailableChains()`: - -```json -[ - { - "chainType": "evm", - "name": "Sepolia", - "chainID": 11155111, - "rpcURLs": ["https://ethereum-sepolia-rpc.publicnode.com/"], - "logoURI": "https://scan.buildwithsygma.com/assets/icons/evm.svg", - "blockTime": 12000000000, - "nativeToken": { - "name": "ETH", - "decimals": 18 - } - }, - { - "chainType": "evm", - "name": "B3Sepolia", - "chainID": 1993, - "rpcURLs": ["https://sepolia.b3.fun"], - "logoURI": "https://cdn.b3.fun/b3_logo.svg", - "blockTime": 1000000000, - "nativeToken": { - "name": "ETH", - "decimals": 18 - } - }, - { - "chainType": "evm", - "name": "BaseSepolia", - "chainID": 84532, - "rpcURLs": ["https://sepolia.base.org"], - "logoURI": "https://scan.buildwithsygma.com/assets/icons/base.svg", - "blockTime": 12000000000, - "nativeToken": { - "name": "ETH", - "decimals": 18 - } - } -] -``` - -## Parameters - -- `getAvailableChains()`: A function that fetches the list of available blockchain networks from the Sprinter Intent Engine. - -## Notes - -- **Automatic Fetch**: The `getAvailableChains` function is automatically called when `SprinterContext` is initialized, so chains will be available in your app as soon as the context is ready. -- If the chains have already been fetched, the hook will return the cached list for better performance. diff --git a/docs/docs/04-react-sdk/04-methods-reference/useSprinterTokens.md b/docs/docs/04-react-sdk/04-methods-reference/useSprinterTokens.md deleted file mode 100644 index 2025578..0000000 --- a/docs/docs/04-react-sdk/04-methods-reference/useSprinterTokens.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -id: use-sprinter-tokens -title: useSprinterTokens -sidebar_position: 1 ---- - -# `useSprinterTokens` - -The `useSprinterTokens` hook allows you to fetch and manage the list of supported fungible tokens across different blockchain networks in the Sprinter ecosystem. It provides access to the token details and offers functionality to retrieve the tokens directly within your React components. - -## Usage - -### Example - -```tsx -import { useSprinterTokens } from "@chainsafe/sprinter-react"; - -function TokenList() { - const { tokens, getAvailableTokens } = useSprinterTokens(); - - useEffect(() => { - getAvailableTokens(); // Fetch tokens on component mount - }, []); - - if (tokens.loading) return
Loading tokens...
; - if (tokens.error) return
Error: {tokens.error}
; - - return ( -
    - {tokens.data && - tokens.data.map((token) => ( -
  • - {token.name} - {token.symbol} -
  • - ))} -
- ); -} -``` - -## Return Value - -The `useSprinterTokens` hook returns an object with the following properties: - -- **`tokens`**: An object containing: - - - `data`: The list of supported tokens, or `null` if tokens haven’t been loaded yet. - - `loading`: A boolean indicating if the tokens are being fetched. - - `error`: A string containing the error message if the fetch fails. - -- **`getAvailableTokens`**: A function that triggers the retrieval of available tokens, though it is automatically called when the context is initialized. - -## Example Response - -Here is an example of what the `tokens.data` might look like after calling `getAvailableTokens()`: - -```json -[ - { - "name": "USDC", - "decimals": 6, - "symbol": "USDC", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/8cee462de2cc16eed81ded90ced5dbd64f7145cb/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png", - "addresses": { - "11155111": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "1993": "0xE61e5ed4c4f198c5384Ef57E69aAD1eF0c911004", - "84532": "0x036CbD53842c5426634e7929541eC2318f3dCF7e" - } - }, - { - "name": "Wrapped ETH", - "decimals": 18, - "symbol": "WETH", - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/8cee462de2cc16eed81ded90ced5dbd64f7145cb/blockchains/optimism/assets/0x4200000000000000000000000000000000000006/logo.png", - "addresses": { - "11155111": "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14", - "1993": "0x3538f4C55893eDca690D1e4Cf9Fb61FB70cd0DD8", - "84532": "0x4200000000000000000000000000000000000006" - } - } -] -``` - -## Parameters - -- `getAvailableTokens()`: A function that fetches the list of available tokens from the Sprinter Intent Engine. This is automatically triggered when `SprinterContext` is initialized, but can be called manually if needed. - -## Notes - -- **Automatic Fetch**: When `SprinterContext` is initialized, the `getAvailableTokens` function is automatically called to pre-fetch token data. -- If the tokens have already been fetched, the hook will return the cached list to optimize performance. -- Tokens are fetched from Sprinter’s supported blockchain networks. diff --git a/docs/docs/04-react-sdk/04-methods-reference/useSprinterTransfers.md b/docs/docs/04-react-sdk/04-methods-reference/useSprinterTransfers.md deleted file mode 100644 index 3c97c56..0000000 --- a/docs/docs/04-react-sdk/04-methods-reference/useSprinterTransfers.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -id: use-sprinter-transfers -title: useSprinterTransfers -sidebar_position: 5 ---- - -# `useSprinterTransfers` - -The `useSprinterTransfers` hook provides a simplified interface for generating cross-chain transfer solutions and contract calls using the Sprinter Intent Engine. This hook wraps the following SDK methods: - -- `getTransfer`: Single-hop token transfers across chains. -- `getTransferWithHook`: Single-hop token transfers combined with a contract call on the destination chain. -- `getPoolAssetOnDestination`: Aggregates token balances across multiple chains into a single destination. -- `getPoolAssetOnDestinationWithHook`: Aggregates token balances and performs a contract call on the destination chain. -- `getSweep`: A function that generates a quote to transfer the full token balances of source chains to a destination chain - -You can trigger any of these methods via the hook to fetch a cross-chain solution. - -## Usage - -### Example - -```tsx -import { useSprinterTransfers } from "@chainsafe/sprinter-react"; -import React, { useEffect } from "react"; - -function TransferComponent() { - const { solution, getPoolAssetOnDestination } = useSprinterTransfers(); - - useEffect(() => { - const settings = { - account: "0xYourAddress", - destinationChain: 11155111, // Sepolia Testnet - token: "USDC", - amount: 1000000, // 1 USDC (smallest denomination) - sourceChains: [84532, 1993], // Optional: source chains to consider - }; - - getPoolAssetOnDestination(settings); // Fetch transfer solution when the component mounts - }, [getPoolAssetOnDestination]); - - if (solution.loading) return
Loading transfer solution...
; - if (solution.error) return
Error fetching transfer solution: {solution.error}
; - - return
Transfer Solution: {JSON.stringify(solution.data)}
; -} -``` - -## Return Value - -The `useSprinterTransfers` hook returns an object with the following properties: - -- **`solution`**: An object containing: - - - `data`: The transfer solution, or `null` if not yet retrieved. - - `loading`: A boolean indicating if the solution is being fetched. - - `error`: A string containing the error message if the fetch fails. - -- **`getTransfer`**: A function that generates a single-hop token transfer solution. -- **`getTransferWithHook`**: A function that generates a single-hop token transfer combined with a contract call. -- **`getPoolAssetOnDestination`**: A function that generates a solution to aggregate balances from multiple chains into a single destination. -- **`getPoolAssetOnDestinationWithHook`**: A function that generates a solution to aggregate balances and execute a contract call on the destination chain. -- **`getSweep`**: A function that generates a quote to transfer the full token balances of source chains to a destination chain - -## Example Response - -Here’s an example of what the `solution.data` might look like after calling `getPoolAssetOnDestination()`: - -```json -[ - { - "sourceChain": 84532, - "destinationChain": 11155111, - "sourceTokenAddress": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", - "destinationTokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238", - "amount": "1000000", - "duration": 60000, - "fee": { "amount": "100000", "amountUSD": 0.1 }, - "gasCost": { "amount": "200000", "amountUSD": 0.02 }, - "tool": { - "name": "Sygma", - "logoURI": "https://sygma.com/logo.png" - }, - "transaction": { - "from": "0xYourAddress", - "to": "0xBridgeContractAddress", - "value": "0", - "data": "0x...", - "gasPrice": "0x...", - "gasLimit": "0x..." - } - } -] -``` - -## Parameters - -Each method accepts a `settings` parameter, which varies depending on the operation: - -- **`getTransfer`**: See [SDK Transfer Method Reference](../../sdk/methods-reference/transfer/transfer). -- **`getTransferWithHook`**: See [SDK Transfer with Contract Call Method Reference](../../sdk/methods-reference/transfer/transfer-with-hook). -- **`getPoolAssetOnDestination`**: See [SDK Pool Asset Method Reference](../../sdk/methods-reference/pool-asset-on-destination/pool-asset-on-destination). -- **`getPoolAssetOnDestinationWithHook`**: See [SDK Pool Asset with Contract Call Method Reference](../../sdk/methods-reference/pool-asset-on-destination/pool-asset-on-destination-with-hook). -- **`getSweep`**: See [Sweep Method Reference](../../sdk/methods-reference/transfer/sweep). - -Each method calls the Sprinter SDK's corresponding function and returns the intent-based solution for cross-chain transfers or contract calls. diff --git a/docs/docs/04-react-sdk/index.md b/docs/docs/04-react-sdk/index.md deleted file mode 100644 index 0b193da..0000000 --- a/docs/docs/04-react-sdk/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -id: react-sdk-overview -title: React SDK -sidebar_position: 4 ---- - -# React SDK Overview - -The **Sprinter React SDK** provides a set of tools and hooks to interact with the Sprinter Intent Engine directly within React applications. It allows developers to easily manage cross-chain balance aggregation and bridging solutions using React components. - -## Key Features - -- **Cross-Chain Balance Retrieval**: Fetch user balances across multiple supported blockchains. -- **Bridging Solutions**: Generate solutions for cross-chain token transfers and contract calls. -- **Contract Call Solutions**: Generate solutions to perform contract calls along with cross-chain transfers. -- **React Hooks**: Simplified and declarative access to Sprinter's core functionality through React hooks. - -## Use Cases - -1. **Balance Aggregation**: Aggregate a user’s balance for a specific token across multiple chains. -2. **Token Bridging**: Create bridging solutions to transfer tokens across different chains. -3. **Contract Interactions**: Retrieve solutions for executing contract calls while bridging tokens. - -For more detailed usage and examples, refer to the Methods Reference. diff --git a/docs/docs/05-breaking-changes.md b/docs/docs/05-breaking-changes.md deleted file mode 100644 index e6f78ff..0000000 --- a/docs/docs/05-breaking-changes.md +++ /dev/null @@ -1,326 +0,0 @@ ---- -id: breaking-changes -title: Breaking Changes -sidebar_position: 5 ---- - -# Breaking Changes - -## SDK from Version 0.3.0 to 1.0.0 - -### Summary of Changes: - -- **New Methods**: - - `poolAssetOnDestination`, `poolAssetOnDestinationWithHook`, `transfer`, and `transferWithHook` replace the old `getSolution` and `getCallSolution` methods. -- **Simplified API**: Each method now has a focused purpose, making it easier to understand and use. -- **Parameter Renaming**: `whitelistedSourceChains` has been renamed to `sourceChains` for clarity. - -
- **1. Method Refactoring** - -#### Old API: - -Previously, there were two primary methods: - -- `getSolution`: Used for both **balance aggregation** and **contract calls**. -- `getCallSolution`: Focused on **bridging with contract calls**. - -These methods were generalized, accepting complex and multifaceted parameters, which often led to confusion about the exact functionality. - -#### New API: - -The methods have been **separated and simplified** to offer more clarity and specialization. Now, there are four distinct methods: - -1. **`poolAssetOnDestination`**: - - - Used to **aggregate token balances** from multiple chains without contract interaction. - -2. **`poolAssetOnDestinationWithHook`**: - - - Used to **aggregate balances and perform a contract call** on the destination chain. - -3. **`transfer`**: - - - Focuses on a **single-hop token transfer** from one chain to another, without any contract call. - -4. **`transferWithHook`**: - - Transfers tokens with an **additional contract call** on the destination chain. - -#### Impact: - -- **Simpler API**: Users no longer need to handle complex or overloaded methods like `getSolution` or `getCallSolution`. Now, they can choose the right method for their needs. - -##### Example Change: - -- **Old usage (`getSolution`)**: - - ```ts - sprinter.getSolution({ - account: "0xYourAddressHere", - destinationChain: 11155111, - token: "USDC", - amount: 1000000, - contractCall: { - callData: "0xabcdef", - contractAddress: "0xContractAddress", - gasLimit: 21000, - }, - }); - ``` - -- **New usage (`poolAssetOnDestinationWithHook`)**: - ```ts - sprinter.poolAssetOnDestinationWithHook({ - account: "0xYourAddressHere", - destinationChain: 11155111, - token: "USDC", - amount: 1000000, - contractCall: { - callData: "0xabcdef", - contractAddress: "0xContractAddress", - gasLimit: 21000, - }, - }); - ``` - -
- -
- **2. Parameter Name Changes** - -#### Old API: - -- **`whitelistedSourceChains`**: A parameter that allowed users to specify which source chains were eligible for the solution. - -#### New API: - -- **`sourceChains`**: The same functionality has been retained but with a **simpler, cleaner name**. - -#### Impact: - -- **No change in functionality**: The purpose of this parameter remains the same. -- **Migration Tip**: Users should simply update the parameter name in their code. - -##### Example Change: - -- **Old usage (`whitelistedSourceChains`)**: - - ```ts - sprinter.getSolution({ - account: "0xYourAddressHere", - destinationChain: 11155111, - token: "USDC", - amount: 1000000, - whitelistedSourceChains: [84532, 137], - }); - ``` - -- **New usage (`sourceChains`)**: - ```ts - sprinter.poolAssetOnDestination({ - account: "0xYourAddressHere", - destinationChain: 11155111, - token: "USDC", - amount: 1000000, - sourceChains: [84532, 137], - }); - ``` - -
- ---- - -## React SDK Refactor: From Version 0.2.1 to 0.3.0 - -### Summary of Changes: - -- **New Methods**: - - `getTransfer`, `getTransferWithHook`, `getPoolAssetOnDestination`, and `getPoolAssetOnDestinationWithHook` replace the old `getSolution` and `getCallSolution` methods. -- **Parameter Structure**: Methods now accept a single object as a parameter, instead of individual arguments. -- **Parameter Renaming**: `whitelistedSourceChains` has been renamed to `sourceChains`. -- **SDK as Peer Dependency**: The `@chainsafe/sprinter-sdk` is now a peer dependency, simplifying updates. - -
- **1. Method Refactoring** - -#### Old API: - -Previously, there were two primary methods in the React SDK: - -- `getSolution`: Used for both **balance aggregation** and **contract calls**. -- `getCallSolution`: Focused on **bridging with contract calls**. - -These methods were generalized, requiring multiple parameters, leading to confusion about their exact purpose. - -#### New API: - -The methods have been split into specialized methods to clarify their purpose: - -1. **`getPoolAssetOnDestination`**: - - - Handles **balance aggregation** from multiple chains without contract interaction. - -2. **`getPoolAssetOnDestinationWithHook`**: - - - Handles **balance aggregation** from multiple chains with a contract call on the destination chain. - -3. **`getTransfer`**: - - - Used for **single-hop transfers** between chains without any contract call. - -4. **`getTransferWithHook`**: - - Used for **single-hop transfers** with a contract call on the destination chain. - -#### Impact: - -- **Simplified API**: Users no longer need to manage overloaded methods. Instead, each method has a clear, focused purpose, reducing complexity. - -##### Example Change: - -- **Old usage (`getSolution`)**: - - ```ts - getSolution(account, destinationChain, token, amount, threshold, whitelistedSourceChains); - ``` - -- **New usage (`getTransferWithHook`)**: - ```ts - getTransferWithHook({ - account, - destinationChain, - token, - amount, - threshold, - sourceChains, - }); - ``` - -
- -
- **2. Parameter Structure Changes** - -#### Old API: - -In previous versions, parameters were passed individually for each method: - -```typescript -getSolution( - account: Address, - destinationChain: ChainID, - token: TokenSymbol, - amount: number, - threshold?: number, - whitelistedSourceChains?: ChainID[] -) -``` - -#### New API: - -Now, methods accept a **single object** as an argument (e.g., `settings`). This aligns with the SDK design, making it easier to manage and extend. - -```typescript -getTransfer({ - account, - destinationChain, - token, - amount, - threshold, - sourceChains, -}); -``` - -#### Impact: - -- **Migration Tip**: Instead of passing individual parameters, pass a single object that encapsulates all the necessary values. - -##### Example Change: - -- **Old Usage**: - - ```typescript - getSolution(account, destinationChain, token, amount, threshold, whitelistedSourceChains); - ``` - -- **New Usage**: - ```typescript - getTransfer({ - account, - destinationChain, - token, - amount, - threshold, - sourceChains, - }); - ``` - -
- -
- **3. Parameter Renaming** - -#### Old API: - -- **`whitelistedSourceChains`**: This parameter allowed users to specify the source chains for bridging. - -#### New API: - -- **`sourceChains`**: The functionality remains the same, but the name has been simplified for clarity. - -#### Impact: - -- **No change in functionality**: Users just need to update their code to use the new parameter name. - -##### Example Change: - -- **Old usage**: - - ```ts - getSolution({ - account: "0xYourAddressHere", - destinationChain: 11155111, - token: "USDC", - amount: 1000000, - whitelistedSourceChains: [84532, 137], - }); - ``` - -- **New usage**: - ```ts - getTransfer({ - account: "0xYourAddressHere", - destinationChain: 11155111, - token: "USDC", - amount: 1000000, - sourceChains: [84532, 137], - }); - ``` - -
- -
- **4. SDK as Peer Dependency** - -#### Old Setup: - -Previously, the React SDK bundled the `@chainsafe/sprinter-sdk` as a regular dependency. This meant that updating the SDK required updating the React SDK at the same time. - -#### New Setup: - -`@chainsafe/sprinter-sdk` is now a **peer dependency**, which allows independent updates to the SDK without needing to update the React SDK. - -#### Impact: - -- **Migration Tip**: Ensure that `@chainsafe/sprinter-sdk` is installed as a dependency in your project. - -##### Example (`package.json`): - -```json -{ - "peerDependencies": { - "@chainsafe/sprinter-sdk": "^0.4.0" - } -} -``` - -
diff --git a/docs/docs/05-sprnt.md b/docs/docs/05-sprnt.md new file mode 100644 index 0000000..41fa8f6 --- /dev/null +++ b/docs/docs/05-sprnt.md @@ -0,0 +1,40 @@ +--- +id: sprnt-token +title: SPRNT +sidebar_position: 5 +--- + +# SPRNT Token + +SPRNT is the native governance and utility token of the Sprinter Protocol. It is used to incentivize liquidity providers, solvers, and community participants. + +## Key Features & Utility + +### Governance + +- Stake SPRNT to earn **veSPRNT** +- Participate in on-chain governance decisions + +### Incentives & Rewards + +- Distributed to LPs and solvers for protocol usage +- Used to bootstrap solver routes and usage + +### Safety Module + +- SPRNT can be staked to secure the protocol +- Rewards are earned in exchange for risk of slashing + +### Bonding Pools + +- Solvers can create Bonding Pools, where SPRNT can be bonded +- Bonded SPRNT will allow solvers to have more favourable borrowing conditions +- Bonding Pools will be controlled by governance and include slashing mechanisms + +## Token Supply & Allocation + +- **Total Supply:** 1,000,000,000 SPRNT +- **Token Standard:** xERC20 +- **Network:** Ethereum Mainnet + +More details on the token generation event and distribution will be released soon. diff --git a/docs/docs/06-fees.md b/docs/docs/06-fees.md new file mode 100644 index 0000000..64c174d --- /dev/null +++ b/docs/docs/06-fees.md @@ -0,0 +1,59 @@ +--- +id: sprnt-fees +title: Fees +sidebar_position: 6 +--- + +# Protocol Fees + +## Sprinter Stash + +Sprinter Stash handles cross-chain liquidity fills. Revenue is generated from the spread between source and destination values. + +### Revenue Components + +- **Fill Revenue:** User deposit on source - amount bridged to destination. +- **Borrow Costs:** Cost of liquidity borrowing and cross-chain repayment. +- **Solver Costs:** Gas fees and execution costs fronted by solvers. + +### Profit Calculation + +``` +Fill Profit = Fill Revenue - Borrow Costs - Solver Costs +``` + +### Monthly Distribution + +1. Withdraw raw profits from liquidity pools. +2. Deduct solver gas costs. +3. Distribute monthly fill profits to: + +| Actor | Description | Fill Profit % | +| -------- | ------------------------------------- | ------------- | +| Solvers | For executing fills | 50% | +| LPs | For providing liquidity | 50% | +| Treasury | Protocol growth & sustainability fund | TBD | + +➡️ _Initial fee split is reviewed monthly by governance._ + +## Solving API Revenue Share + +When a fixed user fee is applied through Sprinter API, revenue is shared with partners based on usage volume. + +### Fee Discount Tiers + +| Monthly Volume (USD) | Sprinter Fee (X%) | Discount | +| -------------------- | ----------------- | -------- | +| $0 - $1M | X \* 0.20 | 0% | +| $1M - $10M | X \* 0.15 | 25% | +| $10M - $50M | X \* 0.10 | 50% | +| $50M - $100M | X \* 0.075 | 62.5% | +| Over $100M | X \* 0.05 | 75% | + +### Example + +``` +User Fee = 0.875% +Monthly Volume = $150M +Sprinter Fee = 0.875% * 0.05 = 0.04375% (4.375 bps) +``` diff --git a/docs/docs/07-governance.md b/docs/docs/07-governance.md new file mode 100644 index 0000000..7fb64e0 --- /dev/null +++ b/docs/docs/07-governance.md @@ -0,0 +1,46 @@ +--- +id: governance +title: Governance +sidebar_position: 7 +--- + +# Governance + +Sprinter Protocol governance is currently managed via two multisigs, with plans to gradually transition to community control. + +## Governance Structure + +### 1. Operations Admin Multisig + +- **Type:** 3-of-6 +- **Managed by:** Sprinter Labs team +- **Responsibilities:** + - Routine upgrades + - Profit withdrawals + - Emergency pauses + +#### Roles: + +- `DEPOSIT_PROFIT_ROLE` +- `WITHDRAW_PROFIT` +- `PAUSER` +- `REBALANCE` + +### 2. Super Admin Multisig + +- **Type:** 3-of-6 +- **Managed by:** Ethereum community members +- **Responsibilities:** + - Upgrading protocol contracts + - Asset and configuration adjustments + +#### Roles: + +- `ASSETS_ADJUSTER` +- `ADMIN` (Upgrades) + +## Long-Term Vision + +- Gradual shift to veSPRNT-based DAO governance +- Protocol parameters and fee splits managed by tokenholders +- On-chain voting for upgrades, integrations, emissions diff --git a/docs/docs/08-partnerships.md b/docs/docs/08-partnerships.md new file mode 100644 index 0000000..5e61208 --- /dev/null +++ b/docs/docs/08-partnerships.md @@ -0,0 +1,22 @@ +--- +id: partnerships +title: Partnerships +sidebar_position: 8 +--- + +# Partnerships & Collaborations + +Sprinter is currently operating in private beta and selectively partnering with forward-thinking teams. + +## Who We're Looking to Partner With + +- **Cross-Chain DEXs & Intent-Based Protocols** +- **dApps & Wallets** seeking seamless cross-chain execution +- **Liquidity Providers** interested in sustainable, high-yield opportunities + +## Get in Touch + +- **Email:** [hello@sprinter.tech](mailto:hello@sprinter.tech) +- **Telegram:** [@sprinter_tech](https://t.me/sprinter_tech) + +Let’s build the future of cross-chain liquidity together. diff --git a/docs/docs/09-Resources.md b/docs/docs/09-Resources.md new file mode 100644 index 0000000..3fdd565 --- /dev/null +++ b/docs/docs/09-Resources.md @@ -0,0 +1,10 @@ +--- +id: resources +title: Resources +sidebar_position: 9 +--- + +## Audits + +- [Sprinter Hub](https://github.com/sprintertech/sprinter-stash-contracts/blob/main/audits/VAR_Sygma_labs_Sprinter_liquidity_250212-final.pdf) +- [Sprinter Liquidity Pools](https://github.com/sprintertech/sprinter-stash-contracts/blob/main/audits/VAR_Sygma_labs_Sprinter_liquidity_250212-final.pdf) diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 0c8b8af..c4e6ecc 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -4,13 +4,13 @@ import type * as Preset from "@docusaurus/preset-classic"; const config: Config = { title: "Sprinter", - tagline: "Multichain interactions that feel like one", + tagline: "The Fast Lane For Crosschain", favicon: "img/sprinter.ico", url: "https://docs.sprinter.buildwithsygma.com/", baseUrl: "/", - organizationName: "ChainSafe", + organizationName: "Sprinter", projectName: "sprinter-ts", onBrokenLinks: "throw", @@ -50,11 +50,10 @@ const config: Config = { alt: "Sprinter Temp Logo", src: "img/sprinter-logo.svg", srcDark: "img/sprinter-logo-white.svg", - href: "sprinter.tech", }, items: [ { - href: "https://app.sprinter.tech", + href: "https://app.sprinter.tech/", label: "Stash", position: "left", }, @@ -64,7 +63,7 @@ const config: Config = { position: "right", }, { - href: "https://github.com/ChainSafe/sprinter-ts", + href: "https://github.com/sprintertech", label: "GitHub", position: "right", }, @@ -137,32 +136,6 @@ const config: Config = { }, } satisfies Preset.ThemeConfig, plugins: [ - [ - 'docusaurus-plugin-openapi-docs', - { - id: 'default', - docsPluginId: 'classic', - config: { - stash: { - specPath: 'static/api/stash-openapi.yaml', - outputDir: 'docs/api/stash', - sidebarOptions: { - groupPathsBy: 'tag', - categoryLinkSource: 'tag', - }, - }, - solve: { - specPath: 'static/api/solve-openapi.yaml', - outputDir: 'docs/api/solve', - sidebarOptions: { - groupPathsBy: 'tag', - categoryLinkSource: 'tag', - }, - }, - }, - }, - ], - ], [ require.resolve("@cmfcmf/docusaurus-search-local"), { diff --git a/docs/package.json b/docs/package.json index 3de9a09..23d1879 100644 --- a/docs/package.json +++ b/docs/package.json @@ -29,9 +29,12 @@ "d3": "^7.9.0", "d3-sankey": "^0.12.3", "docusaurus-plugin-openapi-docs": "^4.3.7", + "mobx": "^6.13.7", "prism-react-renderer": "^2.3.1", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "redoc": "^2.4.0", + "styled-components": "^6.1.17" }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.5.2", diff --git a/docs/src/components/SwaggerUI.jsx b/docs/src/components/SwaggerUI.jsx new file mode 100644 index 0000000..61a3e2f --- /dev/null +++ b/docs/src/components/SwaggerUI.jsx @@ -0,0 +1,32 @@ +import React from "react"; +import { RedocStandalone } from "redoc"; + +export default function SwaggerUI({ specUrl }) { + return ( +
+ +
+ ); +} diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index e77fbc9..01bd778 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -47,3 +47,25 @@ [data-theme="dark"] .logo-dark-mode { display: block; } + +/* custom.css */ + +/* Container for the Swagger UI to adjust width and margins */ +.swagger-container { + max-width: 1200px; /* Set your desired max width */ + margin: 0 auto; /* Center align */ + padding: 20px; /* Add some padding around */ + overflow-x: auto; /* Ensure horizontal scroll if content is too wide */ +} + +/* Custom Redoc styling */ +.swagger-container .redoc-wrap { + background-color: #f4f6f9; /* Optional: Set background color */ + border-radius: 8px; /* Optional: Rounded corners */ +} + +/* Optional: Add scroll bar on long API descriptions */ +.swagger-container .redoc-scroll-wrap { + max-height: 800px; /* Set max height for scrollable area */ + overflow-y: auto; /* Vertical scrolling */ +} diff --git a/docs/static/api/solve-openapi.yaml b/docs/static/api/solve-openapi.yaml index 90415ce..b9dc2dc 100644 --- a/docs/static/api/solve-openapi.yaml +++ b/docs/static/api/solve-openapi.yaml @@ -45,19 +45,19 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" 401: description: Unauthorized - Invalid API key content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" 500: description: Internal server error content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" /route: get: @@ -103,19 +103,19 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" 401: description: Unauthorized - Invalid API key content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" 500: description: Internal server error content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" /v2/route: get: @@ -170,19 +170,19 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" 401: description: Unauthorized - Invalid API key content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" 500: description: Internal server error content: application/json: schema: - $ref: '#/components/schemas/Error' + $ref: "#/components/schemas/Error" components: securitySchemes: diff --git a/docs/static/api/stash-openapi.yaml b/docs/static/api/stash-openapi.yaml index abf29ae..a881917 100644 --- a/docs/static/api/stash-openapi.yaml +++ b/docs/static/api/stash-openapi.yaml @@ -8,9 +8,9 @@ definitions: priceOracle: type: string required: - - pool - - poolAddressProvider - - priceOracle + - pool + - poolAddressProvider + - priceOracle type: object entity.Amount: properties: @@ -21,37 +21,37 @@ definitions: amountUSD: type: number required: - - amount - - amountUSD + - amount + - amountUSD type: object entity.ChainID: enum: - - 1 - - 42161 - - 10 - - 137 - - 8453 - - 43114 - - 100 - - 8333 - - 11155111 - - 1993 - - 19934 - - 84532 + - 1 + - 42161 + - 10 + - 137 + - 8453 + - 43114 + - 100 + - 8333 + - 11155111 + - 1993 + - 19934 + - 84532 type: integer x-enum-varnames: - - Ethereum - - Arbitrum - - Optimism - - Polygon - - Base - - Avalanche - - Gnosis - - B3 - - Sepolia - - B3Sepolia - - B4Sepolia - - BaseSepolia + - Ethereum + - Arbitrum + - Optimism + - Polygon + - Base + - Avalanche + - Gnosis + - B3 + - Sepolia + - B3Sepolia + - B4Sepolia + - BaseSepolia entity.FungibleToken: properties: addresses: @@ -70,11 +70,11 @@ definitions: symbol: type: string required: - - addresses - - decimals - - logoURI - - name - - symbol + - addresses + - decimals + - logoURI + - name + - symbol type: object entity.NativeToken: properties: @@ -83,19 +83,19 @@ definitions: name: type: string required: - - decimals - - name + - decimals + - name type: object entity.Network: properties: aave: - $ref: '#/definitions/entity.Aave' + $ref: "#/definitions/entity.Aave" aaveLiquidityPool: type: string blockTime: type: integer chainID: - $ref: '#/definitions/entity.ChainID' + $ref: "#/definitions/entity.ChainID" chainType: type: string logoURI: @@ -103,7 +103,7 @@ definitions: name: type: string nativeToken: - $ref: '#/definitions/entity.NativeToken' + $ref: "#/definitions/entity.NativeToken" rpcURLs: items: type: string @@ -111,16 +111,16 @@ definitions: usdcLiquidityPool: type: string required: - - aave - - aaveLiquidityPool - - blockTime - - chainID - - chainType - - logoURI - - name - - nativeToken - - rpcURLs - - usdcLiquidityPool + - aave + - aaveLiquidityPool + - blockTime + - chainID + - chainType + - logoURI + - name + - nativeToken + - rpcURLs + - usdcLiquidityPool type: object entity.TokenTransferQuote: properties: @@ -131,44 +131,44 @@ definitions: approvals: description: approvals that need to be executed before transaction items: - $ref: '#/definitions/entity.Transaction' + $ref: "#/definitions/entity.Transaction" type: array destinationChain: - $ref: '#/definitions/entity.ChainID' + $ref: "#/definitions/entity.ChainID" destinationTokenAddress: type: string duration: description: how long transfer will take in seconds type: number fee: - $ref: '#/definitions/entity.Amount' + $ref: "#/definitions/entity.Amount" gasCost: - $ref: '#/definitions/entity.Amount' + $ref: "#/definitions/entity.Amount" senderAddress: type: string sourceChain: - $ref: '#/definitions/entity.ChainID' + $ref: "#/definitions/entity.ChainID" sourceTokenAddress: type: string tool: - $ref: '#/definitions/entity.Tool' + $ref: "#/definitions/entity.Tool" transaction: allOf: - - $ref: '#/definitions/entity.Transaction' + - $ref: "#/definitions/entity.Transaction" description: transaction request to be sent to the wallet required: - - amount - - approvals - - destinationChain - - destinationTokenAddress - - duration - - fee - - gasCost - - senderAddress - - sourceChain - - sourceTokenAddress - - tool - - transaction + - amount + - approvals + - destinationChain + - destinationTokenAddress + - duration + - fee + - gasCost + - senderAddress + - sourceChain + - sourceTokenAddress + - tool + - transaction type: object entity.Tool: properties: @@ -177,13 +177,13 @@ definitions: name: type: string required: - - logoURI - - name + - logoURI + - name type: object entity.Transaction: properties: chainId: - $ref: '#/definitions/entity.ChainID' + $ref: "#/definitions/entity.ChainID" data: type: string from: @@ -195,30 +195,30 @@ definitions: value: type: string required: - - chainId - - data - - from - - gasLimit - - to - - value + - chainId + - data + - from + - gasLimit + - to + - value type: object server.AccountFungibleBalanceHandler.response: properties: data: items: - $ref: '#/definitions/server.chainBalance' + $ref: "#/definitions/server.chainBalance" type: array required: - - data + - data type: object server.AggregateBalanceSolutionHandler.response: properties: data: items: - $ref: '#/definitions/entity.TokenTransferQuote' + $ref: "#/definitions/entity.TokenTransferQuote" type: array required: - - data + - data type: object server.AggregateWithHookSolutionHandler.request: properties: @@ -227,7 +227,7 @@ definitions: amount: type: string destination: - $ref: '#/definitions/entity.ChainID' + $ref: "#/definitions/entity.ChainID" destinationContractCall: properties: approvalAddress: @@ -241,9 +241,9 @@ definitions: outputTokenAddress: type: string required: - - callData - - contractAddress - - gasLimit + - callData + - contractAddress + - gasLimit type: object threshold: type: string @@ -251,44 +251,44 @@ definitions: type: string type: enum: - - fungible + - fungible type: string whitelistedSourceChains: items: - $ref: '#/definitions/entity.ChainID' + $ref: "#/definitions/entity.ChainID" type: array whitelistedTools: items: type: string type: array required: - - account - - amount - - destination - - destinationContractCall - - threshold - - token - - type - - whitelistedSourceChains - - whitelistedTools + - account + - amount + - destination + - destinationContractCall + - threshold + - token + - type + - whitelistedSourceChains + - whitelistedTools type: object server.AggregateWithHookSolutionHandler.response: properties: data: items: - $ref: '#/definitions/entity.TokenTransferQuote' + $ref: "#/definitions/entity.TokenTransferQuote" type: array required: - - data + - data type: object server.BalanceSweepHandler.response: properties: data: items: - $ref: '#/definitions/entity.TokenTransferQuote' + $ref: "#/definitions/entity.TokenTransferQuote" type: array required: - - data + - data type: object server.BorrowCost: description: Borrow cost structure with a big.Int represented as string @@ -302,17 +302,17 @@ definitions: signature: type: string required: - - borrowCost - - liquidityPool - - nonce - - signature + - borrowCost + - liquidityPool + - nonce + - signature type: object server.BorrowQuote.response: properties: data: - $ref: '#/definitions/server.Quote' + $ref: "#/definitions/server.Quote" required: - - data + - data type: object server.ErrorResponse: properties: @@ -321,35 +321,35 @@ definitions: error: type: string required: - - debug - - error + - debug + - error type: object server.GetFungibleTokensByChainHandler.response: properties: data: items: - $ref: '#/definitions/entity.FungibleToken' + $ref: "#/definitions/entity.FungibleToken" type: array required: - - data + - data type: object server.GetNetworksHandler.response: properties: data: items: - $ref: '#/definitions/entity.Network' + $ref: "#/definitions/entity.Network" type: array required: - - data + - data type: object server.GetSupportedFungibleTokens.response: properties: data: items: - $ref: '#/definitions/entity.FungibleToken' + $ref: "#/definitions/entity.FungibleToken" type: array required: - - data + - data type: object server.GetSupportedToolsHandler.response: properties: @@ -358,14 +358,14 @@ definitions: type: string type: array required: - - tools + - tools type: object server.HealthHandler.response: properties: status: type: string required: - - status + - status type: object server.Quote: properties: @@ -378,10 +378,10 @@ definitions: requiredOutput: type: string required: - - borrowCost - - duration - - requiredInput - - requiredOutput + - borrowCost + - duration + - requiredInput + - requiredOutput type: object server.SingleHopWithHookHandler.request: properties: @@ -390,7 +390,7 @@ definitions: amount: type: string destination: - $ref: '#/definitions/entity.ChainID' + $ref: "#/definitions/entity.ChainID" destinationContractCall: properties: approvalAddress: @@ -404,9 +404,9 @@ definitions: outputTokenAddress: type: string required: - - callData - - contractAddress - - gasLimit + - callData + - contractAddress + - gasLimit type: object enableSwaps: type: boolean @@ -418,37 +418,37 @@ definitions: type: string type: enum: - - fungible + - fungible type: string whitelistedSourceChains: items: - $ref: '#/definitions/entity.ChainID' + $ref: "#/definitions/entity.ChainID" type: array whitelistedTools: items: type: string type: array required: - - account - - amount - - destination - - destinationContractCall - - enableSwaps - - recipient - - threshold - - token - - type - - whitelistedSourceChains - - whitelistedTools + - account + - amount + - destination + - destinationContractCall + - enableSwaps + - recipient + - threshold + - token + - type + - whitelistedSourceChains + - whitelistedTools type: object server.SingleHopWithHookHandler.response: properties: data: items: - $ref: '#/definitions/entity.TokenTransferQuote' + $ref: "#/definitions/entity.TokenTransferQuote" type: array required: - - data + - data type: object server.chainBalance: properties: @@ -461,474 +461,119 @@ definitions: tokenDecimals: type: integer required: - - balance - - chainId - - tokenDecimals + - balance + - chainId + - tokenDecimals type: object info: contact: {} paths: - /accounts/{account}/assets/fungible/{token}: - get: - consumes: - - application/json - description: Returns cross chain account balance in lowest denomination for - supported fungible token - parameters: - - description: Either token name or token symbol (case insensitive) - in: path - name: token - required: true - type: string - - description: Account address in hex format with 0x (case insensitive) - in: path - name: account - required: true - type: string - - description: comma separated list of source chain ids that can be used - in: query - name: whitelistedChains - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.AccountFungibleBalanceHandler.response' - "400": - description: Bad Request - schema: - $ref: '#/definitions/server.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns cross chain account balance for supported fungible token - /accounts/{account}/assets/native: - get: - consumes: - - application/json - description: Returns cross chain account balance in lowest denomination for - eth - parameters: - - description: Account address in hex format with 0x (case insensitive) - in: path - name: account - required: true - type: string - - description: comma separated list of source chain ids that can be used - in: query - name: whitelistedChains - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.AccountFungibleBalanceHandler.response' - "400": - description: Bad Request - schema: - $ref: '#/definitions/server.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns cross chain account balance for chains with eth as native token - /assets/fungible: - get: - consumes: - - application/json - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.GetSupportedFungibleTokens.response' - summary: Returns supported tokens - /assets/fungible/{token}: - get: - consumes: - - application/json - description: Using given token name or symbol it will return fungible token - details - parameters: - - description: Either token name or token symbol (case insensitive) - in: path - name: token - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/entity.FungibleToken' - "404": - description: Not Found - schema: - $ref: '#/definitions/server.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns supported fungible token details - /health: - get: - consumes: - - application/json - description: health check - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.HealthHandler.response' - summary: health check /liquidity/protocol/{protocol}/deposit/{txHash}/request: get: consumes: - - application/json + - application/json description: Get the borrow cost for a liquidity transaction parameters: - - description: input data (relay data) - in: body - name: Input - required: true - schema: + - description: input data (relay data) + in: body + name: Input + required: true + schema: + type: string + - description: caller address (solver address) + in: body + name: Caller + required: true + schema: + type: string + - description: Protocol + in: path + name: protocol + required: true type: string - - description: caller address (solver address) - in: body - name: Caller - required: true - schema: + - description: Transaction hash for the deposit + in: path + name: txHash + required: true type: string - - description: Protocol - in: path - name: protocol - required: true - type: string - - description: Transaction hash for the deposit - in: path - name: txHash - required: true - type: string produces: - - application/json + - application/json responses: "200": description: OK schema: - $ref: '#/definitions/server.BorrowCost' + $ref: "#/definitions/server.BorrowCost" "400": description: Bad request due to invalid input or missing parameters schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: "#/definitions/server.ErrorResponse" "500": description: Internal server error schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: "#/definitions/server.ErrorResponse" summary: Get the borrow cost for a liquidity transaction tags: - - Liquidity + - Liquidity /liquidity/protocol/{protocol}/type/{type}/quote: get: consumes: - - application/json - description: This endpoint calculates the borrow quote for a liquidity transaction, + - application/json + description: + This endpoint calculates the borrow quote for a liquidity transaction, including the borrow cost, required input/output, and duration. parameters: - - description: Amount to borrow - in: body - name: amount - required: true - schema: + - description: Amount to borrow + in: body + name: amount + required: true + schema: + type: string + - description: Token address (in Ethereum address format) + in: body + name: token + required: true + schema: + type: string + - description: Network ID for the transaction + in: body + name: network + required: true + schema: + type: integer + - description: Protocol name (e.g., Across) + in: path + name: protocol + required: true type: string - - description: Token address (in Ethereum address format) - in: body - name: token - required: true - schema: + - description: Quote algorithm type (e.g., ExactInput, ExactOutput) + in: path + name: type + required: true type: string - - description: Network ID for the transaction - in: body - name: network - required: true - schema: + - description: + Destination Network ID (optional, defaults to the network from + the request body) + in: query + name: network type: integer - - description: Protocol name (e.g., Across) - in: path - name: protocol - required: true - type: string - - description: Quote algorithm type (e.g., ExactInput, ExactOutput) - in: path - name: type - required: true - type: string - - description: Destination Network ID (optional, defaults to the network from - the request body) - in: query - name: network - type: integer produces: - - application/json + - application/json responses: "200": description: Successfully retrieved borrow quote schema: - $ref: '#/definitions/server.BorrowQuote.response' + $ref: "#/definitions/server.BorrowQuote.response" "400": description: Bad request due to invalid input or missing parameters schema: - $ref: '#/definitions/server.ErrorResponse' + $ref: "#/definitions/server.ErrorResponse" "500": description: Internal server error schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Get the borrow quote for a liquidity transaction based on the input + $ref: "#/definitions/server.ErrorResponse" + summary: + Get the borrow quote for a liquidity transaction based on the input data tags: - - Liquidity - /networks: - get: - consumes: - - application/json - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.GetNetworksHandler.response' - summary: Returns all supported networks - /networks/{chainID}/assets/fungible: - get: - consumes: - - application/json - parameters: - - description: Chain ID - in: path - name: chainID - required: true - type: integer - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.GetFungibleTokensByChainHandler.response' - "400": - description: Bad Request - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns supported tokens on a chain defined by given chainID - /solution/call: - post: - consumes: - - application/json - description: Endpoint will calculate best single-hop solution to execute crosschain - call. - parameters: - - description: request - in: body - name: request - required: true - schema: - $ref: '#/definitions/server.SingleHopWithHookHandler.request' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.SingleHopWithHookHandler.response' - "400": - description: Bad Request - schema: - $ref: '#/definitions/server.ErrorResponse' - "404": - description: Not Found - schema: - $ref: '#/definitions/server.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns only single hop soulution to do contract call on destination - /solutions/aggregation: - get: - consumes: - - application/json - description: Endpoint will calculate best combination of single-hop transfers - to - parameters: - - description: account address in hex format with 0x which will send and receive - funds - in: query - name: account - required: true - type: string - - description: id of destination chain - in: query - name: destination - required: true - type: integer - - description: supported token name or symbol - in: query - name: token - required: true - type: string - - description: min targeted amount of tokens on destination in lowest denomination - in: query - name: amount - required: true - type: string - - description: min amount of tokensto leave on source in lowest denomination - in: query - name: threshold - type: string - - description: comma separated list of source chain ids that can be used - in: query - name: whitelistedSourceChains - type: string - - description: comma separated list of tools that can be used for getting quote - in: query - name: whitelistedTools - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.AggregateBalanceSolutionHandler.response' - "400": - description: Bad Request - schema: - $ref: '#/definitions/server.ErrorResponse' - "404": - description: Not Found - schema: - $ref: '#/definitions/server.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns solution to aggregate fungible token balance on destination - post: - consumes: - - application/json - description: Endpoint will calculate best combination of single-hop transfers - to - parameters: - - description: request - in: body - name: request - required: true - schema: - $ref: '#/definitions/server.AggregateWithHookSolutionHandler.request' - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.AggregateWithHookSolutionHandler.response' - "400": - description: Bad Request - schema: - $ref: '#/definitions/server.ErrorResponse' - "404": - description: Not Found - schema: - $ref: '#/definitions/server.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns solution to aggregate fungible token balance on destination - and invoking contract call - /solutions/balance-sweep: - get: - consumes: - - application/json - description: Endpoint will return quote to transfer full token balances of source - chains to a destination chain - parameters: - - description: account address in hex format with 0x which will send funds - in: query - name: account - required: true - type: string - - description: recipient address in hex format with 0x which will receive funds - in: query - name: recipient - type: string - - description: id of destination chain - in: query - name: destination - required: true - type: integer - - description: supported token name or symbol - in: query - name: token - required: true - type: string - - description: comma separated list of source chain ids that can be used - in: query - name: whitelistedSourceChains - type: string - - description: comma separated list of tools that can be used for getting quote - in: query - name: whitelistedTools - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.BalanceSweepHandler.response' - "400": - description: Bad Request - schema: - $ref: '#/definitions/server.ErrorResponse' - "404": - description: Not Found - schema: - $ref: '#/definitions/server.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns solution to sweep all token balances - /tools: - get: - consumes: - - application/json - description: It will return the list of tools that is currently supported in - sprinter - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/server.GetSupportedToolsHandler.response' - "404": - description: Not Found - schema: - $ref: '#/definitions/server.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/server.ErrorResponse' - summary: Returns supported tools for quote service + - Liquidity swagger: "2.0" diff --git a/yarn.lock b/yarn.lock index 8e90fb2..75828d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1769,6 +1769,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.17.8": + version: 7.27.0 + resolution: "@babel/runtime@npm:7.27.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/35091ea9de48bd7fd26fb177693d64f4d195eb58ab2b142b893b7f3fa0f1d7c677604d36499ae0621a3703f35ba0c6a8f6c572cc8f7dc0317213841e493cf663 + languageName: node + linkType: hard + "@babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0": version: 7.25.0 resolution: "@babel/template@npm:7.25.0" @@ -2564,6 +2573,29 @@ __metadata: languageName: node linkType: hard +"@emotion/is-prop-valid@npm:1.2.2": + version: 1.2.2 + resolution: "@emotion/is-prop-valid@npm:1.2.2" + dependencies: + "@emotion/memoize": "npm:^0.8.1" + checksum: 10c0/bb1530dcb4e0e5a4fabb219279f2d0bc35796baf66f6241f98b0d03db1985c890a8cafbea268e0edefd5eeda143dbd5c09a54b5fba74cee8c69b98b13194af50 + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/memoize@npm:0.8.1" + checksum: 10c0/dffed372fc3b9fa2ba411e76af22b6bb686fb0cb07694fdfaa6dd2baeb0d5e4968c1a7caa472bfcf06a5997d5e7c7d16b90e993f9a6ffae79a2c3dbdc76dfe78 + languageName: node + linkType: hard + +"@emotion/unitless@npm:0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 10c0/a1ed508628288f40bfe6dd17d431ed899c067a899fa293a13afe3aed1d70fac0412b8a215fafab0b42829360db687fecd763e5f01a64ddc4a4b58ec3112ff548 + languageName: node + linkType: hard + "@esbuild-plugins/node-globals-polyfill@npm:^0.2.3": version: 0.2.3 resolution: "@esbuild-plugins/node-globals-polyfill@npm:0.2.3" @@ -3823,7 +3855,7 @@ __metadata: languageName: node linkType: hard -"@redocly/openapi-core@npm:^1.10.5": +"@redocly/openapi-core@npm:^1.10.5, @redocly/openapi-core@npm:^1.4.0": version: 1.34.1 resolution: "@redocly/openapi-core@npm:1.34.1" dependencies: @@ -5407,7 +5439,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -5706,6 +5738,20 @@ __metadata: languageName: node linkType: hard +"@types/stylis@npm:4.2.5": + version: 4.2.5 + resolution: "@types/stylis@npm:4.2.5" + checksum: 10c0/23f5b35a3a04f6bb31a29d404fa1bc8e0035fcaff2356b4047743a057e0c37b2eba7efe14d57dd2b95b398cea3bac294d9c6cd93ed307d8c0b7f5d282224b469 + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c + languageName: node + linkType: hard + "@types/unist@npm:*, @types/unist@npm:^3.0.0": version: 3.0.2 resolution: "@types/unist@npm:3.0.2" @@ -7452,6 +7498,13 @@ __metadata: languageName: node linkType: hard +"camelize@npm:^1.0.0": + version: 1.0.1 + resolution: "camelize@npm:1.0.1" + checksum: 10c0/4c9ac55efd356d37ac483bad3093758236ab686192751d1c9daa43188cc5a07b09bd431eb7458a4efd9ca22424bba23253e7b353feb35d7c749ba040de2385fb + languageName: node + linkType: hard + "caniuse-api@npm:^3.0.0": version: 3.0.0 resolution: "caniuse-api@npm:3.0.0" @@ -7658,6 +7711,13 @@ __metadata: languageName: node linkType: hard +"classnames@npm:^2.3.2": + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 + languageName: node + linkType: hard + "clean-css@npm:^5.2.2, clean-css@npm:^5.3.2, clean-css@npm:~5.3.2": version: 5.3.3 resolution: "clean-css@npm:5.3.3" @@ -8171,6 +8231,13 @@ __metadata: languageName: node linkType: hard +"css-color-keywords@npm:^1.0.0": + version: 1.0.0 + resolution: "css-color-keywords@npm:1.0.0" + checksum: 10c0/af205a86c68e0051846ed91eb3e30b4517e1904aac040013ff1d742019b3f9369ba5658ba40901dbbc121186fc4bf0e75a814321cc3e3182fbb2feb81c6d9cb7 + languageName: node + linkType: hard + "css-declaration-sorter@npm:^7.2.0": version: 7.2.0 resolution: "css-declaration-sorter@npm:7.2.0" @@ -8259,6 +8326,17 @@ __metadata: languageName: node linkType: hard +"css-to-react-native@npm:3.2.0": + version: 3.2.0 + resolution: "css-to-react-native@npm:3.2.0" + dependencies: + camelize: "npm:^1.0.0" + css-color-keywords: "npm:^1.0.0" + postcss-value-parser: "npm:^4.0.2" + checksum: 10c0/fde850a511d5d3d7c55a1e9b8ed26b69a8ad4868b3487e36ebfbfc0b96fc34bc977d9cd1d61a289d0c74d3f9a662d8cee297da53d4433bf2e27d6acdff8e1003 + languageName: node + linkType: hard + "css-tree@npm:^2.3.1": version: 2.3.1 resolution: "css-tree@npm:2.3.1" @@ -8382,7 +8460,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2": +"csstype@npm:3.1.3, csstype@npm:^3.0.2": version: 3.1.3 resolution: "csstype@npm:3.1.3" checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 @@ -8852,6 +8930,13 @@ __metadata: languageName: node linkType: hard +"decko@npm:^1.2.0": + version: 1.2.0 + resolution: "decko@npm:1.2.0" + checksum: 10c0/bae2187734b6faa9db1cf53b04bb107f79a55735d85c7511f941d7fd1cac36991ad2048dee8451dcbcb4efa23a46e5dfd46f71a51585457cd5b912869b5d346b + languageName: node + linkType: hard + "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -9145,9 +9230,12 @@ __metadata: d3: "npm:^7.9.0" d3-sankey: "npm:^0.12.3" docusaurus-plugin-openapi-docs: "npm:^4.3.7" + mobx: "npm:^6.13.7" prism-react-renderer: "npm:^2.3.1" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" + redoc: "npm:^2.4.0" + styled-components: "npm:^6.1.17" typescript: "npm:~5.2.2" languageName: unknown linkType: soft @@ -9254,6 +9342,18 @@ __metadata: languageName: node linkType: hard +"dompurify@npm:^3.0.6": + version: 3.2.5 + resolution: "dompurify@npm:3.2.5" + dependencies: + "@types/trusted-types": "npm:^2.0.7" + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 10c0/b564167cc588933ad2d25c185296716bdd7124e9d2a75dac76efea831bb22d1230ce5205a1ab6ce4c1010bb32ac35f7a5cb2dd16c78cbf382111f1228362aa59 + languageName: node + linkType: hard + "domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" @@ -10632,6 +10732,17 @@ __metadata: languageName: node linkType: hard +"fast-xml-parser@npm:^4.5.0": + version: 4.5.3 + resolution: "fast-xml-parser@npm:4.5.3" + dependencies: + strnum: "npm:^1.1.1" + bin: + fxparser: src/cli/cli.js + checksum: 10c0/bf9ccadacfadc95f6e3f0e7882a380a7f219cf0a6f96575149f02cb62bf44c3b7f0daee75b8ff3847bcfd7fbcb201e402c71045936c265cf6d94b141ec4e9327 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.17.1 resolution: "fastq@npm:1.17.1" @@ -13279,6 +13390,13 @@ __metadata: languageName: node linkType: hard +"lunr@npm:^2.3.9": + version: 2.3.9 + resolution: "lunr@npm:2.3.9" + checksum: 10c0/77d7dbb4fbd602aac161e2b50887d8eda28c0fa3b799159cee380fbb311f1e614219126ecbbd2c3a9c685f1720a8109b3c1ca85cc893c39b6c9cc6a62a1d8a8b + languageName: node + linkType: hard + "magic-string@npm:0.30.7": version: 0.30.7 resolution: "magic-string@npm:0.30.7" @@ -13367,6 +13485,15 @@ __metadata: languageName: node linkType: hard +"marked@npm:^4.3.0": + version: 4.3.0 + resolution: "marked@npm:4.3.0" + bin: + marked: bin/marked.js + checksum: 10c0/0013463855e31b9c88d8bb2891a611d10ef1dc79f2e3cbff1bf71ba389e04c5971298c886af0be799d7fa9aa4593b086a136062d59f1210b0480b026a8c5dc47 + languageName: node + linkType: hard + "mdast-util-directive@npm:^3.0.0": version: 3.0.0 resolution: "mdast-util-directive@npm:3.0.0" @@ -14542,6 +14669,47 @@ __metadata: languageName: node linkType: hard +"mobx-react-lite@npm:^4.1.0": + version: 4.1.0 + resolution: "mobx-react-lite@npm:4.1.0" + dependencies: + use-sync-external-store: "npm:^1.4.0" + peerDependencies: + mobx: ^6.9.0 + react: ^16.8.0 || ^17 || ^18 || ^19 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 10c0/72300665cc64d73a58d650bdf5131878376a865ae708cabc2940ee22cf6b762aeed239a83ea104ea3742a0b1563a81a19acc02f162e19f524a9b5b0f0a86668e + languageName: node + linkType: hard + +"mobx-react@npm:^9.1.1": + version: 9.2.0 + resolution: "mobx-react@npm:9.2.0" + dependencies: + mobx-react-lite: "npm:^4.1.0" + peerDependencies: + mobx: ^6.9.0 + react: ^16.8.0 || ^17 || ^18 || ^19 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 10c0/253410a3a4d5005d6f8ec5ed8e6c9696381e65ffe03b072ee6baa7bb5973eaaa0b51f10c83849a94a1b03011538c76b80af26c6230808bd99fb3dfd130ac1845 + languageName: node + linkType: hard + +"mobx@npm:^6.13.7": + version: 6.13.7 + resolution: "mobx@npm:6.13.7" + checksum: 10c0/3ae7f8c586a48a0a2b9b4900871455bc93d3878bdff70b6820ba830c6b883d7f8a0222aa2a0fec7201d25f38a19cb340e62a18a3939182a676dc35d857f35dd6 + languageName: node + linkType: hard + "module-details-from-path@npm:^1.0.3": version: 1.0.3 resolution: "module-details-from-path@npm:1.0.3" @@ -15058,6 +15226,17 @@ __metadata: languageName: node linkType: hard +"openapi-sampler@npm:^1.5.0": + version: 1.6.1 + resolution: "openapi-sampler@npm:1.6.1" + dependencies: + "@types/json-schema": "npm:^7.0.7" + fast-xml-parser: "npm:^4.5.0" + json-pointer: "npm:0.6.2" + checksum: 10c0/b5c95d03e3a035e06da514b3db3e9645e36029dd37551e44fdbdf162c764db52a4d4fe077ea1e02e96a95580b968924000fd9275ab03a1092c734f7862951c87 + languageName: node + linkType: hard + "openapi-to-postmanv2@npm:^4.21.0": version: 4.25.0 resolution: "openapi-to-postmanv2@npm:4.25.0" @@ -15459,6 +15638,13 @@ __metadata: languageName: node linkType: hard +"perfect-scrollbar@npm:^1.5.5": + version: 1.5.6 + resolution: "perfect-scrollbar@npm:1.5.6" + checksum: 10c0/57d3070a33a204953f5093221aa126975ae69b8cf8857a123ccf17344f4cb5c676b00868528517f33120393d66df3140df911b9ef25f3f67835b70c6f0d77139 + languageName: node + linkType: hard + "periscopic@npm:^3.0.0, periscopic@npm:^3.1.0": version: 3.1.0 resolution: "periscopic@npm:3.1.0" @@ -15533,6 +15719,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -15590,6 +15783,15 @@ __metadata: languageName: node linkType: hard +"polished@npm:^4.2.2": + version: 4.3.1 + resolution: "polished@npm:4.3.1" + dependencies: + "@babel/runtime": "npm:^7.17.8" + checksum: 10c0/45480d4c7281a134281cef092f6ecc202a868475ff66a390fee6e9261386e16f3047b4de46a2f2e1cf7fb7aa8f52d30b4ed631a1e3bcd6f303ca31161d4f07fe + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" @@ -16113,7 +16315,7 @@ __metadata: languageName: node linkType: hard -"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": +"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 @@ -16140,6 +16342,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:8.4.49": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3 + languageName: node + linkType: hard + "postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.24, postcss@npm:^8.4.26, postcss@npm:^8.4.33, postcss@npm:^8.4.38, postcss@npm:^8.4.39, postcss@npm:^8.4.4, postcss@npm:^8.4.40": version: 8.4.41 resolution: "postcss@npm:8.4.41" @@ -16403,7 +16616,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.5.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -16768,6 +16981,18 @@ __metadata: languageName: node linkType: hard +"react-tabs@npm:^6.0.2": + version: 6.1.0 + resolution: "react-tabs@npm:6.1.0" + dependencies: + clsx: "npm:^2.0.0" + prop-types: "npm:^15.5.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + checksum: 10c0/3e01f478e1563d3ae8aaffc3c5e34a09319395a7880c95194f8415e0addc92c0ce1345a1e7f1d4b821b8eb7cbf3a141bb4dcc5ee805b3ec4b185aa203278c6e1 + languageName: node + linkType: hard + "react@npm:^18.3.1": version: 18.3.1 resolution: "react@npm:18.3.1" @@ -16859,6 +17084,41 @@ __metadata: languageName: node linkType: hard +"redoc@npm:^2.4.0": + version: 2.4.0 + resolution: "redoc@npm:2.4.0" + dependencies: + "@redocly/openapi-core": "npm:^1.4.0" + classnames: "npm:^2.3.2" + decko: "npm:^1.2.0" + dompurify: "npm:^3.0.6" + eventemitter3: "npm:^5.0.1" + json-pointer: "npm:^0.6.2" + lunr: "npm:^2.3.9" + mark.js: "npm:^8.11.1" + marked: "npm:^4.3.0" + mobx-react: "npm:^9.1.1" + openapi-sampler: "npm:^1.5.0" + path-browserify: "npm:^1.0.1" + perfect-scrollbar: "npm:^1.5.5" + polished: "npm:^4.2.2" + prismjs: "npm:^1.29.0" + prop-types: "npm:^15.8.1" + react-tabs: "npm:^6.0.2" + slugify: "npm:~1.4.7" + stickyfill: "npm:^1.1.1" + swagger2openapi: "npm:^7.0.8" + url-template: "npm:^2.0.8" + peerDependencies: + core-js: ^3.1.4 + mobx: ^6.0.4 + react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + styled-components: ^4.1.1 || ^5.1.1 || ^6.0.5 + checksum: 10c0/94a8c02e4f4962a808a58775036d99c1d09553f8ed31b2780efe43f639a5a7d9affe7a0a77513eed78143a1247cf2b2c79055c06b956d14767e203177f7fb5ae + languageName: node + linkType: hard + "reflect.getprototypeof@npm:^1.0.4": version: 1.0.6 resolution: "reflect.getprototypeof@npm:1.0.6" @@ -17810,7 +18070,7 @@ __metadata: languageName: node linkType: hard -"shallowequal@npm:^1.1.0": +"shallowequal@npm:1.1.0, shallowequal@npm:^1.1.0": version: 1.1.0 resolution: "shallowequal@npm:1.1.0" checksum: 10c0/b926efb51cd0f47aa9bc061add788a4a650550bbe50647962113a4579b60af2abe7b62f9b02314acc6f97151d4cf87033a2b15fc20852fae306d1a095215396c @@ -18011,6 +18271,13 @@ __metadata: languageName: node linkType: hard +"slugify@npm:~1.4.7": + version: 1.4.7 + resolution: "slugify@npm:1.4.7" + checksum: 10c0/27d31bac7bd28a7a702ab7b18996d2a41086d81a97cdc5487f131d7cedb009a745bcd10c8b263e48deb9f055e6c5a6b0bdb37f1156d5dd29b66f8ba981945302 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -18242,6 +18509,13 @@ __metadata: languageName: node linkType: hard +"stickyfill@npm:^1.1.1": + version: 1.1.1 + resolution: "stickyfill@npm:1.1.1" + checksum: 10c0/8f11804fd3bba852cf3277dc4d6366a2bd592d3f7f3d9ab30b7adab4190a20e1296960b5107257081645b0d28afcbbab9f80e347cc425f2cd72b0a4f6917b4ab + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -18478,6 +18752,13 @@ __metadata: languageName: node linkType: hard +"strnum@npm:^1.1.1": + version: 1.1.2 + resolution: "strnum@npm:1.1.2" + checksum: 10c0/a0fce2498fa3c64ce64a40dada41beb91cabe3caefa910e467dc0518ef2ebd7e4d10f8c2202a6104f1410254cae245066c0e94e2521fb4061a5cb41831952392 + languageName: node + linkType: hard + "style-to-object@npm:^0.4.0": version: 0.4.4 resolution: "style-to-object@npm:0.4.4" @@ -18496,6 +18777,26 @@ __metadata: languageName: node linkType: hard +"styled-components@npm:^6.1.17": + version: 6.1.17 + resolution: "styled-components@npm:6.1.17" + dependencies: + "@emotion/is-prop-valid": "npm:1.2.2" + "@emotion/unitless": "npm:0.8.1" + "@types/stylis": "npm:4.2.5" + css-to-react-native: "npm:3.2.0" + csstype: "npm:3.1.3" + postcss: "npm:8.4.49" + shallowequal: "npm:1.1.0" + stylis: "npm:4.3.2" + tslib: "npm:2.6.2" + peerDependencies: + react: ">= 16.8.0" + react-dom: ">= 16.8.0" + checksum: 10c0/87f35173c5fc2291ddba7ed8224d19fe6872d056a577f55fe130248f5ea23e5c48c012e881fa1ad93df60b56a12c1c2d553f628e204f090189221734927e50b0 + languageName: node + linkType: hard + "stylehacks@npm:^6.1.1": version: 6.1.1 resolution: "stylehacks@npm:6.1.1" @@ -18508,6 +18809,13 @@ __metadata: languageName: node linkType: hard +"stylis@npm:4.3.2": + version: 4.3.2 + resolution: "stylis@npm:4.3.2" + checksum: 10c0/0410e1404cbeee3388a9e17587875211ce2f014c8379af0d1e24ca55878867c9f1ccc7b0ce9a156ca53f5d6e301391a82b0645522a604674a378b3189a4a1994 + languageName: node + linkType: hard + "sucrase@npm:^3.32.0": version: 3.35.0 resolution: "sucrase@npm:3.35.0" @@ -18990,6 +19298,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.6.2": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 10c0/e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb + languageName: node + linkType: hard + "tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.2.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2, tslib@npm:^2.6.3": version: 2.6.3 resolution: "tslib@npm:2.6.3" @@ -19504,6 +19819,22 @@ __metadata: languageName: node linkType: hard +"url-template@npm:^2.0.8": + version: 2.0.8 + resolution: "url-template@npm:2.0.8" + checksum: 10c0/56a15057eacbcf05d52b0caed8279c8451b3dd9d32856a1fdd91c6dc84dcb1646f12bafc756b7ade62ca5b1564da8efd7baac5add35868bafb43eb024c62805b + languageName: node + linkType: hard + +"use-sync-external-store@npm:^1.4.0": + version: 1.5.0 + resolution: "use-sync-external-store@npm:1.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/1b8663515c0be34fa653feb724fdcce3984037c78dd4a18f68b2c8be55cc1a1084c578d5b75f158d41b5ddffc2bf5600766d1af3c19c8e329bb20af2ec6f52f4 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" From c9b9804aece29c1bc6a8d4c94397d9341ea93116 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Mon, 14 Apr 2025 15:52:08 +0100 Subject: [PATCH 05/38] change to re run --- docs/docs/01-introduction/01-introduction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index aa9b3c4..3f1d8aa 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -33,4 +33,4 @@ If you have questions about Sprinter, the code, the docs, or have a partnership - **Telegram:** [t.me/sprinter_tech](https://t.me/sprinter_tech) - **Twitter:** [@sprinter_ux](https://twitter.com/sprinter_ux) - **Website:** [Sprinter.tech](https://sprinter.tech) -- **Stash:** [Stash dApp](https://app.sprinter.tech) + From 3ceb91ffc0f426ba5c8e4a8a56a7910dd3c4a2b8 Mon Sep 17 00:00:00 2001 From: MakMuftic Date: Mon, 14 Apr 2025 16:56:12 +0200 Subject: [PATCH 06/38] update yarn lock --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 75828d4..ebd70c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19496,11 +19496,11 @@ __metadata: "typescript@patch:typescript@npm%3A^5.5.3#optional!builtin": version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" + resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=379a07" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/94eb47e130d3edd964b76da85975601dcb3604b0c848a36f63ac448d0104e93819d94c8bdf6b07c00120f2ce9c05256b8b6092d23cf5cf1c6fa911159e4d572f + checksum: 10c0/e6c1662e4852e22fe4bbdca471dca3e3edc74f6f1df043135c44a18a7902037023ccb0abdfb754595ca9028df8920f2f8492c00fc3cbb4309079aae8b7de71cd languageName: node linkType: hard From 8b7be2cc0eaf4d597dc89851c18ae4b3601efeab Mon Sep 17 00:00:00 2001 From: MakMuftic Date: Mon, 14 Apr 2025 17:27:22 +0200 Subject: [PATCH 07/38] resolve first broken links --- docs/docs/02-Stash/02-stash-api.md | 2 +- docs/docusaurus.config.ts | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/docs/docs/02-Stash/02-stash-api.md b/docs/docs/02-Stash/02-stash-api.md index 99c4c84..7aa97cf 100644 --- a/docs/docs/02-Stash/02-stash-api.md +++ b/docs/docs/02-Stash/02-stash-api.md @@ -2,7 +2,7 @@ id: StashAPI title: Stash API Endpoints hide_table_of_contents: true -sidebar_position: 3 +sidebar_position: 2 --- :::tip diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index c4e6ecc..ce90556 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -78,15 +78,7 @@ const config: Config = { { label: "Introduction", to: "/", - }, - { - label: "SDK", - to: "/sdk", - }, - { - label: "React SDK", - to: "/react-sdk/", - }, + } ], }, { From d2f0d80d231a01fd5e0fcf3e6ccde34a6e42033b Mon Sep 17 00:00:00 2001 From: MakMuftic Date: Mon, 14 Apr 2025 17:46:47 +0200 Subject: [PATCH 08/38] fix last broken link --- docs/docs/02-Stash/01-utilizing-stash.md | 2 +- .../03-Solve/{02-use-solve.md => 01-use-solve.md} | 2 +- .../{03-solve-api/index.md => 02-solve-api.md} | 4 +++- docs/docs/03-Solve/03-solve-api.md | 11 ----------- docs/docs/03-Solve/index.md | 3 +-- 5 files changed, 6 insertions(+), 16 deletions(-) rename docs/docs/03-Solve/{02-use-solve.md => 01-use-solve.md} (96%) rename docs/docs/03-Solve/{03-solve-api/index.md => 02-solve-api.md} (80%) delete mode 100644 docs/docs/03-Solve/03-solve-api.md diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index b5ce118..643705f 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -18,7 +18,7 @@ There are two main ways to utilize Sprinter Stash. Either as a Liquidity Provide ### As a Solver 1. Request API access via [Google Form](https://forms.gle/kgpcQK722Ley2gke7) -2. Review [Stash API](stashApi) or visit the [Stash Swagger](https://api.test.sprinter.buildwithsygma.com/swagger/index.html#/Liquidity/get_liquidity_protocol__protocol__deposit__txHash__request) +2. Review [Stash API](StashAPI) or visit the [Stash Swagger](https://api.test.sprinter.buildwithsygma.com/swagger/index.html#/Liquidity/get_liquidity_protocol__protocol__deposit__txHash__request) 3. Query borrow rates 4. Borrow funds and execute swaps 5. Repay liquidity post-transaction diff --git a/docs/docs/03-Solve/02-use-solve.md b/docs/docs/03-Solve/01-use-solve.md similarity index 96% rename from docs/docs/03-Solve/02-use-solve.md rename to docs/docs/03-Solve/01-use-solve.md index bdced37..d982516 100644 --- a/docs/docs/03-Solve/02-use-solve.md +++ b/docs/docs/03-Solve/01-use-solve.md @@ -1,7 +1,7 @@ --- id: solvestart title: Utilizing Solve -sidebar_position: 2 +sidebar_position: 1 --- ## Getting Started diff --git a/docs/docs/03-Solve/03-solve-api/index.md b/docs/docs/03-Solve/02-solve-api.md similarity index 80% rename from docs/docs/03-Solve/03-solve-api/index.md rename to docs/docs/03-Solve/02-solve-api.md index a17ee91..c258e0a 100644 --- a/docs/docs/03-Solve/03-solve-api/index.md +++ b/docs/docs/03-Solve/02-solve-api.md @@ -2,9 +2,11 @@ id: solveapi title: Solve API Endpoints hide_table_of_contents: true -sidebar_position: 4 +sidebar_position: 2 --- +## Solver API Endpoints + import SwaggerUI from '@site/src/components/SwaggerUI'; diff --git a/docs/docs/03-Solve/03-solve-api.md b/docs/docs/03-Solve/03-solve-api.md deleted file mode 100644 index 01c655d..0000000 --- a/docs/docs/03-Solve/03-solve-api.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -id: solveapi -title: Solve API Endpoints -sidebar_position: 4 ---- - -## Solver API Endpoints - -import SwaggerUI from '@site/src/components/SwaggerUI'; - - diff --git a/docs/docs/03-Solve/index.md b/docs/docs/03-Solve/index.md index 6e308b5..f22c895 100644 --- a/docs/docs/03-Solve/index.md +++ b/docs/docs/03-Solve/index.md @@ -1,7 +1,6 @@ --- -id: solveapi +id: Solve title: Sprinter Solve -sidebar_position: 4 --- # Sprinter Solve From 9bc82b95899ba9e6946b45b9450fb52c9e05400c Mon Sep 17 00:00:00 2001 From: MakMuftic Date: Mon, 14 Apr 2025 17:50:43 +0200 Subject: [PATCH 09/38] fix linter --- docs/docs/01-introduction/01-introduction.md | 1 - docs/docusaurus.config.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index 3f1d8aa..b8aceca 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -33,4 +33,3 @@ If you have questions about Sprinter, the code, the docs, or have a partnership - **Telegram:** [t.me/sprinter_tech](https://t.me/sprinter_tech) - **Twitter:** [@sprinter_ux](https://twitter.com/sprinter_ux) - **Website:** [Sprinter.tech](https://sprinter.tech) - diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index ce90556..a3b4637 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -78,7 +78,7 @@ const config: Config = { { label: "Introduction", to: "/", - } + }, ], }, { From e6d3e6ac90cadaeaa738860f8b24dfeb211b5224 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Thu, 24 Apr 2025 10:01:04 +0100 Subject: [PATCH 10/38] minor copy changes --- docs/docs/01-introduction/01-introduction.md | 4 ++++ docs/docs/02-Stash/index.md | 6 +----- docs/docusaurus.config.ts | 5 +++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index b8aceca..eed84ce 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -10,6 +10,10 @@ sidebar_position: 1 Sprinter Logo White +# + +Sprinter envisions a decentralized, open and equitable financial system that provides opportunities for everyone. Our mission is to build the infrastructure that democratizes access to cross-chain liquidity and optimizes liquidity flows across DeFi. + # What is Sprinter? Sprinter combines solving-as-a-service infrastructure with credit-based cross-chain liquidity. It enables solvers to borrow and execute on-chain actions without pre-funded inventory, while giving dApps and protocols access to best-in-class execution routes, powered by the Project Blanc advanced solving technology. diff --git a/docs/docs/02-Stash/index.md b/docs/docs/02-Stash/index.md index f7109bf..2ec2b14 100644 --- a/docs/docs/02-Stash/index.md +++ b/docs/docs/02-Stash/index.md @@ -75,10 +75,6 @@ Sprinter enforces: - Circuit breakers triggered by irregular repayment behavior - Slashing (or bond requirements) for higher-risk integrations -#### 4. Future Safety Module Activation - -Sprinter will in future, activate the Sprinter Stash Safety Module (STSM) which incentivizes solvers to stake SPRNT tokens as a safeguard against potential liquidity shortfalls (eg reorgs or defaults) or protocol insolvencies, essentially providing a security backstop to the protocol. - -#### 5. Bonding Pools +#### 4. Bonding Pools Sprinter will also allow Solver Operators to create Bonding Pools, that escrow funds to vouch for their solvers, enabling more favourable borrowing conditions. Sprinter Bonding Pools will be controlled by governance and similarly allow slashing by governance for any malicious activity or violations. diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index a3b4637..4f06568 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -44,6 +44,11 @@ const config: Config = { ], themeConfig: { + colorMode: { + defaultMode: 'dark', + disableSwitch: false, // optional: hide theme toggle switch + respectPrefersColorScheme: false, // always force dark unless user switches + }, navbar: { title: "Sprinter", logo: { From a39e576ce1ec3a3b7b89e86769f9e5bed5e9d1ce Mon Sep 17 00:00:00 2001 From: BeroBurny Date: Thu, 24 Apr 2025 11:29:38 +0200 Subject: [PATCH 11/38] different provider --- docs/docs/01-introduction/01-introduction.md | 2 +- docs/docusaurus.config.ts | 40 +- docs/package.json | 23 +- docs/src/api/generated/solve/sidebar.ts | 36 + .../generated/solve/swap-by-blanc.info.mdx | 56 + ...w-cost-for-a-liquidity-transaction.api.mdx | 125 + ...ransaction-based-on-the-input-data.api.mdx | 143 + docs/src/api/generated/stash/sidebar.ts | 27 + docs/{static => src}/api/solve-openapi.yaml | 0 docs/{static => src}/api/stash-openapi.yaml | 0 yarn.lock | 5372 +++++++++++++++-- 11 files changed, 5160 insertions(+), 664 deletions(-) create mode 100644 docs/src/api/generated/solve/sidebar.ts create mode 100644 docs/src/api/generated/solve/swap-by-blanc.info.mdx create mode 100644 docs/src/api/generated/stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx create mode 100644 docs/src/api/generated/stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx create mode 100644 docs/src/api/generated/stash/sidebar.ts rename docs/{static => src}/api/solve-openapi.yaml (100%) rename docs/{static => src}/api/stash-openapi.yaml (100%) diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index eed84ce..57e36f1 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -10,7 +10,7 @@ sidebar_position: 1 Sprinter Logo White -# +# Sprinter envisions a decentralized, open and equitable financial system that provides opportunities for everyone. Our mission is to build the infrastructure that democratizes access to cross-chain liquidity and optimizes liquidity flows across DeFi. diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 4f06568..a775ab1 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -1,6 +1,7 @@ import { themes as prismThemes } from "prism-react-renderer"; import type { Config } from "@docusaurus/types"; import type * as Preset from "@docusaurus/preset-classic"; +import type * as OpenApiPlugin from "docusaurus-plugin-openapi-docs"; const config: Config = { title: "Sprinter", @@ -30,6 +31,7 @@ const config: Config = { remarkPlugins: [ [require("@docusaurus/remark-plugin-npm2yarn"), { sync: true }], ], + docItemComponent: "@theme/ApiItem", sidebarPath: "./sidebars.ts", // Please change this to your repo. // Remove this to remove the "edit this page" links. @@ -45,8 +47,8 @@ const config: Config = { themeConfig: { colorMode: { - defaultMode: 'dark', - disableSwitch: false, // optional: hide theme toggle switch + defaultMode: "dark", + disableSwitch: false, // optional: hide theme toggle switch respectPrefersColorScheme: false, // always force dark unless user switches }, navbar: { @@ -141,7 +143,41 @@ const config: Config = { indexDocs: true, }, ], + [ + "docusaurus-plugin-openapi-docs", + { + id: "openapi", + docsPluginId: "classic", + config: { + // petstore: { // EXAMPLE + // specPath: "src/api/petstore-utf8.yaml", + // outputDir: "docs/../src/api/generated/petstore", + // downloadUrl: + // "https://raw.githubusercontent.com/PaloAltoNetworks/docusaurus-template-openapi-docs/main/examples/petstore.yaml", + // sidebarOptions: { + // groupPathsBy: "tag", + // }, + // } satisfies OpenApiPlugin.Options, + solve: { + specPath: "src/api/solve-openapi.yaml", + outputDir: "docs/../src/api/generated/solve", + sidebarOptions: { + groupPathsBy: "tag", + }, + } satisfies OpenApiPlugin.Options, + stash: { + specPath: "src/api/stash-openapi.yaml", + outputDir: "docs/../src/api/generated/stash", + sidebarOptions: { + groupPathsBy: "tag", + }, + } satisfies OpenApiPlugin.Options, + }, + }, + ], ], + + themes: ["docusaurus-theme-openapi-docs"], }; export default config; diff --git a/docs/package.json b/docs/package.json index 23d1879..1e7abf0 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,32 +16,39 @@ "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", + "generate-api-docs": "docusaurus gen-api-docs all", "typecheck": "tsc" }, "dependencies": { "@chainsafe/sprinter-sdk": "workspace:^", "@cmfcmf/docusaurus-search-local": "latest", - "@docusaurus/core": "^3.5.2", - "@docusaurus/preset-classic": "^3.5.2", - "@docusaurus/remark-plugin-npm2yarn": "^3.5.2", + "@docusaurus/core": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/remark-plugin-npm2yarn": "^3.7.0", "@mdx-js/react": "^3.0.1", "clsx": "^2.1.1", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "docusaurus-plugin-openapi-docs": "^4.3.7", - "mobx": "^6.13.7", + "docusaurus-theme-openapi-docs": "^4.3.7", "prism-react-renderer": "^2.3.1", "react": "^18.3.1", "react-dom": "^18.3.1", - "redoc": "^2.4.0", "styled-components": "^6.1.17" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.5.2", - "@docusaurus/tsconfig": "^3.5.2", - "@docusaurus/types": "^3.5.2", + "@docusaurus/module-type-aliases": "^3.7.0", + "@docusaurus/plugin-content-docs": "^3.7.0", + "@docusaurus/theme-common": "^3.7.0", + "@docusaurus/tsconfig": "^3.7.0", + "@docusaurus/types": "^3.7.0", + "@docusaurus/utils": "^3.7.0", + "@docusaurus/utils-validation": "^3.7.0", "@types/d3": "^7", "@types/d3-sankey": "^0", + "@types/react": "^19.1.2", + "docusaurus-plugin-sass": "^0.2.6", + "sass": "^1.87.0", "typescript": "~5.2.2" }, "browserslist": { diff --git a/docs/src/api/generated/solve/sidebar.ts b/docs/src/api/generated/solve/sidebar.ts new file mode 100644 index 0000000..42aaf4a --- /dev/null +++ b/docs/src/api/generated/solve/sidebar.ts @@ -0,0 +1,36 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebar: SidebarsConfig = { + apisidebar: [ + { + type: "doc", + id: "../src/api/generated/solve/swap-by-blanc", + }, + { + type: "category", + label: "UNTAGGED", + items: [ + { + type: "doc", + id: "../src/api/generated/solve/", + label: "Missing summary", + className: "api-method get", + }, + { + type: "doc", + id: "../src/api/generated/solve/", + label: "Missing summary", + className: "api-method get", + }, + { + type: "doc", + id: "../src/api/generated/solve/", + label: "Missing summary", + className: "api-method get", + }, + ], + }, + ], +}; + +export default sidebar.apisidebar; diff --git a/docs/src/api/generated/solve/swap-by-blanc.info.mdx b/docs/src/api/generated/solve/swap-by-blanc.info.mdx new file mode 100644 index 0000000..32d46f0 --- /dev/null +++ b/docs/src/api/generated/solve/swap-by-blanc.info.mdx @@ -0,0 +1,56 @@ +--- +id: swap-by-blanc +title: "Swap by Blanc" +description: "API used by Blanc Swap" +sidebar_label: Introduction +sidebar_position: 0 +hide_title: true +custom_edit_url: null +--- + +import ApiLogo from "@theme/ApiLogo"; +import Heading from "@theme/Heading"; +import SchemaTabs from "@theme/SchemaTabs"; +import TabItem from "@theme/TabItem"; +import Export from "@theme/ApiExplorer/Export"; + + + + + +API used by Blanc Swap + +
+ + + + API key with format sk_live_* +
+ + + + + + + + + + + +
Security Scheme Type:apiKey
Header parameter name:X-API-Key
+
+
+
+
diff --git a/docs/src/api/generated/stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/src/api/generated/stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx new file mode 100644 index 0000000..b5de393 --- /dev/null +++ b/docs/src/api/generated/stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -0,0 +1,125 @@ +--- +id: get-the-borrow-cost-for-a-liquidity-transaction +title: "Get the borrow cost for a liquidity transaction" +description: "Get the borrow cost for a liquidity transaction" +sidebar_label: "Get the borrow cost for a liquidity transaction" +hide_title: true +hide_table_of_contents: true +api: eJzNVk2P00AM/Ssjn0CapQjBJTcWIUAggdByqnpwE28ykMxkPc62VZT/jpyPbVrCwu4B0UsnE4/9bL95TgsZxZRdLS54SOAdiZGCzDYwh51JQxRzHdigKd1N4zInByOMPmLan7BQI2NFQhwhWbdn7r5wkJCGEiw4fa5RCrDgsSJ9Or5lumkcUwaJcEMWYlpQhZC0IIdabaOw8zl0nT2PcXWEYwqMRY9Xc8ioDtHJcmzZv8dYPCjyZjCmKJchO6hFGryQF11iXZcuRUWx+h4VWHuPq86eJeF83YjJUNA8YSrx0K+fLuDbX8QX4SLcEpcBs2m/U8NYBx8pasAXz5/r32mQzx/B/j3m07OXM0JE4SaVhsnsnBQGzdblzz54MUw1UyQvlBmMZkzXaqNrYnEDtoFbb0KUhdJYuCPalxDKRQsffEqLb6LLPSqyRebMarmeoziPOUWY+9vYyV/YfqdUtImdhZdLdb7EzIxMMVlDRoJx/hZLl5mhz4FN5WJ0Pjez6/OA3pwWNKNtky/Wg5gD/7kWg4PJ/DepvlpK9YMXYo+licS3xGbw8F9n0lkQzFWt4NPUdrUcLtYO2avjBD7XxD1qk5MkqzuKrCbZWrXTqluNWrNqB13pVlP/C4ymakpxdUnmKB+arwXaC/nogh+08wcdIDnDYeEWy4b+BR4VuIqkCBkkkJP04i4FJPDIYGBBG/71KJpv91jV5ax/qs3XYdJSTJUx2iAnvZWmTxwHrikN6hClwp5Do5A/fGKdMHgm4o9wNbJLaC+rukTnFWPDvWwNtVsftWUQwmniJbP1cVIlJ3NJa7ixUPRSuYa23WKkb1x2nW7fNMQHSNYb5Qg73GrJdAS7qOsMkmssI92T8JOv49V5amaTejGpcRP9YUZJsCNn73Lpx/Nj4v/FFH8ErrGa3aazUBBmxLOL9mbAcXGlLo6Hf9ErzWk48TpNqZZ7bed36N3bK7CwHT8WqpDpEcaddhd3A87Ql6UXv36vhRJ93mCutoNL/f0EE19l6w== +sidebar_class_name: "get api-method" +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + +Get the borrow cost for a liquidity transaction + + + + + + + + diff --git a/docs/src/api/generated/stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/src/api/generated/stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx new file mode 100644 index 0000000..44954c2 --- /dev/null +++ b/docs/src/api/generated/stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -0,0 +1,143 @@ +--- +id: get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data +title: "Get the borrow quote for a liquidity transaction based on the input data" +description: "This endpoint calculates the borrow quote for a liquidity transaction, including the borrow cost, required input/output, and duration." +sidebar_label: "Get the borrow quote for a liquidity transaction based on the input data" +hide_title: true +hide_table_of_contents: true +api: eJzNVk1v2zgQ/SvEnFKAiYuie9EtaYMiwKLd7WZPQQ60OJbZUqRCDh0bhv77YkjJUR01bbIoUB9smZqP9zjDN9yDxlgH05HxDiq4Xpso0OnOG0eiVrZOVhFGQWsUSx+Cvxd3yROKlQ9CCWvuktGGdoKCclHVHEcK42qbtHHN1K/2kaQIeJdMQC2M6xItfKIukRTKaaFTUOx/BhI6FVSLhCFCdbM/QvlX8ORrb4VTLYoTPGvOpDivg4/xFUgwbNMpWoMEtuB/gwdIGAFARSGhhFivsVVQ7YF2HdtGCsY10PfyOO/fmbmyjQ+G1q1ghzH95VbVdOUymfz8KTP7Dp6c6n9heY+RjMv7JT4i3fvwVVy9Fyc+GygrhcaVSpaiIJ/L4AarVfBtXuDsGEksvd4dcN4lDLsHoIMTzGAzjrDBAH1/W5hgpAuvd2xSe0foiB9V11lTZ6CLL5Gx75/g2csjnuetT46YQ2mjmV3bnsY3/tRvMFiv9Ljes2HsvIsYOdOb16/559vo/6S6xhhXydqdCEjB4Ab1N50O8ufZdMF3GMiUjFrRzGqJ/c5HmuEvYTwEsy9H5rnPnrQo3TfbSZP9u5mimeQ+zvQo7q0c4/rlF6zpUdzMfcaK7d7OVeJC6UND6oRccOM2yppBKYQPojUxsqhMxOHlxcFlama3EEPw4cc7VwKM5t+h+scc1StHGJyyImLYYBAlwm/NpJdAqmEthj9HyWfLcvTuVXAcuIJPHZYWEg1StTiMh8UowIv9+NQvOM1iz9/9ogyVtYqiTZZMZw/ydOE1E5WAW0IXjXdlJHzFHVRHACRslE34S4Gw2rVIa6+hggYpDytaQwXPzQISuLafH6Tzcqvazk5KxaK88qOiqpqbg2thKFsxYQyxtBVXvPORWpXbZRDwD0jPGt5iqSJq4V32KkcvH+YjYZ5o/O9zaxgal3BLi84q43hPUrD50OQi3cAhORfu4VpQTZ6H6VwNv6VYtxLWWbRvYL/nTfo32L7n5TIy8zXFRLW0fKpWykZ8Yst+wfieJV9OycMUH89HbuONCobxPhP7yeehGq/ED25is5CGReV2Uzwj1EMZ8pXnJZheeEt7Adb8tr/tJaxRaQwTXXpXkJ1elxYaXR/pOrMsHud1jR09aTtVng+X1yBhOdy3Wq/ZJah8P1L3BWVppjwk8toerHJNUg3blpD8+Q/91Dyx +sidebar_class_name: "get api-method" +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + +This endpoint calculates the borrow quote for a liquidity transaction, including the borrow cost, required input/output, and duration. + + + + + + + + diff --git a/docs/src/api/generated/stash/sidebar.ts b/docs/src/api/generated/stash/sidebar.ts new file mode 100644 index 0000000..0f77141 --- /dev/null +++ b/docs/src/api/generated/stash/sidebar.ts @@ -0,0 +1,27 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebar: SidebarsConfig = { + apisidebar: [ + { + type: "category", + label: "Liquidity", + items: [ + { + type: "doc", + id: "../src/api/generated/stash/get-the-borrow-cost-for-a-liquidity-transaction", + label: "Get the borrow cost for a liquidity transaction", + className: "api-method get", + }, + { + type: "doc", + id: "../src/api/generated/stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data", + label: + "Get the borrow quote for a liquidity transaction based on the input data", + className: "api-method get", + }, + ], + }, + ], +}; + +export default sidebar.apisidebar; diff --git a/docs/static/api/solve-openapi.yaml b/docs/src/api/solve-openapi.yaml similarity index 100% rename from docs/static/api/solve-openapi.yaml rename to docs/src/api/solve-openapi.yaml diff --git a/docs/static/api/stash-openapi.yaml b/docs/src/api/stash-openapi.yaml similarity index 100% rename from docs/static/api/stash-openapi.yaml rename to docs/src/api/stash-openapi.yaml diff --git a/yarn.lock b/yarn.lock index ebd70c0..a0cf31d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,13 +29,13 @@ __metadata: languageName: node linkType: hard -"@algolia/autocomplete-core@npm:1.9.3": - version: 1.9.3 - resolution: "@algolia/autocomplete-core@npm:1.9.3" +"@algolia/autocomplete-core@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-core@npm:1.17.9" dependencies: - "@algolia/autocomplete-plugin-algolia-insights": "npm:1.9.3" - "@algolia/autocomplete-shared": "npm:1.9.3" - checksum: 10c0/a751b20f15c9a30b8b2d5a4f1f62fb4dbd012fb7ffec1b12308d6e7388b5a4dc83af52176634f17facb57a7727204843c5aa2f6e80efafaaf244275f44af11d9 + "@algolia/autocomplete-plugin-algolia-insights": "npm:1.17.9" + "@algolia/autocomplete-shared": "npm:1.17.9" + checksum: 10c0/e1111769a8723b9dd45fc38cd7edc535c86c1f908b84b5fdc5de06ba6b8c7aca14e5f52ebce84fa5f7adf857332e396b93b7e7933b157b2c9aefc0a19d9574ab languageName: node linkType: hard @@ -66,14 +66,14 @@ __metadata: languageName: node linkType: hard -"@algolia/autocomplete-plugin-algolia-insights@npm:1.9.3": - version: 1.9.3 - resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.9.3" +"@algolia/autocomplete-plugin-algolia-insights@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.17.9" dependencies: - "@algolia/autocomplete-shared": "npm:1.9.3" + "@algolia/autocomplete-shared": "npm:1.17.9" peerDependencies: search-insights: ">= 1 < 3" - checksum: 10c0/574196f66fe828be1029439032376685020524d6c729dea99caef336cc7be244d2539fa91b3fe80db80efe3420c2c05063cab3534514be6c637bf1914b17a6f6 + checksum: 10c0/05c21502631643abdcd6e9f70b5814a60d34bad59bca501e26e030fd72e689be5cecfb6e8939a0a1bdcb2394591e55e26a42a82c7247528eafeff714db0819a4 languageName: node linkType: hard @@ -89,15 +89,15 @@ __metadata: languageName: node linkType: hard -"@algolia/autocomplete-preset-algolia@npm:1.9.3": - version: 1.9.3 - resolution: "@algolia/autocomplete-preset-algolia@npm:1.9.3" +"@algolia/autocomplete-preset-algolia@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-preset-algolia@npm:1.17.9" dependencies: - "@algolia/autocomplete-shared": "npm:1.9.3" + "@algolia/autocomplete-shared": "npm:1.17.9" peerDependencies: "@algolia/client-search": ">= 4.9.1 < 6" algoliasearch: ">= 4.9.1 < 6" - checksum: 10c0/38c1872db4dae69b4eec622db940c7a992d8530e33fbac7df593473ef404312076d9933b4a7ea25c2d401ea5b62ebd64b56aa25b5cdd8e8ba3fd309a39d9d816 + checksum: 10c0/99159c7e02a927d0d96717cb4cfd2f8dbc4da73267a8eae4f83af5bf74087089f6e7dbffd316512e713a4cc534e936b6a7ccb5c4a5ff84b4bf73f2d3cc050e79 languageName: node linkType: hard @@ -111,13 +111,13 @@ __metadata: languageName: node linkType: hard -"@algolia/autocomplete-shared@npm:1.9.3": - version: 1.9.3 - resolution: "@algolia/autocomplete-shared@npm:1.9.3" +"@algolia/autocomplete-shared@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-shared@npm:1.17.9" peerDependencies: "@algolia/client-search": ">= 4.9.1 < 6" algoliasearch: ">= 4.9.1 < 6" - checksum: 10c0/1aa926532c32be6bb5384c8c0ae51a312c9d79ed7486371218dfcb61c8ea1ed46171bdc9f9b596a266aece104a0ef76d6aac2f9a378a5a6eb4460e638d59f6ae + checksum: 10c0/b318281aecdaae09171b47ee4f7bc66b613852cad4506e9d6278fff35ba68a12dd9cce2d90b5f4c3ba0e3d7d780583cbe46b22275260e41bbf09fb01e4a18f49 languageName: node linkType: hard @@ -153,6 +153,18 @@ __metadata: languageName: node linkType: hard +"@algolia/client-abtesting@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/client-abtesting@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/53a61a210df2410e695afca32691d9dc2c8e63ab4c99a35ef085cf937a7d6137f21251620f76bda3c087b0e733036d0d77b5de8f1fc6a143fb34e0068e9860ea + languageName: node + linkType: hard + "@algolia/client-account@npm:4.24.0": version: 4.24.0 resolution: "@algolia/client-account@npm:4.24.0" @@ -176,6 +188,18 @@ __metadata: languageName: node linkType: hard +"@algolia/client-analytics@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/client-analytics@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/42fe09f162fdf6a9e85f2566a08a16d1a6e55c2c807300e5a1994fb371ed67fe12e6f4a7543bad2311e6a19ced12d27c3ecf73be173c9f88a8fe51e4895faecd + languageName: node + linkType: hard + "@algolia/client-common@npm:4.24.0": version: 4.24.0 resolution: "@algolia/client-common@npm:4.24.0" @@ -186,6 +210,25 @@ __metadata: languageName: node linkType: hard +"@algolia/client-common@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/client-common@npm:5.23.4" + checksum: 10c0/482bf9244bbc0caede83afdc7663111a745f66fdaaefa3d974c28378f83ae2f95a8de9699f7cf57ea9f5e381019dde49272be2c769ee91d85563cc79a27dd6be + languageName: node + linkType: hard + +"@algolia/client-insights@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/client-insights@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/21dd2174aef068edc6fc9c4c16030999d42dee96eaf4eacec149e0840573b08c39ae5228fbb12cea8c8fe13ca7d81573dfff454483433967443aaf3df812eb97 + languageName: node + linkType: hard + "@algolia/client-personalization@npm:4.24.0": version: 4.24.0 resolution: "@algolia/client-personalization@npm:4.24.0" @@ -197,6 +240,30 @@ __metadata: languageName: node linkType: hard +"@algolia/client-personalization@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/client-personalization@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/36de61597ece40d55bb48033c74fa4a8e516cfb008c2fe664e4a3217026e4004f83f3f57c0f9561db8ecb0b400ead9450ce6bb1652ce6ba2bdb4b1750a3b7d1e + languageName: node + linkType: hard + +"@algolia/client-query-suggestions@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/client-query-suggestions@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/d7d38e30c3ddff64baadc7af8cf23fa802c6a2cf1eab34abbf210d80492de8b13c9c6f7fd21f270a7a3b132aa7cd9151227a34043b733a8893a72cc0a88d1df5 + languageName: node + linkType: hard + "@algolia/client-search@npm:4.24.0, @algolia/client-search@npm:^4.12.0": version: 4.24.0 resolution: "@algolia/client-search@npm:4.24.0" @@ -208,6 +275,18 @@ __metadata: languageName: node linkType: hard +"@algolia/client-search@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/client-search@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/7f5858876297c99ec8d3775ea50e43d1248c10f4da9d7e112dfeb7c95b4e3b089ed6a908b738963fb61013759f7a0d6e2a1cd6ccbbe4bd8780b634e8254bd2fa + languageName: node + linkType: hard + "@algolia/events@npm:^4.0.1": version: 4.0.1 resolution: "@algolia/events@npm:4.0.1" @@ -215,6 +294,18 @@ __metadata: languageName: node linkType: hard +"@algolia/ingestion@npm:1.23.4": + version: 1.23.4 + resolution: "@algolia/ingestion@npm:1.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/99a858e5b39a22780d2ca798f49ea4d0accc9a4c47d37e515297569b0ca007668e569a6db607ff0ad9a7c9b2c28391ead37b1fa53b4e1413960cdd071c3ceb46 + languageName: node + linkType: hard + "@algolia/logger-common@npm:4.24.0": version: 4.24.0 resolution: "@algolia/logger-common@npm:4.24.0" @@ -231,6 +322,18 @@ __metadata: languageName: node linkType: hard +"@algolia/monitoring@npm:1.23.4": + version: 1.23.4 + resolution: "@algolia/monitoring@npm:1.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/a79bf85fb0592cdf1706f8f6fcda9c225e8bdfb0b774b2b5dfc91b0e6d53093f40c69f67c59a6f106bce22e54d6d27782f8bad1795135dc85bdd30ffe27586ba + languageName: node + linkType: hard + "@algolia/recommend@npm:4.24.0": version: 4.24.0 resolution: "@algolia/recommend@npm:4.24.0" @@ -250,6 +353,18 @@ __metadata: languageName: node linkType: hard +"@algolia/recommend@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/recommend@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/f0d589c7d3bfec06f636e3191f682e6a90028706c19a9fc19ccc58e04b2d8a8a34b20b7d99a1b230c12c202407ba776eebdf6d9841de1e6779dd01c6be60c8da + languageName: node + linkType: hard + "@algolia/requester-browser-xhr@npm:4.24.0": version: 4.24.0 resolution: "@algolia/requester-browser-xhr@npm:4.24.0" @@ -259,6 +374,15 @@ __metadata: languageName: node linkType: hard +"@algolia/requester-browser-xhr@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/requester-browser-xhr@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + checksum: 10c0/3b86a1a1473fb14a34de2c64d73c090bf233b5792cc6aeb544c371a18158fbb6d6e2dcb0c1f5e1b5c583c247dba47e7b04ec46cb368e6b085bd82e0b6932bcb9 + languageName: node + linkType: hard + "@algolia/requester-common@npm:4.24.0": version: 4.24.0 resolution: "@algolia/requester-common@npm:4.24.0" @@ -266,6 +390,15 @@ __metadata: languageName: node linkType: hard +"@algolia/requester-fetch@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/requester-fetch@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + checksum: 10c0/05ccd32f2b610b1a2b3859d8289a0da1103e372bc210f0fd161c747d6c3afae6f3d3d758114315d074881fa299625d2a3b613ae57ca744866e4688be2c245bdf + languageName: node + linkType: hard + "@algolia/requester-node-http@npm:4.24.0": version: 4.24.0 resolution: "@algolia/requester-node-http@npm:4.24.0" @@ -275,6 +408,15 @@ __metadata: languageName: node linkType: hard +"@algolia/requester-node-http@npm:5.23.4": + version: 5.23.4 + resolution: "@algolia/requester-node-http@npm:5.23.4" + dependencies: + "@algolia/client-common": "npm:5.23.4" + checksum: 10c0/36cc4ea35f0ca25f8ee9a86b0b409c23b513b78b4651adb90fb11f88f24246e34c272dbd8f2f6379c12bfdb70935d9479d7c56af91aacf542063d0570df03d68 + languageName: node + linkType: hard + "@algolia/transporter@npm:4.24.0": version: 4.24.0 resolution: "@algolia/transporter@npm:4.24.0" @@ -324,6 +466,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2": version: 7.25.2 resolution: "@babel/compat-data@npm:7.25.2" @@ -331,7 +484,14 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.18.5, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.3, @babel/core@npm:^7.24.5": +"@babel/compat-data@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/compat-data@npm:7.26.8" + checksum: 10c0/66408a0388c3457fff1c2f6c3a061278dd7b3d2f0455ea29bb7b187fa52c60ae8b4054b3c0a184e21e45f0eaac63cf390737bc7504d1f4a088a6e7f652c068ca + languageName: node + linkType: hard + +"@babel/core@npm:^7.18.5, @babel/core@npm:^7.21.3, @babel/core@npm:^7.24.5": version: 7.25.2 resolution: "@babel/core@npm:7.25.2" dependencies: @@ -354,7 +514,30 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.23.3, @babel/generator@npm:^7.25.0": +"@babel/core@npm:^7.25.9": + version: 7.26.10 + resolution: "@babel/core@npm:7.26.10" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.26.10" + "@babel/helper-compilation-targets": "npm:^7.26.5" + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helpers": "npm:^7.26.10" + "@babel/parser": "npm:^7.26.10" + "@babel/template": "npm:^7.26.9" + "@babel/traverse": "npm:^7.26.10" + "@babel/types": "npm:^7.26.10" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/e046e0e988ab53841b512ee9d263ca409f6c46e2a999fe53024688b92db394346fa3aeae5ea0866331f62133982eee05a675d22922a4603c3f603aa09a581d62 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.25.0": version: 7.25.0 resolution: "@babel/generator@npm:7.25.0" dependencies: @@ -366,6 +549,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.26.10, @babel/generator@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/generator@npm:7.27.0" + dependencies: + "@babel/parser": "npm:^7.27.0" + "@babel/types": "npm:^7.27.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/7cb10693d2b365c278f109a745dc08856cae139d262748b77b70ce1d97da84627f79648cab6940d847392c0e5d180441669ed958b3aee98d9c7d274b37c553bd + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" @@ -375,6 +571,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" + dependencies: + "@babel/types": "npm:^7.25.9" + checksum: 10c0/095b6ba50489d797733abebc4596a81918316a99e3632755c9f02508882912b00c2ae5e468532a25a5c2108d109ddbe9b7da78333ee7cc13817fc50c00cf06fe + languageName: node + linkType: hard + "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7" @@ -398,6 +603,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.25.9, @babel/helper-compilation-targets@npm:^7.26.5": + version: 7.27.0 + resolution: "@babel/helper-compilation-targets@npm:7.27.0" + dependencies: + "@babel/compat-data": "npm:^7.26.8" + "@babel/helper-validator-option": "npm:^7.25.9" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/375c9f80e6540118f41bd53dd54d670b8bf91235d631bdead44c8b313b26e9cd89aed5c6df770ad13a87a464497b5346bb72b9462ba690473da422f5402618b6 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0": version: 7.25.0 resolution: "@babel/helper-create-class-features-plugin@npm:7.25.0" @@ -415,6 +633,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.25.9, @babel/helper-create-class-features-plugin@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.27.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.27.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/c4945903136d934050e070f69a4d72ec425f1f70634e0ddf14ad36695f935125a6df559f8d5b94cc1ed49abd4ce9c5be8ef3ba033fa8d09c5dd78d1a9b97d8cc + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0": version: 7.25.2 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" @@ -428,6 +663,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.25.9": + version: 7.27.0 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + regexpu-core: "npm:^6.2.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/62513522a43521d8a29285a47127694ec28d66d793cd156cf875cdee6a9b3a9a1626c43c1eb75ce18fa2bf5dc3140f0a8081a34feb24272ecf66084f3cc3b00a + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.6.2": version: 0.6.2 resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" @@ -443,6 +691,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-define-polyfill-provider@npm:^0.6.3": + version: 0.6.4 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.4" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.22.6" + "@babel/helper-plugin-utils": "npm:^7.22.5" + debug: "npm:^4.1.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.14.2" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/b74f2b46e233a178618d19432bdae16e0137d0a603497ee901155e083c4a61f26fe01d79fb95d5f4c22131ade9d958d8f587088d412cca1302633587f070919d + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.24.8": version: 7.24.8 resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" @@ -453,6 +716,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" + dependencies: + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/e08c7616f111e1fb56f398365e78858e26e466d4ac46dff25921adc5ccae9b232f66e952a2f4162bbe336627ba336c7fd9eca4835b6548935973d3380d77eaff + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-module-imports@npm:7.24.7" @@ -463,6 +736,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2": version: 7.25.2 resolution: "@babel/helper-module-transforms@npm:7.25.2" @@ -477,6 +760,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" + dependencies: + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" @@ -486,6 +782,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" + dependencies: + "@babel/types": "npm:^7.25.9" + checksum: 10c0/90203e6607edeadd2a154940803fd616c0ed92c1013d6774c4b8eb491f1a5a3448b68faae6268141caa5c456e55e3ee49a4ed2bd7ddaf2365daea321c435914c + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.24.8 resolution: "@babel/helper-plugin-utils@npm:7.24.8" @@ -493,6 +798,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/helper-plugin-utils@npm:7.26.5" + checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.24.7, @babel/helper-remap-async-to-generator@npm:^7.25.0": version: 7.25.0 resolution: "@babel/helper-remap-async-to-generator@npm:7.25.0" @@ -506,6 +818,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-remap-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-wrap-function": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/6798b562f2788210980f29c5ee96056d90dc73458c88af5bd32f9c82e28e01975588aa2a57bb866c35556bd9b76bac937e824ee63ba472b6430224b91b4879e9 + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.24.7, @babel/helper-replace-supers@npm:^7.25.0": version: 7.25.0 resolution: "@babel/helper-replace-supers@npm:7.25.0" @@ -519,6 +844,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.25.9, @babel/helper-replace-supers@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/helper-replace-supers@npm:7.26.5" + dependencies: + "@babel/helper-member-expression-to-functions": "npm:^7.25.9" + "@babel/helper-optimise-call-expression": "npm:^7.25.9" + "@babel/traverse": "npm:^7.26.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/b19b1245caf835207aaaaac3a494f03a16069ae55e76a2e1350b5acd560e6a820026997a8160e8ebab82ae873e8208759aa008eb8422a67a775df41f0a4633d4 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-simple-access@npm:7.24.7" @@ -539,6 +877,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" + dependencies: + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/09ace0c6156961624ac9524329ce7f45350bab94bbe24335cbe0da7dfaa1448e658771831983cb83fe91cf6635b15d0a3cab57c03b92657480bfb49fb56dd184 + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.24.8": version: 7.24.8 resolution: "@babel/helper-string-parser@npm:7.24.8" @@ -546,6 +894,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-validator-identifier@npm:7.24.7" @@ -553,6 +908,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.24.8": version: 7.24.8 resolution: "@babel/helper-validator-option@npm:7.24.8" @@ -560,6 +922,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.25.0": version: 7.25.0 resolution: "@babel/helper-wrap-function@npm:7.25.0" @@ -571,6 +940,17 @@ __metadata: languageName: node linkType: hard +"@babel/helper-wrap-function@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-wrap-function@npm:7.25.9" + dependencies: + "@babel/template": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/b6627d83291e7b80df020f8ee2890c52b8d49272962cac0114ef90f189889c90f1027985873d1b5261a4e986e109b2754292dc112392f0b1fcbfc91cc08bd003 + languageName: node + linkType: hard + "@babel/helpers@npm:^7.25.0": version: 7.25.0 resolution: "@babel/helpers@npm:7.25.0" @@ -581,6 +961,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.26.10": + version: 7.27.0 + resolution: "@babel/helpers@npm:7.27.0" + dependencies: + "@babel/template": "npm:^7.27.0" + "@babel/types": "npm:^7.27.0" + checksum: 10c0/a3c64fd2d8b164c041808826cc00769d814074ea447daaacaf2e3714b66d3f4237ef6e420f61d08f463d6608f3468c2ac5124ab7c68f704e20384def5ade95f4 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.24.7": version: 7.24.7 resolution: "@babel/highlight@npm:7.24.7" @@ -615,6 +1005,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.26.10, @babel/parser@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/parser@npm:7.27.0" + dependencies: + "@babel/types": "npm:^7.27.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/ba2ed3f41735826546a3ef2a7634a8d10351df221891906e59b29b0a0cd748f9b0e7a6f07576858a9de8e77785aad925c8389ddef146de04ea2842047c9d2859 + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3": version: 7.25.3 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3" @@ -627,6 +1028,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/7aab47fcbb8c1ddc195a3cd66609edcad54c5022f018db7de40185f0182950389690e953e952f117a1737b72f665ff02ad30de6c02b49b97f1d8f4ccdffedc34 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0": version: 7.25.0 resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.0" @@ -638,6 +1051,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/3a652b3574ca62775c5f101f8457950edc540c3581226579125da535d67765f41ad7f0e6327f8efeb2540a5dad5bb0c60a89fb934af3f67472e73fb63612d004 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0": version: 7.25.0 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.0" @@ -649,6 +1073,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/18fc9004104a150f9f5da9f3307f361bc3104d16778bb593b7523d5110f04a8df19a2587e6bdd5e726fb1d397191add45223f4f731bb556c33f14f2779d596e8 + languageName: node + linkType: hard + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7" @@ -662,6 +1097,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/3f6c8781a2f7aa1791a31d2242399ca884df2ab944f90c020b6f112fb19f05fa6dad5be143d274dad1377e40415b63d24d5489faf5060b9c4a99e55d8f0c317c + languageName: node + linkType: hard + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0": version: 7.25.0 resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.0" @@ -674,6 +1122,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/02b365f0cc4df8b8b811c68697c93476da387841e5f153fe42766f34241b685503ea51110d5ed6df7132759820b93e48d9fa3743cffc091eed97c19f7e5fe272 + languageName: node + linkType: hard + "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": version: 7.21.0-placeholder-for-preset-env.2 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" @@ -749,6 +1209,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-assertions@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/525b174e60b210d96c1744c1575fc2ddedcc43a479cba64a5344cf77bd0541754fc58120b5a11ff832ba098437bb05aa80900d1f49bb3d888c5e349a4a3a356e + languageName: node + linkType: hard + "@babel/plugin-syntax-import-attributes@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" @@ -760,6 +1231,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-attributes@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352 + languageName: node + linkType: hard + "@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" @@ -793,6 +1275,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d56597aff4df39d3decda50193b6dfbe596ca53f437ff2934622ce19a743bf7f43492d3fb3308b0289f5cee2b825d99ceb56526a2b9e7b68bf04901546c5618c + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -892,6 +1385,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5192ebe11bd46aea68b7a60fd9555465c59af7e279e71126788e59121b86e00b505816685ab4782abe159232b0f73854e804b54449820b0d950b397ee158caa2 + languageName: node + linkType: hard + "@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" @@ -915,6 +1419,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-arrow-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/851fef9f58be60a80f46cc0ce1e46a6f7346a6f9d50fa9e0fa79d46ec205320069d0cc157db213e2bea88ef5b7d9bd7618bb83f0b1996a836e2426c3a3a1f622 + languageName: node + linkType: hard + "@babel/plugin-transform-async-generator-functions@npm:^7.25.0": version: 7.25.0 resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.0" @@ -929,6 +1444,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-generator-functions@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.26.8" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.26.5" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" + "@babel/traverse": "npm:^7.26.8" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f6fefce963fe2e6268dde1958975d7adbce65fba94ca6f4bc554c90da03104ad1dd2e66d03bc0462da46868498428646e30b03a218ef0e5a84bfc87a7e375cec + languageName: node + linkType: hard + "@babel/plugin-transform-async-to-generator@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" @@ -942,6 +1470,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-remap-async-to-generator": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c443d9e462ddef733ae56360064f32fc800105803d892e4ff32d7d6a6922b3765fa97b9ddc9f7f1d3f9d8c2d95721d85bef9dbf507804214c6cf6466b105c168 + languageName: node + linkType: hard + "@babel/plugin-transform-block-scoped-functions@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" @@ -953,17 +1494,39 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" +"@babel/plugin-transform-block-scoped-functions@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.26.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.26.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2f3060800ead46b09971dd7bf830d66383b7bc61ced9945633b4ef9bf87787956ea83fcf49b387cecb377812588c6b81681714c760f9cf89ecba45edcbab1192 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 checksum: 10c0/382931c75a5d0ea560387e76cb57b03461300527e4784efcb2fb62f36c1eb0ab331327b6034def256baa0cad9050925a61f9c0d56261b6afd6a29c3065fb0bd4 languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.25.9": + version: 7.27.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.27.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.26.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/15a604fac04151a795ff3213c73ece06bda7cd5f7c8cb7a3b29563ab243f0b3f7cba9e6facfc9d70e3e63b21af32f9d26bd10ccc58e1c425c7801186014b5ce4 + languageName: node + linkType: hard + "@babel/plugin-transform-class-properties@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-class-properties@npm:7.24.7" @@ -976,6 +1539,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-class-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f0603b6bd34d8ba62c03fc0572cb8bbc75874d097ac20cc7c5379e001081210a84dba1749e7123fca43b978382f605bb9973c99caf2c5b4c492d5c0a4a441150 + languageName: node + linkType: hard + "@babel/plugin-transform-class-static-block@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7" @@ -989,6 +1564,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-class-static-block@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-class-static-block@npm:7.26.0" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/cdcf5545ae6514ed75fbd73cccfa209c6a5dfdf0c2bb7bb62c0fb4ec334a32281bcf1bc16ace494d9dbe93feb8bdc0bd3cf9d9ccb6316e634a67056fa13b741b + languageName: node + linkType: hard + "@babel/plugin-transform-classes@npm:^7.25.0": version: 7.25.0 resolution: "@babel/plugin-transform-classes@npm:7.25.0" @@ -1005,6 +1592,22 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-classes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-classes@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + globals: "npm:^11.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/02742ea7cd25be286c982e672619effca528d7a931626a6f3d6cea11852951b7ee973276127eaf6418ac0e18c4d749a16b520709c707e86a67012bd23ff2927d + languageName: node + linkType: hard + "@babel/plugin-transform-computed-properties@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" @@ -1017,6 +1620,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-computed-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/948c0ae3ce0ba2375241d122a9bc7cda4a7ac8110bd8a62cd804bc46a5fdb7a7a42c7799c4cd972e14e0a579d2bd0999b92e53177b73f240bb0d4b09972c758b + languageName: node + linkType: hard + "@babel/plugin-transform-destructuring@npm:^7.24.8": version: 7.24.8 resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" @@ -1028,6 +1643,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7beec5fda665d108f69d5023aa7c298a1e566b973dd41290faa18aeea70f6f571295c1ece0a058f3ceb6c6c96de76de7cd34f5a227fbf09a1b8d8a735d28ca49 + languageName: node + linkType: hard + "@babel/plugin-transform-dotall-regex@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" @@ -1040,6 +1666,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-dotall-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7c3471ae5cf7521fd8da5b03e137e8d3733fc5ee4524ce01fb0c812f0bb77cb2c9657bc8a6253186be3a15bb4caa8974993c7ddc067f554ecc6a026f0a3b5e12 + languageName: node + linkType: hard + "@babel/plugin-transform-duplicate-keys@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7" @@ -1051,6 +1689,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-keys@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d0c74894b9bf6ff2a04189afffb9cd43d87ebd7b7943e51a827c92d2aaa40fa89ac81565a2fd6fbeabf9e38413a9264c45862eee2b017f1d49046cc3c8ff06b4 + languageName: node + linkType: hard + "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0": version: 7.25.0 resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.0" @@ -1063,6 +1712,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/a8039a6d2b90e011c7b30975edee47b5b1097cf3c2f95ec1f5ddd029898d783a995f55f7d6eb8d6bb8873c060fb64f9f1ccba938dfe22d118d09cf68e0cd3bf6 + languageName: node + linkType: hard + "@babel/plugin-transform-dynamic-import@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" @@ -1075,6 +1736,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-dynamic-import@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5e643a8209072b668350f5788f23c64e9124f81f958b595c80fecca6561086d8ef346c04391b9e5e4cad8b8cbe22c258f0cd5f4ea89b97e74438e7d1abfd98cf + languageName: node + linkType: hard + "@babel/plugin-transform-exponentiation-operator@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7" @@ -1087,6 +1759,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-exponentiation-operator@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.26.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cac922e851c6a0831fdd2e3663564966916015aeff7f4485825fc33879cbc3a313ceb859814c9200248e2875d65bb13802a723e5d7d7b40a2e90da82a5a1e15c + languageName: node + linkType: hard + "@babel/plugin-transform-export-namespace-from@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7" @@ -1099,6 +1782,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-export-namespace-from@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f291ea2ec5f36de9028a00cbd5b32f08af281b8183bf047200ff001f4cb260be56f156b2449f42149448a4a033bd6e86a3a7f06d0c2825532eb0ae6b03058dfb + languageName: node + linkType: hard + "@babel/plugin-transform-for-of@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-for-of@npm:7.24.7" @@ -1111,6 +1805,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-for-of@npm:^7.26.9": + version: 7.26.9 + resolution: "@babel/plugin-transform-for-of@npm:7.26.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e28a521521cf9f84ddd69ca8da7c89fb9f7aa38e4dea35742fe973e4e1d7c23f9cee1a4861a2fdd9e9f18ff945886a44d7335cea1c603b96bfcb1c7c8791ef09 + languageName: node + linkType: hard + "@babel/plugin-transform-function-name@npm:^7.25.1": version: 7.25.1 resolution: "@babel/plugin-transform-function-name@npm:7.25.1" @@ -1124,6 +1830,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-function-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-function-name@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8e67fbd1dd367927b8b6afdf0a6e7cb3a3fd70766c52f700ca77428b6d536f6c9d7ec643e7762d64b23093233765c66bffa40e31aabe6492682879bcb45423e1 + languageName: node + linkType: hard + "@babel/plugin-transform-json-strings@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-json-strings@npm:7.24.7" @@ -1136,6 +1855,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-json-strings@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/00bc2d4751dfc9d44ab725be16ee534de13cfd7e77dfb386e5dac9e48101ce8fcbc5971df919dc25b3f8a0fa85d6dc5f2a0c3cf7ec9d61c163d9823c091844f0 + languageName: node + linkType: hard + "@babel/plugin-transform-literals@npm:^7.25.2": version: 7.25.2 resolution: "@babel/plugin-transform-literals@npm:7.25.2" @@ -1147,6 +1877,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/00b14e9c14cf1e871c1f3781bf6334cac339c360404afd6aba63d2f6aca9270854d59a2b40abff1c4c90d4ffdca614440842d3043316c2f0ceb155fdf7726b3b + languageName: node + linkType: hard + "@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7" @@ -1159,6 +1900,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6e2051e10b2d6452980fc4bdef9da17c0d6ca48f81b8529e8804b031950e4fff7c74a7eb3de4a2b6ad22ffb631d0b67005425d232cce6e2b29ce861c78ed04f5 + languageName: node + linkType: hard + "@babel/plugin-transform-member-expression-literals@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" @@ -1170,6 +1922,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-member-expression-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/91d17b451bcc5ea9f1c6f8264144057ade3338d4b92c0b248366e4db3a7790a28fd59cc56ac433a9627a9087a17a5684e53f4995dd6ae92831cb72f1bd540b54 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-amd@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7" @@ -1182,6 +1945,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-amd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-amd@npm:7.25.9" + dependencies: + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/849957d9484d0a2d93331226ed6cf840cee7d57454549534c447c93f8b839ef8553eae9877f8f550e3c39f14d60992f91244b2e8e7502a46064b56c5d68ba855 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:^7.24.7, @babel/plugin-transform-modules-commonjs@npm:^7.24.8": version: 7.24.8 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" @@ -1195,6 +1970,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3" + dependencies: + "@babel/helper-module-transforms": "npm:^7.26.0" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/82e59708f19f36da29531a64a7a94eabbf6ff46a615e0f5d9b49f3f59e8ef10e2bac607d749091508d3fa655146c9e5647c3ffeca781060cdabedb4c7a33c6f2 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-systemjs@npm:^7.25.0": version: 7.25.0 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.0" @@ -1209,6 +1996,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-systemjs@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.9" + dependencies: + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8299e3437542129c2684b86f98408c690df27db4122a79edded4782cf04e755d6ecb05b1e812c81a34224a81e664303392d5f3c36f3d2d51fdc99bb91c881e9a + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7" @@ -1221,6 +2022,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-umd@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-modules-umd@npm:7.25.9" + dependencies: + "@babel/helper-module-transforms": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/fa11a621f023e2ac437b71d5582f819e667c94306f022583d77da9a8f772c4128861a32bbb63bef5cba581a70cd7dbe87a37238edaafcfacf889470c395e7076 + languageName: node + linkType: hard + "@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7" @@ -1233,6 +2046,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/32b14fda5c885d1706863f8af2ee6c703d39264355b57482d3a24fce7f6afbd4c7a0896e501c0806ed2b0759beb621bf7f3f7de1fbbc82026039a98d961e78ef + languageName: node + linkType: hard + "@babel/plugin-transform-new-target@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-new-target@npm:7.24.7" @@ -1244,6 +2069,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-new-target@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-new-target@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7b5f1b7998f1cf183a7fa646346e2f3742e5805b609f28ad5fee22d666a15010f3e398b7e1ab78cddb7901841a3d3f47135929af23d54e8bf4ce69b72051f71e + languageName: node + linkType: hard + "@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7" @@ -1256,6 +2092,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.26.6": + version: 7.26.6 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.26.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.26.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/574d6db7cbc5c092db5d1dece8ce26195e642b9c40dbfeaf3082058a78ad7959c1c333471cdd45f38b784ec488850548075d527b178c5010ee9bff7aa527cc7a + languageName: node + linkType: hard + "@babel/plugin-transform-numeric-separator@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7" @@ -1268,6 +2115,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-numeric-separator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ad63ad341977844b6f9535fcca15ca0d6d6ad112ed9cc509d4f6b75e9bf4b1b1a96a0bcb1986421a601505d34025373608b5f76d420d924b4e21f86b1a1f2749 + languageName: node + linkType: hard + "@babel/plugin-transform-object-rest-spread@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7" @@ -1282,6 +2140,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-rest-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-transform-parameters": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/02077d8abd83bf6a48ff0b59e98d7561407cf75b591cffd3fdc5dc5e9a13dec1c847a7a690983762a3afecddb244831e897e0515c293e7c653b262c30cd614af + languageName: node + linkType: hard + "@babel/plugin-transform-object-super@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-object-super@npm:7.24.7" @@ -1294,6 +2165,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-super@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-super@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-replace-supers": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0348d00e76f1f15ada44481a76e8c923d24cba91f6e49ee9b30d6861eb75344e7f84d62a18df8a6f9e9a7eacf992f388174b7f9cc4ce48287bcefca268c07600 + languageName: node + linkType: hard + "@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7" @@ -1306,6 +2189,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/722fd5ee12ab905309d4e84421584fce4b6d9e6b639b06afb20b23fa809e6ab251e908a8d5e8b14d066a28186b8ef8f58d69fd6eca9ce1b9ef7af08333378f6c + languageName: node + linkType: hard + "@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8": version: 7.24.8 resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8" @@ -1319,6 +2213,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-chaining@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/041ad2beae5affb8e68a0bcb6882a2dadb758db3c629a0e012f57488ab43a822ac1ea17a29db8ef36560a28262a5dfa4dbbbf06ed6e431db55abe024b7cd3961 + languageName: node + linkType: hard + "@babel/plugin-transform-parameters@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-parameters@npm:7.24.7" @@ -1330,6 +2236,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-parameters@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-parameters@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/aecb446754b9e09d6b6fa95fd09e7cf682f8aaeed1d972874ba24c0a30a7e803ad5f014bb1fffc7bfeed22f93c0d200947407894ea59bf7687816f2f464f8df3 + languageName: node + linkType: hard + "@babel/plugin-transform-private-methods@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-private-methods@npm:7.24.7" @@ -1342,6 +2259,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-private-methods@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/64bd71de93d39daefa3e6c878d6f2fd238ed7d4ecfb13b0e771ddbbc131487def3ceb405b62b534a5cbb5043046b504e1b189b0a45229cc75af979a9fbcaa7bd + languageName: node + linkType: hard + "@babel/plugin-transform-private-property-in-object@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" @@ -1356,6 +2285,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-private-property-in-object@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d4965de19d9f204e692cc74dbc39f0bb469e5f29df96dd4457ea23c5e5596fba9d5af76eaa96f9d48a9fc20ec5f12a94c679285e36b8373406868ea228109e27 + languageName: node + linkType: hard + "@babel/plugin-transform-property-literals@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" @@ -1367,6 +2309,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-property-literals@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-property-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1639e35b2438ccf3107af760d34e6a8e4f9acdd3ae6186ae771a6e3029bd59dfe778e502d67090f1185ecda5c16addfed77561e39c518a3f51ff10d41790e106 + languageName: node + linkType: hard + "@babel/plugin-transform-react-constant-elements@npm:^7.21.3": version: 7.25.1 resolution: "@babel/plugin-transform-react-constant-elements@npm:7.25.1" @@ -1389,6 +2342,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-display-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-display-name@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/63a0f962d64e71baf87c212755419e25c637d2d95ea6fdc067df26b91e606ae186442ae815b99a577eca9bf5404d9577ecad218a3cf42d0e9e286ca7b003a992 + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx-development@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-react-jsx-development@npm:7.24.7" @@ -1400,6 +2364,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx-development@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.9" + dependencies: + "@babel/plugin-transform-react-jsx": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c0b92ff9eb029620abf320ff74aae182cea87524723d740fb48a4373d0d16bddf5edbe1116e7ba341332a5337e55c2ceaee8b8cad5549e78af7f4b3cfe77debb + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx-self@npm:^7.24.5": version: 7.24.7 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.7" @@ -1437,6 +2412,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/plugin-syntax-jsx": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5c9947e8ed141f7606f54da3e05eea1074950c5b8354c39df69cb7f43cb5a83c6c9d7973b24bc3d89341c8611f8ad50830a98ab10d117d850e6bdd8febdce221 + languageName: node + linkType: hard + "@babel/plugin-transform-react-pure-annotations@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.7" @@ -1449,6 +2439,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-pure-annotations@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7c8eac04644ad19dcd71bb8e949b0ae22b9e548fa4a58e545d3d0342f647fb89db7f8789a7c5b8074d478ce6d3d581eaf47dd4b36027e16fd68211c383839abc + languageName: node + linkType: hard + "@babel/plugin-transform-regenerator@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-regenerator@npm:7.24.7" @@ -1461,6 +2463,30 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-regenerator@npm:^7.25.9": + version: 7.27.0 + resolution: "@babel/plugin-transform-regenerator@npm:7.27.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.26.5" + regenerator-transform: "npm:^0.15.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/aa1c6a1592338df96034e0c3933d9c84d0ae25e9768413fda90d4896470192a11e2ab146dbcb92005c5059bbea67aea3d11936de8e4be382613efceafc9c92b5 + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.26.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4abc1db6c964efafc7a927cda814c7275275afa4b530483e0936fd614de23cb5802f7ca43edaa402008a723d4e7eac282b6f5283aa2eeb3b27da6d6c1dd7f8ed + languageName: node + linkType: hard + "@babel/plugin-transform-reserved-words@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7" @@ -1472,19 +2498,30 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:^7.22.9": - version: 7.24.7 - resolution: "@babel/plugin-transform-runtime@npm:7.24.7" +"@babel/plugin-transform-reserved-words@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9" dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8b028b80d1983e3e02f74e21924323cc66ba930e5c5758909a122aa7d80e341b8b0f42e1698e42b50d47a6ba911332f584200b28e1a4e2104b7514d9dc011e96 + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.25.9": + version: 7.26.10 + resolution: "@babel/plugin-transform-runtime@npm:7.26.10" + dependencies: + "@babel/helper-module-imports": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.26.5" babel-plugin-polyfill-corejs2: "npm:^0.4.10" - babel-plugin-polyfill-corejs3: "npm:^0.10.1" + babel-plugin-polyfill-corejs3: "npm:^0.11.0" babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/a33f5095872bbba00b8ee553dfe6941477e69a017a2e65e9dd86e80dab5c627635093b796eb1eb22aaaf2f874704f63ad1d99b952b83b59ef6b368ae04e5bb41 + checksum: 10c0/4b70a63b904a3f7faa6ca95f9034d2f29330764820b06cf1814dda4ab0482b233a28241e98d8497bc1690dd31972e72861d8534ae0e37f26e04637e7d615e43d languageName: node linkType: hard @@ -1499,6 +2536,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-shorthand-properties@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/05a20d45f0fb62567644c507ccd4e379c1a74dacf887d2b2cac70247415e3f6d7d3bf4850c8b336053144715fedb6200fc38f7130c4b76c94eec9b9c0c2a8e9b + languageName: node + linkType: hard + "@babel/plugin-transform-spread@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-spread@npm:7.24.7" @@ -1511,6 +2559,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-spread@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-spread@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/996c8fed238efc30e0664f9f58bd7ec8c148f4659f84425f68923a094fe891245711d26eb10d1f815f50c124434e076e860dbe9662240844d1b77cd09907dcdf + languageName: node + linkType: hard + "@babel/plugin-transform-sticky-regex@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7" @@ -1522,6 +2582,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-sticky-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e9612b0615dab4c4fba1c560769616a9bd7b9226c73191ef84b6c3ee185c8b719b4f887cdd8336a0a13400ce606ab4a0d33bc8fa6b4fcdb53e2896d07f2568f6 + languageName: node + linkType: hard + "@babel/plugin-transform-template-literals@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" @@ -1533,6 +2604,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-template-literals@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/plugin-transform-template-literals@npm:7.26.8" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.26.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/205a938ded9554857a604416d369023a961334b6c20943bd861b45f0e5dbbeca1cf6fda1c2049126e38a0d18865993433fdc78eae3028e94836b3b643c08ba0d + languageName: node + linkType: hard + "@babel/plugin-transform-typeof-symbol@npm:^7.24.8": version: 7.24.8 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8" @@ -1544,6 +2626,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typeof-symbol@npm:^7.26.7": + version: 7.27.0 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.26.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/00adbd4e044166ac291978bd64173b4a0d36cbcfae3495a196816dd16ba889cc8b5becee232086241d714cd67a80c15742402504fc36f6db4f746a7dd8d2b1c4 + languageName: node + linkType: hard + "@babel/plugin-transform-typescript@npm:^7.24.7": version: 7.25.2 resolution: "@babel/plugin-transform-typescript@npm:7.25.2" @@ -1559,6 +2652,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/plugin-transform-typescript@npm:7.27.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.25.9" + "@babel/helper-create-class-features-plugin": "npm:^7.27.0" + "@babel/helper-plugin-utils": "npm:^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9" + "@babel/plugin-syntax-typescript": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/028e75dd6195495dc2d105ca8ded19d62aef90a215d597451cee57c35325960a87963913aa9a21b8ade190c638b588422292ea7e23b21565baf53c469254dbd4 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-escapes@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7" @@ -1570,6 +2678,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-escapes@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/615c84d7c53e1575d54ba9257e753e0b98c5de1e3225237d92f55226eaab8eb5bceb74df43f50f4aa162b0bbcc934ed11feafe2b60b8ec4934ce340fad4b8828 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-property-regex@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7" @@ -1582,6 +2701,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1685836fc38af4344c3d2a9edbd46f7c7b28d369b63967d5b83f2f6849ec45b97223461cea3d14cc3f0be6ebb284938e637a5ca3955c0e79c873d62f593d615c + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-regex@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7" @@ -1594,6 +2725,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/448004f978279e726af26acd54f63f9002c9e2582ecd70d1c5c4436f6de490fcd817afb60016d11c52f5ef17dbaac2590e8cc7bfaf4e91b58c452cf188c7920f + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7" @@ -1606,7 +2749,19 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.20.2, @babel/preset-env@npm:^7.22.9": +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9" + "@babel/helper-plugin-utils": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/56ee04fbe236b77cbcd6035cbf0be7566d1386b8349154ac33244c25f61170c47153a9423cd1d92855f7d6447b53a4a653d9e8fd1eaeeee14feb4b2baf59bd9f + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.20.2": version: 7.25.3 resolution: "@babel/preset-env@npm:7.25.3" dependencies: @@ -1699,6 +2854,85 @@ __metadata: languageName: node linkType: hard +"@babel/preset-env@npm:^7.25.9": + version: 7.26.9 + resolution: "@babel/preset-env@npm:7.26.9" + dependencies: + "@babel/compat-data": "npm:^7.26.8" + "@babel/helper-compilation-targets": "npm:^7.26.5" + "@babel/helper-plugin-utils": "npm:^7.26.5" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.9" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions": "npm:^7.26.0" + "@babel/plugin-syntax-import-attributes": "npm:^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.25.9" + "@babel/plugin-transform-async-generator-functions": "npm:^7.26.8" + "@babel/plugin-transform-async-to-generator": "npm:^7.25.9" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.26.5" + "@babel/plugin-transform-block-scoping": "npm:^7.25.9" + "@babel/plugin-transform-class-properties": "npm:^7.25.9" + "@babel/plugin-transform-class-static-block": "npm:^7.26.0" + "@babel/plugin-transform-classes": "npm:^7.25.9" + "@babel/plugin-transform-computed-properties": "npm:^7.25.9" + "@babel/plugin-transform-destructuring": "npm:^7.25.9" + "@babel/plugin-transform-dotall-regex": "npm:^7.25.9" + "@babel/plugin-transform-duplicate-keys": "npm:^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.9" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.9" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.26.3" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9" + "@babel/plugin-transform-for-of": "npm:^7.26.9" + "@babel/plugin-transform-function-name": "npm:^7.25.9" + "@babel/plugin-transform-json-strings": "npm:^7.25.9" + "@babel/plugin-transform-literals": "npm:^7.25.9" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.9" + "@babel/plugin-transform-member-expression-literals": "npm:^7.25.9" + "@babel/plugin-transform-modules-amd": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.26.3" + "@babel/plugin-transform-modules-systemjs": "npm:^7.25.9" + "@babel/plugin-transform-modules-umd": "npm:^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.9" + "@babel/plugin-transform-new-target": "npm:^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.26.6" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.9" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.9" + "@babel/plugin-transform-object-super": "npm:^7.25.9" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.9" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" + "@babel/plugin-transform-parameters": "npm:^7.25.9" + "@babel/plugin-transform-private-methods": "npm:^7.25.9" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.9" + "@babel/plugin-transform-property-literals": "npm:^7.25.9" + "@babel/plugin-transform-regenerator": "npm:^7.25.9" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.26.0" + "@babel/plugin-transform-reserved-words": "npm:^7.25.9" + "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9" + "@babel/plugin-transform-spread": "npm:^7.25.9" + "@babel/plugin-transform-sticky-regex": "npm:^7.25.9" + "@babel/plugin-transform-template-literals": "npm:^7.26.8" + "@babel/plugin-transform-typeof-symbol": "npm:^7.26.7" + "@babel/plugin-transform-unicode-escapes": "npm:^7.25.9" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9" + "@babel/plugin-transform-unicode-regex": "npm:^7.25.9" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.10" + babel-plugin-polyfill-corejs3: "npm:^0.11.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.1" + core-js-compat: "npm:^3.40.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6812ca76bd38165a58fe8354bab5e7204e1aa17d8b9270bd8f8babb08cc7fa94cd29525fe41b553f2ba0e84033d566f10da26012b8ee0f81897005c5225d0051 + languageName: node + linkType: hard + "@babel/preset-modules@npm:0.1.6-no-external-plugins": version: 0.1.6-no-external-plugins resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" @@ -1712,7 +2946,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.18.6, @babel/preset-react@npm:^7.22.5": +"@babel/preset-react@npm:^7.18.6": version: 7.24.7 resolution: "@babel/preset-react@npm:7.24.7" dependencies: @@ -1728,7 +2962,23 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.21.0, @babel/preset-typescript@npm:^7.22.5": +"@babel/preset-react@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/preset-react@npm:7.26.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.9" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-transform-react-display-name": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx-development": "npm:^7.25.9" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.25.9" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b470dcba11032ef6c832066f4af5c75052eaed49feb0f445227231ef1b5c42aacd6e216988c0bd469fd5728cd27b6b059ca307c9ecaa80c6bb5da4bf1c833e12 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.21.0": version: 7.24.7 resolution: "@babel/preset-typescript@npm:7.24.7" dependencies: @@ -1743,6 +2993,21 @@ __metadata: languageName: node linkType: hard +"@babel/preset-typescript@npm:^7.25.9": + version: 7.27.0 + resolution: "@babel/preset-typescript@npm:7.27.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.26.5" + "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/plugin-syntax-jsx": "npm:^7.25.9" + "@babel/plugin-transform-modules-commonjs": "npm:^7.26.3" + "@babel/plugin-transform-typescript": "npm:^7.27.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/986b20edab3c18727d911a6e1a14095c1271afc6cc625b02f42b371f06c1e041e5d7c1baf2afe8b0029b60788a06f02fd6844dedfe54183b148ab9a7429438a9 + languageName: node + linkType: hard + "@babel/regjsgen@npm:^0.8.0": version: 0.8.0 resolution: "@babel/regjsgen@npm:0.8.0" @@ -1750,17 +3015,17 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.22.6": - version: 7.25.0 - resolution: "@babel/runtime-corejs3@npm:7.25.0" +"@babel/runtime-corejs3@npm:^7.25.9": + version: 7.27.0 + resolution: "@babel/runtime-corejs3@npm:7.27.0" dependencies: core-js-pure: "npm:^3.30.2" regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/7c9e7896749b5968bc6a7638cf1735e5d2dc791780f4f46daf15a45777780cd0485d1357e92f54b03f815269064dc84d771e83486d49e18b847ffa8cfb6a6afa + checksum: 10c0/eff7ad45e9edca218fe1c43341b1493b84f1d5682dc3e300cae8392b2f80a5601d4d4a25da2d8236df4fec669d168ff87e71672d2f306a1b4da7d46680977367 languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.8.4": version: 7.25.0 resolution: "@babel/runtime@npm:7.25.0" dependencies: @@ -1769,7 +3034,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.17.8": +"@babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.25.9, @babel/runtime@npm:^7.9.2": version: 7.27.0 resolution: "@babel/runtime@npm:7.27.0" dependencies: @@ -1789,7 +3054,18 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3": +"@babel/template@npm:^7.25.9, @babel/template@npm:^7.26.9, @babel/template@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/template@npm:7.27.0" + dependencies: + "@babel/code-frame": "npm:^7.26.2" + "@babel/parser": "npm:^7.27.0" + "@babel/types": "npm:^7.27.0" + checksum: 10c0/13af543756127edb5f62bf121f9b093c09a2b6fe108373887ccffc701465cfbcb17e07cf48aa7f440415b263f6ec006e9415c79dfc2e8e6010b069435f81f340 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3": version: 7.25.3 resolution: "@babel/traverse@npm:7.25.3" dependencies: @@ -1804,6 +3080,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.10, @babel/traverse@npm:^7.26.5, @babel/traverse@npm:^7.26.8, @babel/traverse@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/traverse@npm:7.27.0" + dependencies: + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.27.0" + "@babel/parser": "npm:^7.27.0" + "@babel/template": "npm:^7.27.0" + "@babel/types": "npm:^7.27.0" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/c7af29781960dacaae51762e8bc6c4b13d6ab4b17312990fbca9fc38e19c4ad7fecaae24b1cf52fb844e8e6cdc76c70ad597f90e496bcb3cc0a1d66b41a0aa5b + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.6": version: 7.25.6 resolution: "@babel/types@npm:7.25.6" @@ -1826,6 +3117,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.10, @babel/types@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/types@npm:7.27.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/6f1592eabe243c89a608717b07b72969be9d9d2fce1dee21426238757ea1fa60fdfc09b29de9e48d8104311afc6e6fb1702565a9cc1e09bc1e76f2b2ddb0f6e1 + languageName: node + linkType: hard + "@chainsafe/eslint-config@npm:^2.2.4": version: 2.2.4 resolution: "@chainsafe/eslint-config@npm:2.2.4" @@ -1992,6 +3293,496 @@ __metadata: languageName: node linkType: hard +"@csstools/cascade-layer-name-parser@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/cascade-layer-name-parser@npm:2.0.4" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/774f2bcc96a576183853191bdfd31df15e22c51901ee01678ee47f1d1afcb4ab0e6d9a78e08f7383ac089c7e0b390013633f45ff1f1d577c9aefd252589bcced + languageName: node + linkType: hard + +"@csstools/color-helpers@npm:^5.0.2": + version: 5.0.2 + resolution: "@csstools/color-helpers@npm:5.0.2" + checksum: 10c0/bebaddb28b9eb58b0449edd5d0c0318fa88f3cb079602ee27e88c9118070d666dcc4e09a5aa936aba2fde6ba419922ade07b7b506af97dd7051abd08dfb2959b + languageName: node + linkType: hard + +"@csstools/css-calc@npm:^2.1.3": + version: 2.1.3 + resolution: "@csstools/css-calc@npm:2.1.3" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/85f5b4f96d60f395d5f0108056b0ddee037b22d6deba448d74324b50f1c554de284f84715ebfac7b2888b78e09d20d02a7cd213ee7bdaa71011ea9b4eee3a251 + languageName: node + linkType: hard + +"@csstools/css-color-parser@npm:^3.0.9": + version: 3.0.9 + resolution: "@csstools/css-color-parser@npm:3.0.9" + dependencies: + "@csstools/color-helpers": "npm:^5.0.2" + "@csstools/css-calc": "npm:^2.1.3" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/acc026a6bd6d8c4c641fa5f9b4d77cd5dfa54c57c3278ae52329d96b5837723428dcb93c34db4062bbea2f45a98451119df06eaf39fd196aaf6368c59d799f20 + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-parser-algorithms@npm:3.0.4" + peerDependencies: + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-tokenizer@npm:3.0.3" + checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5 + languageName: node + linkType: hard + +"@csstools/media-query-list-parser@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/media-query-list-parser@npm:4.0.2" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/5d008a70f5d4fd96224066a433f5cdefa76cfd78a74416a20d6d5b2bb1bc8282b140e8373015d807d4dadb91daf3deb73eb13f853ec4e0479d0cb92e80c6f20d + languageName: node + linkType: hard + +"@csstools/postcss-cascade-layers@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-cascade-layers@npm:5.0.1" + dependencies: + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5cc3c6f220d9216f7ab16e716a20d6db845f127c917521e6236342bfa871accd63eb662a04c1e24a28e396412dcb47b1c4abccc490b88e4010cd704d14a702f1 + languageName: node + linkType: hard + +"@csstools/postcss-color-function@npm:^4.0.9": + version: 4.0.9 + resolution: "@csstools/postcss-color-function@npm:4.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/11f7e8a1a4d6ff113706928eb4702454d18ee8d6b07166b98d33b499ba1933cdf034876101a9c3d22fcc009d054ca6fe2df1455daf391d5eb4af86fa6b530e75 + languageName: node + linkType: hard + +"@csstools/postcss-color-mix-function@npm:^3.0.9": + version: 3.0.9 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/e26ecec62ac6085e8c46225e444bfb6082fffad1559005c0746226b22f995727c2e4ede0fb347e37c81e8f4f2ac9cf4de88800184a650638351f4cbfb8baf1d3 + languageName: node + linkType: hard + +"@csstools/postcss-content-alt-text@npm:^2.0.5": + version: 2.0.5 + resolution: "@csstools/postcss-content-alt-text@npm:2.0.5" + dependencies: + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/fd0543e8195b1a1228fa41995d48bafafb635d32b0b80bdae8edfc3af7fcccb75aa472a072e552420ed0bd2f62d38e764483e3b9cca25a41dc2b450098b2436d + languageName: node + linkType: hard + +"@csstools/postcss-exponential-functions@npm:^2.0.8": + version: 2.0.8 + resolution: "@csstools/postcss-exponential-functions@npm:2.0.8" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8ed7cea3ab7b3fce351dc678c97aad0c12d9e9eae43c9793081fc09e2b3281a89a9d67e57df02d87b6af40839d582b5d08523a9f9bfabbd4e05e319995ae7789 + languageName: node + linkType: hard + +"@csstools/postcss-font-format-keywords@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/postcss-font-format-keywords@npm:4.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/eb794fb95fefcac75e606d185255e601636af177866a317b0c6b6c375055e7240be53918229fd8d4bba00df01bedd2256bdac2b0ad4a4c2ec64f9d27cd6ff639 + languageName: node + linkType: hard + +"@csstools/postcss-gamut-mapping@npm:^2.0.9": + version: 2.0.9 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a5985c74bfa8c0fc4406cec807818e35949c73d62b6acd2901dbdd54a30afa7d2094f839ba550812bca76f0df95205492f271df4bab03f4b15115cf10b06b1b5 + languageName: node + linkType: hard + +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.9": + version: 5.0.9 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/b284558e38c096e1abfb04306717e23eec841ab23979479adbe165332db84503493b74e6d23d7752abec9327b9bfc343857e9a2393957d5bb9fd2e249570467e + languageName: node + linkType: hard + +"@csstools/postcss-hwb-function@npm:^4.0.9": + version: 4.0.9 + resolution: "@csstools/postcss-hwb-function@npm:4.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/31f9b3540e8af221e1716944ed8719f97ae335e5f866dfc96a3d81f042ef8975ce0d6163925cb32514f4903cb35177bf8d814a571da3f44b63244f88b6b395ad + languageName: node + linkType: hard + +"@csstools/postcss-ic-unit@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-ic-unit@npm:4.0.1" + dependencies: + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/1097cbdc385bcf32e15df1ed2946477c5927e34ebaf273297f1ae46aeaf2084c7a63858ba1a7a5e1f241be441968a2e1c6deb43ddb101708110c7f608b6fc525 + languageName: node + linkType: hard + +"@csstools/postcss-initial@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-initial@npm:2.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/dbff7084ef4f1c4647efe2b147001daf172003c15b5e22689f0540d03c8d362f2a332cd9cf136e6c8dcda7564ee30492a4267ea188f72cb9c1000fb9bcfbfef8 + languageName: node + linkType: hard + +"@csstools/postcss-is-pseudo-class@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-is-pseudo-class@npm:5.0.1" + dependencies: + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/3aaab18ebb2dcf5565efa79813eaa987d40de1e086765358524392a09631c68ad1ee952e6aff8f42513b2c18ab84891787e065fe287f696128498fc641520b6c + languageName: node + linkType: hard + +"@csstools/postcss-light-dark-function@npm:^2.0.8": + version: 2.0.8 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.8" + dependencies: + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5494516f52d467dcace80495a4fb0fbd24207ae13634bb82b5c24e5d52e84665aebc28cd31fed8d96a41e91bf822185aba5a3d01680a140278c484741516c383 + languageName: node + linkType: hard + +"@csstools/postcss-logical-float-and-clear@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/postcss-logical-float-and-clear@npm:3.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/71a20e8c37877bf68ae615d7bb93fc11b4f8da8be8b1dc1a6e0fc69e27f189712ed71436b8ed51fa69fdb98b8e6718df2b5f42f246c4d39badaf0e43020fcfd4 + languageName: node + linkType: hard + +"@csstools/postcss-logical-overflow@npm:^2.0.0": + version: 2.0.0 + resolution: "@csstools/postcss-logical-overflow@npm:2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/0e103343d3ff8b34eef01b02355c5e010d272fd12d149a242026bb13ab1577b7f3a11fd4514be9342d96f73d61dac1f093a9bd36ece591753ed09a84eb7fca0a + languageName: node + linkType: hard + +"@csstools/postcss-logical-overscroll-behavior@npm:^2.0.0": + version: 2.0.0 + resolution: "@csstools/postcss-logical-overscroll-behavior@npm:2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/1649601bb26f04d760fb5ebc42cdf414fa2a380b8ec22fe1c117f664c286665a786bd7bbda01b7e7567eaf3cc018a4f36a5c9805f6751cc497da223e0ffe9524 + languageName: node + linkType: hard + +"@csstools/postcss-logical-resize@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/postcss-logical-resize@npm:3.0.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4f12efcaf5468ff359bb3f32f0f66034b9acc9b3ac21fcd2f30a1c8998fc653ebac0091f35c8b7e8dbfe6ccf595aee67f9b06a67adf45a8844e49a82d98b4386 + languageName: node + linkType: hard + +"@csstools/postcss-logical-viewport-units@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.3" + dependencies: + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8ec746598d7ce8697c3dafd83cb3a319a90079ad755dd78e3ec92f4ba9ad849c4cdaba33b16e9dcbac1e9489b3d7c48262030110c20ce1d88cdacbe9f5987cec + languageName: node + linkType: hard + +"@csstools/postcss-media-minmax@npm:^2.0.8": + version: 2.0.8 + resolution: "@csstools/postcss-media-minmax@npm:2.0.8" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/aff72b83b888d3d0dc6441f219f7c2833a4aa0f59493da22db1087fce32763bb765f068c6ddedc0ddc6fe79f1843e6b1375af07fa572494ecac91e59b1dc324f + languageName: node + linkType: hard + +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.4" + dependencies: + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/27dc9419b0f4315774647588f599348e7cc593984f59b414c51c910066501fd087cbe232deb762907c18bd21dd4184e7b6e0e0b730e5c72341ab9cc696c75739 + languageName: node + linkType: hard + +"@csstools/postcss-nested-calc@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/postcss-nested-calc@npm:4.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/fb61512fa4909bdf0ee32a23e771145086c445f2208a737b52093c8adfab7362c56d3aeaf2a6e33ffcec067e99a07219775465d2fbb1a3ac30cdcfb278b218b7 + languageName: node + linkType: hard + +"@csstools/postcss-normalize-display-values@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/postcss-normalize-display-values@npm:4.0.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/d3a3a362b532163bd791f97348ef28b7a43baf01987c7702b06285e751cdc5ea3e3a2553f088260515b4d28263d5c475923d4d4780ecb4078ec66dff50c9e638 + languageName: node + linkType: hard + +"@csstools/postcss-oklab-function@npm:^4.0.9": + version: 4.0.9 + resolution: "@csstools/postcss-oklab-function@npm:4.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/9955aafc1dfc0bb5c886b2af3a82abed2d0a707c7654b2b49886db4c7153e1a016f327f4cc0d94b5b28f3b6227d9b3422c63555f78412433655beec90f37b388 + languageName: node + linkType: hard + +"@csstools/postcss-progressive-custom-properties@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-progressive-custom-properties@npm:4.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a33e2a67ac29e731b112df9718596f703990492900bb118c513fcee7c0dc0a03f58248b2c5467b14de3e757f0ef2c6d97882254af784d8df390c633780bdf1f9 + languageName: node + linkType: hard + +"@csstools/postcss-random-function@npm:^2.0.0": + version: 2.0.0 + resolution: "@csstools/postcss-random-function@npm:2.0.0" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/e0744b1472c4037b6491aac232d005659c0c65bc08af785cbdc50b722efaf71330e38607f4c88b54322338294f92ec68817ec1cd6e688953aa127f27cd2a5b00 + languageName: node + linkType: hard + +"@csstools/postcss-relative-color-syntax@npm:^3.0.9": + version: 3.0.9 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/486e6c91b1042ca96e6e5c3d94d95e343101c7862e772aee16cd48607633f7c93c42dd23b5adc44cfa8dc8cb32ef3ba0f1f86e3f9a23be5c8744533d23128624 + languageName: node + linkType: hard + +"@csstools/postcss-scope-pseudo-class@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-scope-pseudo-class@npm:4.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/6a0ca50fae655f4498200d1ce298ca794c85fbe2e3fd5d6419843254f055df5007a973e09b5f1e78e376c02b54278e411516c8d824300c68b265d3e5b311d7ee + languageName: node + linkType: hard + +"@csstools/postcss-sign-functions@npm:^1.1.3": + version: 1.1.3 + resolution: "@csstools/postcss-sign-functions@npm:1.1.3" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/97998443191ab0ef370bdc413b4952fd86d9274700fade2a83cdf5d59f449a4a7001ceda35dd6cb45fefebafb0959be35c3fcfa0e3333c55b1658f514eb64e96 + languageName: node + linkType: hard + +"@csstools/postcss-stepped-value-functions@npm:^4.0.8": + version: 4.0.8 + resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.8" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/515630c3d25029a5e3789d665ae7f4a394245e5442c79d99f0fff018c698e356680aea0f937819a00cb78563ce2285a43ede50e32992cee4e062e413d22df44f + languageName: node + linkType: hard + +"@csstools/postcss-text-decoration-shorthand@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-text-decoration-shorthand@npm:4.0.2" + dependencies: + "@csstools/color-helpers": "npm:^5.0.2" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/01e2f3717e7a42224dc1a746491c55a381cf208cb7588f0308eeefe730675be4c7bb56c0cc557e75999c981e67da7d0b0bb68610635752c89ef251ee435b9cac + languageName: node + linkType: hard + +"@csstools/postcss-trigonometric-functions@npm:^4.0.8": + version: 4.0.8 + resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.8" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/609d03b752aae1c57d671eaefe4cdbde0a1d62c4b4d3ffb8bb39a41ebb61fdade7c7892a2c7c365d2997d9f93f4f3bb4034801a5baf1988b274120b3ec0ba6ad + languageName: node + linkType: hard + +"@csstools/postcss-unset-value@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/postcss-unset-value@npm:4.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8424ac700ded5bf59d49310335896f10c069e2c3fc6a676b5d13ca5a6fb78689b948f50494df875da284c4c76651deb005eafba70d87e693274628c5a685abfa + languageName: node + linkType: hard + +"@csstools/selector-resolve-nested@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/selector-resolve-nested@npm:3.0.0" + peerDependencies: + postcss-selector-parser: ^7.0.0 + checksum: 10c0/2b01c36b3fa81388d5bddd8db962766465d76b021a815c8bb5a48c3a42c530154cc155fc496707ade627dbba6745eb8ecd9fa840c1972133c0f7d8811e0a959d + languageName: node + linkType: hard + +"@csstools/selector-specificity@npm:^5.0.0": + version: 5.0.0 + resolution: "@csstools/selector-specificity@npm:5.0.0" + peerDependencies: + postcss-selector-parser: ^7.0.0 + checksum: 10c0/186b444cabcdcdeb553bfe021f80c58bfe9ef38dcc444f2b1f34a5aab9be063ab4e753022b2d5792049c041c28cfbb78e4b707ec398459300e402030d35c07eb + languageName: node + linkType: hard + +"@csstools/utilities@npm:^2.0.0": + version: 2.0.0 + resolution: "@csstools/utilities@npm:2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/be5c31437b726928f64cd4bb3e47f5b90bfd2e2a69a8eaabd8e89cc6c0977e4f0f7ee48de50c8ed8b07e04e3956a02293247e0da3236d521fb2e836f88f65822 + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:0.5.7": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -1999,25 +3790,25 @@ __metadata: languageName: node linkType: hard -"@docsearch/css@npm:3.6.1": - version: 3.6.1 - resolution: "@docsearch/css@npm:3.6.1" - checksum: 10c0/546b7b725044d006fe5fd2061763fbd1f944d9db21c7b86adb2d11e7bd5eee41b102f1ecccb001bb1603ef7503282cc9ad204482db62e4bc0b038c46a9cd9e6d +"@docsearch/css@npm:3.9.0": + version: 3.9.0 + resolution: "@docsearch/css@npm:3.9.0" + checksum: 10c0/6300551e1cab7a5487063ec3581ae78ddaee3d93ec799556b451054448559b3ba849751b825fbd8b678367ef944bd82b3f11bc1d9e74e08e3cc48db40487b396 languageName: node linkType: hard -"@docsearch/react@npm:^3.5.2": - version: 3.6.1 - resolution: "@docsearch/react@npm:3.6.1" +"@docsearch/react@npm:^3.8.1": + version: 3.9.0 + resolution: "@docsearch/react@npm:3.9.0" dependencies: - "@algolia/autocomplete-core": "npm:1.9.3" - "@algolia/autocomplete-preset-algolia": "npm:1.9.3" - "@docsearch/css": "npm:3.6.1" - algoliasearch: "npm:^4.19.1" + "@algolia/autocomplete-core": "npm:1.17.9" + "@algolia/autocomplete-preset-algolia": "npm:1.17.9" + "@docsearch/css": "npm:3.9.0" + algoliasearch: "npm:^5.14.2" peerDependencies: - "@types/react": ">= 16.8.0 < 19.0.0" - react: ">= 16.8.0 < 19.0.0" - react-dom: ">= 16.8.0 < 19.0.0" + "@types/react": ">= 16.8.0 < 20.0.0" + react: ">= 16.8.0 < 20.0.0" + react-dom: ">= 16.8.0 < 20.0.0" search-insights: ">= 1 < 3" peerDependenciesMeta: "@types/react": @@ -2028,121 +3819,156 @@ __metadata: optional: true search-insights: optional: true - checksum: 10c0/890d46ed1f971a6af9f64377c9e510e4b39324bfedcc143c7bd35ba883f8fdac3dc844b0a0000059fd3dec16a0443e7f723d65c468ca7bafd03be546caf38479 + checksum: 10c0/5e737a5d9ef1daae1cd93e89870214c1ab0c36a3a2193e898db044bcc5d9de59f85228b2360ec0e8f10cdac7fd2fe3c6ec8a05d943ee7e17d6c1cef2e6e9ff2d languageName: node linkType: hard -"@docusaurus/core@npm:3.5.2, @docusaurus/core@npm:^3.5.2": - version: 3.5.2 - resolution: "@docusaurus/core@npm:3.5.2" +"@docusaurus/babel@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/babel@npm:3.7.0" dependencies: - "@babel/core": "npm:^7.23.3" - "@babel/generator": "npm:^7.23.3" + "@babel/core": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" - "@babel/plugin-transform-runtime": "npm:^7.22.9" - "@babel/preset-env": "npm:^7.22.9" - "@babel/preset-react": "npm:^7.22.5" - "@babel/preset-typescript": "npm:^7.22.5" - "@babel/runtime": "npm:^7.22.6" - "@babel/runtime-corejs3": "npm:^7.22.6" - "@babel/traverse": "npm:^7.22.8" - "@docusaurus/cssnano-preset": "npm:3.5.2" - "@docusaurus/logger": "npm:3.5.2" - "@docusaurus/mdx-loader": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-common": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" - autoprefixer: "npm:^10.4.14" - babel-loader: "npm:^9.1.3" + "@babel/plugin-transform-runtime": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.25.9" + "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-typescript": "npm:^7.25.9" + "@babel/runtime": "npm:^7.25.9" + "@babel/runtime-corejs3": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" babel-plugin-dynamic-import-node: "npm:^2.3.3" + fs-extra: "npm:^11.1.1" + tslib: "npm:^2.6.0" + checksum: 10c0/563ad2a95f690d8d0172acd64f96202d646072dde042edd4d80d39ad01b6fb026a2d5fe124d0e3fc3a7447120ebca15a0b1ef5f5ea431905cae80596584d722f + languageName: node + linkType: hard + +"@docusaurus/bundler@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/bundler@npm:3.7.0" + dependencies: + "@babel/core": "npm:^7.25.9" + "@docusaurus/babel": "npm:3.7.0" + "@docusaurus/cssnano-preset": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + babel-loader: "npm:^9.2.1" + clean-css: "npm:^5.3.2" + copy-webpack-plugin: "npm:^11.0.0" + css-loader: "npm:^6.8.1" + css-minimizer-webpack-plugin: "npm:^5.0.1" + cssnano: "npm:^6.1.2" + file-loader: "npm:^6.2.0" + html-minifier-terser: "npm:^7.2.0" + mini-css-extract-plugin: "npm:^2.9.1" + null-loader: "npm:^4.0.1" + postcss: "npm:^8.4.26" + postcss-loader: "npm:^7.3.3" + postcss-preset-env: "npm:^10.1.0" + react-dev-utils: "npm:^12.0.1" + terser-webpack-plugin: "npm:^5.3.9" + tslib: "npm:^2.6.0" + url-loader: "npm:^4.1.1" + webpack: "npm:^5.95.0" + webpackbar: "npm:^6.0.1" + peerDependencies: + "@docusaurus/faster": "*" + peerDependenciesMeta: + "@docusaurus/faster": + optional: true + checksum: 10c0/79e167e704c8fcae106a9edd7e7b8082d432bb634f51802cc92124e7409ddd227aa9c89ac46776a4fbee7c5729dac61656f5aeade997677e4076f3c0d837a2bb + languageName: node + linkType: hard + +"@docusaurus/core@npm:3.7.0, @docusaurus/core@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/core@npm:3.7.0" + dependencies: + "@docusaurus/babel": "npm:3.7.0" + "@docusaurus/bundler": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" boxen: "npm:^6.2.1" chalk: "npm:^4.1.2" chokidar: "npm:^3.5.3" - clean-css: "npm:^5.3.2" cli-table3: "npm:^0.6.3" combine-promises: "npm:^1.1.0" commander: "npm:^5.1.0" - copy-webpack-plugin: "npm:^11.0.0" core-js: "npm:^3.31.1" - css-loader: "npm:^6.8.1" - css-minimizer-webpack-plugin: "npm:^5.0.1" - cssnano: "npm:^6.1.2" del: "npm:^6.1.1" detect-port: "npm:^1.5.1" escape-html: "npm:^1.0.3" eta: "npm:^2.2.0" eval: "npm:^0.1.8" - file-loader: "npm:^6.2.0" fs-extra: "npm:^11.1.1" - html-minifier-terser: "npm:^7.2.0" html-tags: "npm:^3.3.1" - html-webpack-plugin: "npm:^5.5.3" + html-webpack-plugin: "npm:^5.6.0" leven: "npm:^3.1.0" lodash: "npm:^4.17.21" - mini-css-extract-plugin: "npm:^2.7.6" p-map: "npm:^4.0.0" - postcss: "npm:^8.4.26" - postcss-loader: "npm:^7.3.3" prompts: "npm:^2.4.2" react-dev-utils: "npm:^12.0.1" - react-helmet-async: "npm:^1.3.0" + react-helmet-async: "npm:@slorber/react-helmet-async@1.3.0" react-loadable: "npm:@docusaurus/react-loadable@6.0.0" react-loadable-ssr-addon-v5-slorber: "npm:^1.0.1" react-router: "npm:^5.3.4" react-router-config: "npm:^5.1.1" react-router-dom: "npm:^5.3.4" - rtl-detect: "npm:^1.0.4" semver: "npm:^7.5.4" - serve-handler: "npm:^6.1.5" + serve-handler: "npm:^6.1.6" shelljs: "npm:^0.8.5" - terser-webpack-plugin: "npm:^5.3.9" tslib: "npm:^2.6.0" update-notifier: "npm:^6.0.2" - url-loader: "npm:^4.1.1" - webpack: "npm:^5.88.1" - webpack-bundle-analyzer: "npm:^4.9.0" - webpack-dev-server: "npm:^4.15.1" - webpack-merge: "npm:^5.9.0" - webpackbar: "npm:^5.0.2" + webpack: "npm:^5.95.0" + webpack-bundle-analyzer: "npm:^4.10.2" + webpack-dev-server: "npm:^4.15.2" + webpack-merge: "npm:^6.0.1" peerDependencies: "@mdx-js/react": ^3.0.0 - react: ^18.0.0 - react-dom: ^18.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 10c0/0868fc7cfbc38e7d927d60e927abf883fe442fe723123a58425a5402905a48bfb57b4e59ff555944af54ad3be462380d43e0f737989f6f300f11df2ca29d0498 + checksum: 10c0/2b1034d27107da820f71c15d430aac308e9d63c2c144a1b2aff96927b4e703bd6abaae61a8a3434f5bb4eb25ca34ed793b2b5e6ddb9d2b41ce6e98332b281da4 languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/cssnano-preset@npm:3.5.2" +"@docusaurus/cssnano-preset@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/cssnano-preset@npm:3.7.0" dependencies: cssnano-preset-advanced: "npm:^6.1.2" postcss: "npm:^8.4.38" postcss-sort-media-queries: "npm:^5.2.0" tslib: "npm:^2.6.0" - checksum: 10c0/10fd97d66aa7973d86322ac205978edc18636e13dc1f5eb7e6fca5169c4203660bd958f2a483a2b1639d05c1878f5d0eb5f07676eee5d5aa3b71b417d35fa42a + checksum: 10c0/e6324c50bb946da60692ec387ff1708d3e0ec91f60add539412ba92d92278b843b85c66b861dcb0f089697d5e42698b5c9786f9264cae8835789126c6451911a languageName: node linkType: hard -"@docusaurus/logger@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/logger@npm:3.5.2" +"@docusaurus/logger@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/logger@npm:3.7.0" dependencies: chalk: "npm:^4.1.2" tslib: "npm:^2.6.0" - checksum: 10c0/5360228a980c024445483c88e14c2f2e69ca7b8386c0c39bd147307b0296277fdf06c27e43dba0e43d9ea6abee7b0269a4d6fe166e57ad5ffb2e093759ff6c03 + checksum: 10c0/48f1b13d5f17d27515313f593f2d23b6efe29038dddaf914fd2bec9e8b598d2d7f972d8ae7b09827c9874835a7984101208287c0b93dfa3fe8c5357198378214 languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/mdx-loader@npm:3.5.2" +"@docusaurus/mdx-loader@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/mdx-loader@npm:3.7.0" dependencies: - "@docusaurus/logger": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" "@mdx-js/mdx": "npm:^3.0.0" "@slorber/remark-comment": "npm:^1.0.0" escape-html: "npm:^1.0.3" @@ -2165,42 +3991,42 @@ __metadata: vfile: "npm:^6.0.1" webpack: "npm:^5.88.1" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/52f193578cd3f369c155a2a7a5db532dc482ecb460e3b32ca1111e0036ea8939bfaf4094860929510e639f9a00d1edbbedc797ccdef9eddc381bedaa255d5ab3 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/08b397334b46230486cfd3b67d5d760087902b376201f2a870d33c9228671fe81d53358bb0fa1f441d69a844685ff60315f414ce717c5801dc7d7bb362dcf1c6 languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:3.5.2, @docusaurus/module-type-aliases@npm:^3.5.2": - version: 3.5.2 - resolution: "@docusaurus/module-type-aliases@npm:3.5.2" +"@docusaurus/module-type-aliases@npm:3.7.0, @docusaurus/module-type-aliases@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/module-type-aliases@npm:3.7.0" dependencies: - "@docusaurus/types": "npm:3.5.2" + "@docusaurus/types": "npm:3.7.0" "@types/history": "npm:^4.7.11" "@types/react": "npm:*" "@types/react-router-config": "npm:*" "@types/react-router-dom": "npm:*" - react-helmet-async: "npm:*" + react-helmet-async: "npm:@slorber/react-helmet-async@*" react-loadable: "npm:@docusaurus/react-loadable@6.0.0" peerDependencies: react: "*" react-dom: "*" - checksum: 10c0/5174c8ad4a545b4ef8aa16bae6f6a2d501ab0d4ddd400cca83c55b6b35eac79b1d7cff52d6041da4f0f339a969d72be1f40e57d5ea73a50a61e0688505627e0c + checksum: 10c0/fca90450afb0aaafbae20b70adc2b35af81fff20a1d0fcf3c652b0200ac9be870add257e577e227854b20b9ca375fa53f99242435d2576dfeb7ee791d3fb25ae languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/plugin-content-blog@npm:3.5.2" - dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/logger": "npm:3.5.2" - "@docusaurus/mdx-loader": "npm:3.5.2" - "@docusaurus/theme-common": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-common": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" +"@docusaurus/plugin-content-blog@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-content-blog@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" cheerio: "npm:1.0.0-rc.12" feed: "npm:^4.2.2" fs-extra: "npm:^11.1.1" @@ -2213,25 +4039,25 @@ __metadata: webpack: "npm:^5.88.1" peerDependencies: "@docusaurus/plugin-content-docs": "*" - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/0cdd4944e19c4ed02783be311dd735728a03282585517f48277358373cf46740b5659daa14bdaf58f80e0f949579a97110aa785a15333ad420154acc997471e6 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/8eb1e4f673763a3d5e727cbfe867b5334c67c65ca0804bcd81b818ca62e9ff33cf9c0db013958a40c590327bf4b8037cd5d510f39bc699e6ede8f02680f3af1b languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/plugin-content-docs@npm:3.5.2" - dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/logger": "npm:3.5.2" - "@docusaurus/mdx-loader": "npm:3.5.2" - "@docusaurus/module-type-aliases": "npm:3.5.2" - "@docusaurus/theme-common": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-common": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" +"@docusaurus/plugin-content-docs@npm:3.7.0, @docusaurus/plugin-content-docs@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-content-docs@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/module-type-aliases": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" "@types/react-router-config": "npm:^5.0.7" combine-promises: "npm:^1.1.0" fs-extra: "npm:^11.1.1" @@ -2241,171 +4067,192 @@ __metadata: utility-types: "npm:^3.10.0" webpack: "npm:^5.88.1" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/fd245e323bd2735c9a65bbb50c8411db3bf8b562ad812ef92c4637554b1606aeaf2f2da95ea447a6fb158d96836677d7f95a6a006dae3c4730c231c5527fd7ce + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/eab3810b1b34d0b037cd802747892ece163d818013b4c33a9db40f973df05a6c12a3120f746afa2648b9c2c2b1ec711d6c4552a4cc8e2d904522c355cc02de71 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/plugin-content-pages@npm:3.5.2" +"@docusaurus/plugin-content-pages@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-content-pages@npm:3.7.0" dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/mdx-loader": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" fs-extra: "npm:^11.1.1" tslib: "npm:^2.6.0" webpack: "npm:^5.88.1" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/4ca00fad896976095a64f485c6b58da5426fb8301921b2d3099d3604f3a3485461543e373415b54ce743104ff67f54e4f6fb4364547fce3d8c88be57e1c87426 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/7f1df2f4eb9c4f74af1bfbd7a3fed9874e1bdc06a9d9772584e3f121d63c9686bc6e1c2d9e3304a95cb24b8f12db342ac28132fe08c0082a2cf925a347dd8115 languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/plugin-debug@npm:3.5.2" +"@docusaurus/plugin-debug@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-debug@npm:3.7.0" dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" fs-extra: "npm:^11.1.1" react-json-view-lite: "npm:^1.2.0" tslib: "npm:^2.6.0" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/2d47f01154a026b9c9028df72fa87a633772c5079501a8e7c48ca48ba87fd1f4ec6e7e277c8123315cccbc43a9897e45e8a0b8b975cc337a74316eee03f7b320 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/968a1c14ebe7fed9775269f1b6b86dbe09efbf48d2f0c9ac9ee5572fda9d22b41c970001b58b947d078419b42af6d70f60e87c1d8f24f92c7ce422f364ec32eb languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/plugin-google-analytics@npm:3.5.2" +"@docusaurus/plugin-google-analytics@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-google-analytics@npm:3.7.0" dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" tslib: "npm:^2.6.0" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/19e2fbdb625a0345c7f5571ae39fae5803b32933f7f69ba481daf56b4640d68c899049a8c0a7a774e533723364361a7e56839e4fd279940717c5c35d66c226b5 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/f3881ac270ee38f582563f679d33e4755bfb24c5bf57f31185d8e7caebf7e9e73a480e57c7db88e4f3b15c0176a6b092919b1e4bed078fad58333076aeb116cf languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/plugin-google-gtag@npm:3.5.2" +"@docusaurus/plugin-google-gtag@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-google-gtag@npm:3.7.0" dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" "@types/gtag.js": "npm:^0.0.12" tslib: "npm:^2.6.0" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/ba502ae3e0b766b8eebafe89935365199cbc66f9d472950d3d95362619b1f78dddf8e45a73c7e9a1040be965b927ea5ce76037b3f7ee5443c25cab8e6e232934 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/899429408e2ff95504f8e9c79ffa23877fb717e12746d94d7e96d448a539f04f848b6111b99a15cd08af47b792d0ae2d985fd4af342263b713116cf835058f43 languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/plugin-google-tag-manager@npm:3.5.2" +"@docusaurus/plugin-google-tag-manager@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-google-tag-manager@npm:3.7.0" dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" tslib: "npm:^2.6.0" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/067eed163b41ac03e85b70ec677525479bae6f4b7137e837d81dd48d03ab8c246b52be3236283cbc4607039beddc618adcfe451f91b19e2d41d343cd0952bd73 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/9980d71196835e25f548ebbeac18181914e23c6f07b0441659a12bdfd4fbc15f41b9bfe97b314aae2d8e0e49c0cfd9f38f372452b0a92f3b9a48d2568104f0b9 languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/plugin-sitemap@npm:3.5.2" - dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/logger": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-common": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" +"@docusaurus/plugin-sitemap@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-sitemap@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" fs-extra: "npm:^11.1.1" sitemap: "npm:^7.1.1" tslib: "npm:^2.6.0" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/9490c3a11869fb50abe7d8d9c235d57b18247a2dbe59d2351a6a919f0a4cf5445879e019db049a5dd55cbbb1ce0e19d5f1342e368e593408652f48d19331f961 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/06cce94a8bb81adb87903776086c16fc77029c418b7f07d96506d6ed4d569a7ce3a816627d74f15c1c6a1a98f0ce278c9fc12ca05246c8af8742c12d3b145f30 languageName: node linkType: hard -"@docusaurus/preset-classic@npm:^3.5.2": - version: 3.5.2 - resolution: "@docusaurus/preset-classic@npm:3.5.2" +"@docusaurus/plugin-svgr@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-svgr@npm:3.7.0" dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/plugin-content-blog": "npm:3.5.2" - "@docusaurus/plugin-content-docs": "npm:3.5.2" - "@docusaurus/plugin-content-pages": "npm:3.5.2" - "@docusaurus/plugin-debug": "npm:3.5.2" - "@docusaurus/plugin-google-analytics": "npm:3.5.2" - "@docusaurus/plugin-google-gtag": "npm:3.5.2" - "@docusaurus/plugin-google-tag-manager": "npm:3.5.2" - "@docusaurus/plugin-sitemap": "npm:3.5.2" - "@docusaurus/theme-classic": "npm:3.5.2" - "@docusaurus/theme-common": "npm:3.5.2" - "@docusaurus/theme-search-algolia": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + "@svgr/core": "npm:8.1.0" + "@svgr/webpack": "npm:^8.1.0" + tslib: "npm:^2.6.0" + webpack: "npm:^5.88.1" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/ea15474b01399a7bf05d6fd8b0edbf2856ffc83baa0d726b6e90c365ffc93ed39a78ac3d5690750f43051387ff96a8b455927ffa712f4589f4e4b45a4490aaaa + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/c776758b43db2dfeef234197c98345efb4d28a57f29d0158ea0a3f542391de063cd4f535f15f150d0311aee9de000d126b5730cf1e143120baa6c5a8ea1b527f languageName: node linkType: hard -"@docusaurus/remark-plugin-npm2yarn@npm:^3.5.2": - version: 3.5.2 - resolution: "@docusaurus/remark-plugin-npm2yarn@npm:3.5.2" +"@docusaurus/preset-classic@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/preset-classic@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/plugin-content-blog": "npm:3.7.0" + "@docusaurus/plugin-content-docs": "npm:3.7.0" + "@docusaurus/plugin-content-pages": "npm:3.7.0" + "@docusaurus/plugin-debug": "npm:3.7.0" + "@docusaurus/plugin-google-analytics": "npm:3.7.0" + "@docusaurus/plugin-google-gtag": "npm:3.7.0" + "@docusaurus/plugin-google-tag-manager": "npm:3.7.0" + "@docusaurus/plugin-sitemap": "npm:3.7.0" + "@docusaurus/plugin-svgr": "npm:3.7.0" + "@docusaurus/theme-classic": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/theme-search-algolia": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/25a77c337168f32ce7d6df9b9222c1b21dc3414506841bd4b72be058e10ccfac3ca4e27a392f14f2b591f36815131ed2240795b77d566630980b92952c41897a + languageName: node + linkType: hard + +"@docusaurus/remark-plugin-npm2yarn@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/remark-plugin-npm2yarn@npm:3.7.0" dependencies: mdast-util-mdx: "npm:^3.0.0" - npm-to-yarn: "npm:^2.2.1" + npm-to-yarn: "npm:^3.0.0" tslib: "npm:^2.6.0" unified: "npm:^11.0.3" unist-util-visit: "npm:^5.0.0" - checksum: 10c0/a9a7f212e0fad41c9c74184259eca37a838b6637b382f4ddee47f533036c292b0d6bdfcde93d8d7bed259baf8d4a36c7dd1456bfeb8bde5c4d92d3b4c7a99db7 + checksum: 10c0/48345e9fda219a1023bcfe786cd24bddf7f08c965093b7a5f5a9232210f2866dff9e750efab99c6e0b10f98264726a94205436e3cfae841d20161b721c1a88e2 languageName: node linkType: hard -"@docusaurus/theme-classic@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/theme-classic@npm:3.5.2" - dependencies: - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/mdx-loader": "npm:3.5.2" - "@docusaurus/module-type-aliases": "npm:3.5.2" - "@docusaurus/plugin-content-blog": "npm:3.5.2" - "@docusaurus/plugin-content-docs": "npm:3.5.2" - "@docusaurus/plugin-content-pages": "npm:3.5.2" - "@docusaurus/theme-common": "npm:3.5.2" - "@docusaurus/theme-translations": "npm:3.5.2" - "@docusaurus/types": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-common": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" +"@docusaurus/theme-classic@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-classic@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/module-type-aliases": "npm:3.7.0" + "@docusaurus/plugin-content-blog": "npm:3.7.0" + "@docusaurus/plugin-content-docs": "npm:3.7.0" + "@docusaurus/plugin-content-pages": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/theme-translations": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" "@mdx-js/react": "npm:^3.0.0" clsx: "npm:^2.0.0" copy-text-to-clipboard: "npm:^3.2.0" - infima: "npm:0.2.0-alpha.44" + infima: "npm:0.2.0-alpha.45" lodash: "npm:^4.17.21" nprogress: "npm:^0.2.0" postcss: "npm:^8.4.26" @@ -2416,20 +4263,20 @@ __metadata: tslib: "npm:^2.6.0" utility-types: "npm:^3.10.0" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/b0f1dd2a81b96d5522ce456de77e0edd539ea07406ff370b624d878a46af4b33f66892242bc177bf04a0026831fccd3621d722c174ebb8a05a8e6f6ed07d72c3 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/e2ec1fdaedc71add6ae1e8ee83ae32132c679afe407850185fbbec82f96c66a3befd506df73a0de0d9e03333c04801017f4c668e63851cb6e814f2ddf6973ad0 languageName: node linkType: hard -"@docusaurus/theme-common@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/theme-common@npm:3.5.2" +"@docusaurus/theme-common@npm:3.7.0, @docusaurus/theme-common@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-common@npm:3.7.0" dependencies: - "@docusaurus/mdx-loader": "npm:3.5.2" - "@docusaurus/module-type-aliases": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-common": "npm:3.5.2" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/module-type-aliases": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" "@types/history": "npm:^4.7.11" "@types/react": "npm:*" "@types/react-router-config": "npm:*" @@ -2440,26 +4287,26 @@ __metadata: utility-types: "npm:^3.10.0" peerDependencies: "@docusaurus/plugin-content-docs": "*" - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/ae84a910b98c2b6706110e1580af96e5d87d5b29fe1f085d461932aa9608ee3df90e257d809ddcea5c5d848a160933d16052db1669dd062b5d13870834ac0394 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/4b5ba21d2d5807a9582cd1fe5280fa0637a7debb8313253793d35435ce92e119406d47564766ec0bf0f93d7d2f8da412883ea4b16972f79bee5bda20ac6f354e languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/theme-search-algolia@npm:3.5.2" - dependencies: - "@docsearch/react": "npm:^3.5.2" - "@docusaurus/core": "npm:3.5.2" - "@docusaurus/logger": "npm:3.5.2" - "@docusaurus/plugin-content-docs": "npm:3.5.2" - "@docusaurus/theme-common": "npm:3.5.2" - "@docusaurus/theme-translations": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-validation": "npm:3.5.2" - algoliasearch: "npm:^4.18.0" - algoliasearch-helper: "npm:^3.13.3" +"@docusaurus/theme-search-algolia@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-search-algolia@npm:3.7.0" + dependencies: + "@docsearch/react": "npm:^3.8.1" + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/plugin-content-docs": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/theme-translations": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + algoliasearch: "npm:^5.17.1" + algoliasearch-helper: "npm:^3.22.6" clsx: "npm:^2.0.0" eta: "npm:^2.2.0" fs-extra: "npm:^11.1.1" @@ -2467,86 +4314,82 @@ __metadata: tslib: "npm:^2.6.0" utility-types: "npm:^3.10.0" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/c617528fc0574611e49eb355f99df47e77a295a3c87792f185ec53ce0e7a6b239f017e0d9f8b45d91c87f3c615e9008441978d6daf35debcbb1b48fc9d2d98ee + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/4766e2571b64cc895e7ab3af750e9158527f3ebe238605f325defe755ddd938af9b01d711b932b3c6639b31b2d69a6f360b2870fa1104599829c276a30457f6e languageName: node linkType: hard -"@docusaurus/theme-translations@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/theme-translations@npm:3.5.2" +"@docusaurus/theme-translations@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-translations@npm:3.7.0" dependencies: fs-extra: "npm:^11.1.1" tslib: "npm:^2.6.0" - checksum: 10c0/aa427b55a6d642ff30d67d5b9b8bc9f16f92b8902b125d3d6499c59e7e4ece3549a8a8e9fc017ef1cc68d9b9d5426a35812f8bf829c049103607867d605adc7b + checksum: 10c0/47721f98fdaa34004e2df555e89dd4d751942c9d8efe2df3816bc6b761a068058e31887086a1d1498394fc53c859340b6ce9e15ee65e926e05c7c1e2429497ad languageName: node linkType: hard -"@docusaurus/tsconfig@npm:^3.5.2": - version: 3.5.2 - resolution: "@docusaurus/tsconfig@npm:3.5.2" - checksum: 10c0/1cde5cfadfc94605ba9a1ec8484bc58700bcff99944fa20c6f6d93599126914dc33f15c3464ee3279cf6becafcea86909d1d25a20f8f97e95c8ddf6b1122eac8 +"@docusaurus/tsconfig@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/tsconfig@npm:3.7.0" + checksum: 10c0/22a076fa3cf6da25a76f87fbe5b37c09997f5a8729fdc1a69c0c7955dff9f9850f16dc1de8c6d5096d258a95c428fb8839b252b9dbaa648acb7de8a0e5889dea languageName: node linkType: hard -"@docusaurus/types@npm:3.5.2, @docusaurus/types@npm:^3.5.2": - version: 3.5.2 - resolution: "@docusaurus/types@npm:3.5.2" +"@docusaurus/types@npm:3.7.0, @docusaurus/types@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/types@npm:3.7.0" dependencies: "@mdx-js/mdx": "npm:^3.0.0" "@types/history": "npm:^4.7.11" "@types/react": "npm:*" commander: "npm:^5.1.0" joi: "npm:^17.9.2" - react-helmet-async: "npm:^1.3.0" + react-helmet-async: "npm:@slorber/react-helmet-async@1.3.0" utility-types: "npm:^3.10.0" - webpack: "npm:^5.88.1" + webpack: "npm:^5.95.0" webpack-merge: "npm:^5.9.0" peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 10c0/a06607a8ed96871d9a2c1239e1d94e584acd5c638f7eb4071feb1f18221c25c9b78794b3f804884db201cfdfc67cecdf37a823efe854f435fb4f5a36b28237d4 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/256d3b579e0f663096d915cfd34851564a243dd3b587901f0b8de7988ea021bf4c9f9bcb9d632f52cddb37f53959be8d93728421ddbba7f9c98a36f0dec454cd languageName: node linkType: hard -"@docusaurus/utils-common@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/utils-common@npm:3.5.2" +"@docusaurus/utils-common@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/utils-common@npm:3.7.0" dependencies: + "@docusaurus/types": "npm:3.7.0" tslib: "npm:^2.6.0" - peerDependencies: - "@docusaurus/types": "*" - peerDependenciesMeta: - "@docusaurus/types": - optional: true - checksum: 10c0/17723bed0174d98895eff9666e9988757cb1b3562d90045db7a9a90294d686ca5472f5d7c171de7f306148ae24573ae7e959d31167a8dac8c1b4d7606459e056 + checksum: 10c0/a02dc936f256ceb1a95e57556d556bd57576124eb903928fccfa19e3fa098ee5a2e637663b372c8f797c50ab9df7c0e94f59b3b728198a408fa191689f2aa7e7 languageName: node linkType: hard -"@docusaurus/utils-validation@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/utils-validation@npm:3.5.2" +"@docusaurus/utils-validation@npm:3.7.0, @docusaurus/utils-validation@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/utils-validation@npm:3.7.0" dependencies: - "@docusaurus/logger": "npm:3.5.2" - "@docusaurus/utils": "npm:3.5.2" - "@docusaurus/utils-common": "npm:3.5.2" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" fs-extra: "npm:^11.2.0" joi: "npm:^17.9.2" js-yaml: "npm:^4.1.0" lodash: "npm:^4.17.21" tslib: "npm:^2.6.0" - checksum: 10c0/b179f7e68f9e3bfad7d03001ca9280e4122592a8995ea7ca31a8a59c5ce3b568af1177b06b41417c98bcd4cd30a7a054d0c06be8384b3f05be37bf239df96213 + checksum: 10c0/f0b67f93879b23c3238f66dde0361999399e40a61bb2531ba044939d136ed112e4d0304a598f718942e897d6abd3fd4e75d03d21e559fc2197a0d6324926668f languageName: node linkType: hard -"@docusaurus/utils@npm:3.5.2": - version: 3.5.2 - resolution: "@docusaurus/utils@npm:3.5.2" +"@docusaurus/utils@npm:3.7.0, @docusaurus/utils@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/utils@npm:3.7.0" dependencies: - "@docusaurus/logger": "npm:3.5.2" - "@docusaurus/utils-common": "npm:3.5.2" - "@svgr/webpack": "npm:^8.1.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" escape-string-regexp: "npm:^4.0.0" file-loader: "npm:^6.2.0" fs-extra: "npm:^11.1.1" @@ -2564,12 +4407,7 @@ __metadata: url-loader: "npm:^4.1.1" utility-types: "npm:^3.10.0" webpack: "npm:^5.88.1" - peerDependencies: - "@docusaurus/types": "*" - peerDependenciesMeta: - "@docusaurus/types": - optional: true - checksum: 10c0/a4d2d530c16ffd93bb84f5bc221efb767cba5915cfabd36f83130ba008cbb03a4d79ec324bb1dd0ef2d25d1317692357ee55ec8df0e9e801022e37c633b80ca9 + checksum: 10c0/8d6dbb5c776e0cbf0c8437a81d0d97ff6f51ca259c9d3baa0e1b26849e48a016d02fb2ec80290dc2b8e434ca3dd1388ad4b44de2d101d5edea50de64531ccef1 languageName: node linkType: hard @@ -3120,6 +4958,17 @@ __metadata: languageName: node linkType: hard +"@hookform/error-message@npm:^2.0.1": + version: 2.0.1 + resolution: "@hookform/error-message@npm:2.0.1" + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + react-hook-form: ^7.0.0 + checksum: 10c0/6b608bcdbd797ddb7c6cfc8c42b6bbac40066181a0c582b1f1a342bfa65fa7e8329cdb8e869a76e33988cd46fe8623d521ea597231b9d33e1f0ba3288e36c58e + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" @@ -3777,6 +5626,150 @@ __metadata: languageName: node linkType: hard +"@parcel/watcher-android-arm64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-android-arm64@npm:2.5.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-darwin-arm64@npm:2.5.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-darwin-x64@npm:2.5.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-freebsd-x64@npm:2.5.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-musl@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-win32-arm64@npm:2.5.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-win32-ia32@npm:2.5.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.5.1": + version: 2.5.1 + resolution: "@parcel/watcher-win32-x64@npm:2.5.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.4.1": + version: 2.5.1 + resolution: "@parcel/watcher@npm:2.5.1" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.5.1" + "@parcel/watcher-darwin-arm64": "npm:2.5.1" + "@parcel/watcher-darwin-x64": "npm:2.5.1" + "@parcel/watcher-freebsd-x64": "npm:2.5.1" + "@parcel/watcher-linux-arm-glibc": "npm:2.5.1" + "@parcel/watcher-linux-arm-musl": "npm:2.5.1" + "@parcel/watcher-linux-arm64-glibc": "npm:2.5.1" + "@parcel/watcher-linux-arm64-musl": "npm:2.5.1" + "@parcel/watcher-linux-x64-glibc": "npm:2.5.1" + "@parcel/watcher-linux-x64-musl": "npm:2.5.1" + "@parcel/watcher-win32-arm64": "npm:2.5.1" + "@parcel/watcher-win32-ia32": "npm:2.5.1" + "@parcel/watcher-win32-x64": "npm:2.5.1" + detect-libc: "npm:^1.0.3" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm-musl": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 10c0/8f35073d0c0b34a63d4c8d2213482f0ebc6a25de7b2cdd415d19cb929964a793cb285b68d1d50bfb732b070b3c82a2fdb4eb9c250eab709a1cd9d63345455a82 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -3855,7 +5848,7 @@ __metadata: languageName: node linkType: hard -"@redocly/openapi-core@npm:^1.10.5, @redocly/openapi-core@npm:^1.4.0": +"@redocly/openapi-core@npm:^1.10.5": version: 1.34.1 resolution: "@redocly/openapi-core@npm:1.34.1" dependencies: @@ -3872,6 +5865,26 @@ __metadata: languageName: node linkType: hard +"@reduxjs/toolkit@npm:^1.7.1": + version: 1.9.7 + resolution: "@reduxjs/toolkit@npm:1.9.7" + dependencies: + immer: "npm:^9.0.21" + redux: "npm:^4.2.1" + redux-thunk: "npm:^2.4.2" + reselect: "npm:^4.1.8" + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 + react-redux: ^7.2.1 || ^8.0.2 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + checksum: 10c0/fa0aa4b7c6973ac87ce0ac7e45faa02c73b66c4ee0bc950d178494539a42a1bb908d109297102458b7ea14d5e7dae356e7a7ce9a1b9849b0e8451e6dd70fca9c + languageName: node + linkType: hard + "@rollup/pluginutils@npm:^5.1.0": version: 5.1.1 resolution: "@rollup/pluginutils@npm:5.1.1" @@ -5284,7 +7297,7 @@ __metadata: languageName: node linkType: hard -"@types/eslint-scope@npm:^3.7.3": +"@types/eslint-scope@npm:^3.7.3, @types/eslint-scope@npm:^3.7.7": version: 3.7.7 resolution: "@types/eslint-scope@npm:3.7.7" dependencies: @@ -5330,6 +7343,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:^1.0.6": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33": version: 4.19.5 resolution: "@types/express-serve-static-core@npm:4.19.5" @@ -5368,6 +7388,15 @@ __metadata: languageName: node linkType: hard +"@types/hast@npm:^2.0.0": + version: 2.3.10 + resolution: "@types/hast@npm:2.3.10" + dependencies: + "@types/unist": "npm:^2" + checksum: 10c0/16daac35d032e656defe1f103f9c09c341a6dc553c7ec17b388274076fa26e904a71ea5ea41fd368a6d5f1e9e53be275c80af7942b9c466d8511d261c9529c7e + languageName: node + linkType: hard + "@types/hast@npm:^3.0.0": version: 3.0.4 resolution: "@types/hast@npm:3.0.4" @@ -5384,6 +7413,16 @@ __metadata: languageName: node linkType: hard +"@types/hoist-non-react-statics@npm:^3.3.0": + version: 3.3.6 + resolution: "@types/hoist-non-react-statics@npm:3.3.6" + dependencies: + "@types/react": "npm:*" + hoist-non-react-statics: "npm:^3.3.0" + checksum: 10c0/149a4c217d81f21f8a1e152160a59d5b99b6a9aa6d354385d5f5bc02760cbf1e170a8442ba92eb653befff44b0c5bc2234bb77ce33e0d11a65f779e8bab5c321 + languageName: node + linkType: hard + "@types/html-minifier-terser@npm:^6.0.0": version: 6.1.0 resolution: "@types/html-minifier-terser@npm:6.1.0" @@ -5439,7 +7478,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -5453,6 +7492,15 @@ __metadata: languageName: node linkType: hard +"@types/mdast@npm:^3.0.0": + version: 3.0.15 + resolution: "@types/mdast@npm:3.0.15" + dependencies: + "@types/unist": "npm:^2" + checksum: 10c0/fcbf716c03d1ed5465deca60862e9691414f9c43597c288c7d2aefbe274552e1bbd7aeee91b88a02597e88a28c139c57863d0126fcf8416a95fdc681d054ee3d + languageName: node + linkType: hard + "@types/mdast@npm:^4.0.0, @types/mdast@npm:^4.0.2": version: 4.0.4 resolution: "@types/mdast@npm:4.0.4" @@ -5542,6 +7590,13 @@ __metadata: languageName: node linkType: hard +"@types/parse5@npm:^6.0.0": + version: 6.0.3 + resolution: "@types/parse5@npm:6.0.3" + checksum: 10c0/a7c7ef6625974b74b93c1105953003a2291897e453369efcadc569b907de2784d61d4e6905de3ef959fa07f3278f41ed0c22ead0173776023fc43b6ed31042d0 + languageName: node + linkType: hard + "@types/pg-pool@npm:2.0.4": version: 2.0.4 resolution: "@types/pg-pool@npm:2.0.4" @@ -5587,6 +7642,13 @@ __metadata: languageName: node linkType: hard +"@types/prop-types@npm:^15.0.0": + version: 15.7.14 + resolution: "@types/prop-types@npm:15.7.14" + checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1 + languageName: node + linkType: hard + "@types/pug@npm:^2.0.6": version: 2.0.10 resolution: "@types/pug@npm:2.0.10" @@ -5617,6 +7679,18 @@ __metadata: languageName: node linkType: hard +"@types/react-redux@npm:^7.1.20": + version: 7.1.34 + resolution: "@types/react-redux@npm:7.1.34" + dependencies: + "@types/hoist-non-react-statics": "npm:^3.3.0" + "@types/react": "npm:*" + hoist-non-react-statics: "npm:^3.3.0" + redux: "npm:^4.0.0" + checksum: 10c0/6750964ec656eb6973b0e4fda787549aee5dbc266a0f0e78fc9efb417b4965c0b060d10b99a7b7fa0c8812b8a0a07d97a1ef46d094bf64fee07144e8bbad781a + languageName: node + linkType: hard + "@types/react-router-config@npm:*, @types/react-router-config@npm:^5.0.7": version: 5.0.11 resolution: "@types/react-router-config@npm:5.0.11" @@ -5663,9 +7737,18 @@ __metadata: version: 18.3.8 resolution: "@types/react@npm:18.3.8" dependencies: - "@types/prop-types": "npm:*" + "@types/prop-types": "npm:*" + csstype: "npm:^3.0.2" + checksum: 10c0/367312c9fe276639ecb142265e090a4dd04bb39f8d718cbab546de3f1ddcfddeff415e1147d0fc40f734badaa7420b7b109d511bd4304b2c4c9c36164612fdf8 + languageName: node + linkType: hard + +"@types/react@npm:^19.1.2": + version: 19.1.2 + resolution: "@types/react@npm:19.1.2" + dependencies: csstype: "npm:^3.0.2" - checksum: 10c0/367312c9fe276639ecb142265e090a4dd04bb39f8d718cbab546de3f1ddcfddeff415e1147d0fc40f734badaa7420b7b109d511bd4304b2c4c9c36164612fdf8 + checksum: 10c0/76ffe71395c713d4adc3c759465012d3c956db00af35ab7c6d0d91bd07b274b7ce69caa0478c0760311587bd1e38c78ffc9688ebc629f2b266682a19d8750947 languageName: node linkType: hard @@ -5745,13 +7828,6 @@ __metadata: languageName: node linkType: hard -"@types/trusted-types@npm:^2.0.7": - version: 2.0.7 - resolution: "@types/trusted-types@npm:2.0.7" - checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c - languageName: node - linkType: hard - "@types/unist@npm:*, @types/unist@npm:^3.0.0": version: 3.0.2 resolution: "@types/unist@npm:3.0.2" @@ -5759,6 +7835,13 @@ __metadata: languageName: node linkType: hard +"@types/unist@npm:^2": + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 10c0/24dcdf25a168f453bb70298145eb043cfdbb82472db0bc0b56d6d51cd2e484b9ed8271d4ac93000a80da568f2402e9339723db262d0869e2bf13bc58e081768d + languageName: node + linkType: hard + "@types/unist@npm:^2.0.0": version: 2.0.10 resolution: "@types/unist@npm:2.0.10" @@ -6331,6 +8414,16 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + "@webassemblyjs/floating-point-hex-parser@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" @@ -6338,6 +8431,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + "@webassemblyjs/helper-api-error@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" @@ -6345,6 +8445,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + "@webassemblyjs/helper-buffer@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/helper-buffer@npm:1.12.1" @@ -6352,6 +8459,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + "@webassemblyjs/helper-numbers@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" @@ -6363,6 +8477,17 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" @@ -6370,6 +8495,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + "@webassemblyjs/helper-wasm-section@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1" @@ -6382,6 +8514,18 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + "@webassemblyjs/ieee754@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/ieee754@npm:1.11.6" @@ -6391,6 +8535,15 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + "@webassemblyjs/leb128@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/leb128@npm:1.11.6" @@ -6400,6 +8553,15 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + "@webassemblyjs/utf8@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/utf8@npm:1.11.6" @@ -6407,6 +8569,13 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + "@webassemblyjs/wasm-edit@npm:^1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-edit@npm:1.12.1" @@ -6423,6 +8592,22 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + "@webassemblyjs/wasm-gen@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-gen@npm:1.12.1" @@ -6436,6 +8621,19 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 + languageName: node + linkType: hard + "@webassemblyjs/wasm-opt@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-opt@npm:1.12.1" @@ -6448,6 +8646,18 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee + languageName: node + linkType: hard + "@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-parser@npm:1.12.1" @@ -6462,6 +8672,20 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 + languageName: node + linkType: hard + "@webassemblyjs/wast-printer@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wast-printer@npm:1.12.1" @@ -6472,6 +8696,16 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 + languageName: node + linkType: hard + "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" @@ -6576,6 +8810,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.14.0": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" + bin: + acorn: bin/acorn + checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 + languageName: node + linkType: hard + "address@npm:^1.0.1, address@npm:^1.1.2": version: 1.2.2 resolution: "address@npm:1.2.2" @@ -6738,18 +8981,18 @@ __metadata: languageName: node linkType: hard -"algoliasearch-helper@npm:^3.13.3": - version: 3.22.3 - resolution: "algoliasearch-helper@npm:3.22.3" +"algoliasearch-helper@npm:^3.22.6": + version: 3.24.3 + resolution: "algoliasearch-helper@npm:3.24.3" dependencies: "@algolia/events": "npm:^4.0.1" peerDependencies: algoliasearch: ">= 3.1 < 6" - checksum: 10c0/c522eedd6cef022cd5c23ad3ec24691ce555ea1401cdd8c1cd650070b083dbd10bb6e859436d3a22659cc7a3ec9c056accbc6c02f957e1e316c2f5b3ec387f92 + checksum: 10c0/a7a3af435424b6e16e748ade78f4997c41a11cc2f35d154d4a00d422987fe35fa02a617a4af119ed6af56651ab5706e830866a82966135a539b947ab87d68174 languageName: node linkType: hard -"algoliasearch@npm:^4.12.0, algoliasearch@npm:^4.18.0, algoliasearch@npm:^4.19.1": +"algoliasearch@npm:^4.12.0": version: 4.24.0 resolution: "algoliasearch@npm:4.24.0" dependencies: @@ -6772,6 +9015,27 @@ __metadata: languageName: node linkType: hard +"algoliasearch@npm:^5.14.2, algoliasearch@npm:^5.17.1": + version: 5.23.4 + resolution: "algoliasearch@npm:5.23.4" + dependencies: + "@algolia/client-abtesting": "npm:5.23.4" + "@algolia/client-analytics": "npm:5.23.4" + "@algolia/client-common": "npm:5.23.4" + "@algolia/client-insights": "npm:5.23.4" + "@algolia/client-personalization": "npm:5.23.4" + "@algolia/client-query-suggestions": "npm:5.23.4" + "@algolia/client-search": "npm:5.23.4" + "@algolia/ingestion": "npm:1.23.4" + "@algolia/monitoring": "npm:1.23.4" + "@algolia/recommend": "npm:5.23.4" + "@algolia/requester-browser-xhr": "npm:5.23.4" + "@algolia/requester-fetch": "npm:5.23.4" + "@algolia/requester-node-http": "npm:5.23.4" + checksum: 10c0/6282ed366df7cd1ac28dbf6a3cbef9966e449c49150f6c0296e9308ec6250781f1d08eb8befe18d24efd02a643c878141f71dd2f18fee0a5bed92aeea5996dc2 + languageName: node + linkType: hard + "allof-merge@npm:^0.6.6": version: 0.6.6 resolution: "allof-merge@npm:0.6.6" @@ -6790,6 +9054,15 @@ __metadata: languageName: node linkType: hard +"ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + "ansi-html-community@npm:^0.0.8": version: 0.0.8 resolution: "ansi-html-community@npm:0.0.8" @@ -7063,6 +9336,13 @@ __metadata: languageName: node linkType: hard +"async@npm:3.2.2": + version: 3.2.2 + resolution: "async@npm:3.2.2" + checksum: 10c0/0702c7d70d26f8aa2afdcefca2a1aab45dd36d95e4b652ee3d1c784001b5fcb0132737e068200eb5f38feee01b748b1839c4c94ce11f37fd86b8fb3d6b5addaa + languageName: node + linkType: hard + "async@npm:3.2.4": version: 3.2.4 resolution: "async@npm:3.2.4" @@ -7095,7 +9375,7 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^10.4.14, autoprefixer@npm:^10.4.19": +"autoprefixer@npm:^10.4.19": version: 10.4.20 resolution: "autoprefixer@npm:10.4.20" dependencies: @@ -7113,6 +9393,24 @@ __metadata: languageName: node linkType: hard +"autoprefixer@npm:^10.4.21": + version: 10.4.21 + resolution: "autoprefixer@npm:10.4.21" + dependencies: + browserslist: "npm:^4.24.4" + caniuse-lite: "npm:^1.0.30001702" + fraction.js: "npm:^4.3.7" + normalize-range: "npm:^0.1.2" + picocolors: "npm:^1.1.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: 10c0/de5b71d26d0baff4bbfb3d59f7cf7114a6030c9eeb66167acf49a32c5b61c68e308f1e0f869d92334436a221035d08b51cd1b2f2c4689b8d955149423c16d4d4 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -7145,16 +9443,16 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:^9.1.3": - version: 9.1.3 - resolution: "babel-loader@npm:9.1.3" +"babel-loader@npm:^9.2.1": + version: 9.2.1 + resolution: "babel-loader@npm:9.2.1" dependencies: find-cache-dir: "npm:^4.0.0" schema-utils: "npm:^4.0.0" peerDependencies: "@babel/core": ^7.12.0 webpack: ">=5" - checksum: 10c0/e3fc3c9e02bd908b37e8e8cd4f3d7280cf6ac45e33fc203aedbb615135a0fecc33bf92573b71a166a827af029d302c0b060354985cd91d510320bd70a2f949eb + checksum: 10c0/efb82faff4c7c27e9c15bb28bf11c73200e61cf365118a9514e8d74dd489d0afc2a0d5aaa62cb4254eefc2ab631579224d95a03fd245410f28ea75e24de54ba4 languageName: node linkType: hard @@ -7180,7 +9478,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": +"babel-plugin-polyfill-corejs3@npm:^0.10.4": version: 0.10.6 resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" dependencies: @@ -7192,6 +9490,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs3@npm:^0.11.0": + version: 0.11.1 + resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.3" + core-js-compat: "npm:^3.40.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/025f754b6296d84b20200aff63a3c1acdd85e8c621781f2bd27fe2512d0060526192d02329326947c6b29c27cf475fbcfaaff8c51eab1d2bfc7b79086bb64229 + languageName: node + linkType: hard + "babel-plugin-polyfill-regenerator@npm:^0.6.1": version: 0.6.2 resolution: "babel-plugin-polyfill-regenerator@npm:0.6.2" @@ -7217,6 +9527,13 @@ __metadata: languageName: node linkType: hard +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -7356,6 +9673,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.24.0, browserslist@npm:^4.24.4": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" + dependencies: + caniuse-lite: "npm:^1.0.30001688" + electron-to-chromium: "npm:^1.5.73" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.1" + bin: + browserslist: cli.js + checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9 + languageName: node + linkType: hard + "buffer-crc32@npm:^0.2.5": version: 0.2.13 resolution: "buffer-crc32@npm:0.2.13" @@ -7377,6 +9708,16 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 + languageName: node + linkType: hard + "bytes@npm:3.0.0": version: 3.0.0 resolution: "bytes@npm:3.0.0" @@ -7440,6 +9781,16 @@ __metadata: languageName: node linkType: hard +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + "call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" @@ -7453,6 +9804,16 @@ __metadata: languageName: node linkType: hard +"call-bound@npm:^1.0.2": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + "call-me-maybe@npm:^1.0.1": version: 1.0.2 resolution: "call-me-maybe@npm:1.0.2" @@ -7524,6 +9885,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001688, caniuse-lite@npm:^1.0.30001702": + version: 1.0.30001715 + resolution: "caniuse-lite@npm:1.0.30001715" + checksum: 10c0/0109a7da797ffbe1aa197baa5242b205011098eecec1087ef3d0c58ceea19be325ab6679b2751a78660adc3051a9f77e99d5789938fd1eb1235e6fdf6a1dbf8e + languageName: node + linkType: hard + "capnp-ts@npm:^0.7.0": version: 0.7.0 resolution: "capnp-ts@npm:0.7.0" @@ -7683,6 +10051,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^4.0.0": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -7711,13 +10088,6 @@ __metadata: languageName: node linkType: hard -"classnames@npm:^2.3.2": - version: 2.5.1 - resolution: "classnames@npm:2.5.1" - checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 - languageName: node - linkType: hard - "clean-css@npm:^5.2.2, clean-css@npm:^5.3.2, clean-css@npm:~5.3.2": version: 5.3.3 resolution: "clean-css@npm:5.3.3" @@ -8045,13 +10415,6 @@ __metadata: languageName: node linkType: hard -"consola@npm:^2.15.3": - version: 2.15.3 - resolution: "consola@npm:2.15.3" - checksum: 10c0/34a337e6b4a1349ee4d7b4c568484344418da8fdb829d7d71bfefcd724f608f273987633b6eef465e8de510929907a092e13cb7a28a5d3acb3be446fcc79fd5e - languageName: node - linkType: hard - "consola@npm:^3.2.3": version: 3.2.3 resolution: "consola@npm:3.2.3" @@ -8110,7 +10473,7 @@ __metadata: languageName: node linkType: hard -"copy-text-to-clipboard@npm:^3.2.0": +"copy-text-to-clipboard@npm:^3.1.0, copy-text-to-clipboard@npm:^3.2.0": version: 3.2.0 resolution: "copy-text-to-clipboard@npm:3.2.0" checksum: 10c0/d60fdadc59d526e19d56ad23cec2b292d33c771a5091621bd322d138804edd3c10eb2367d46ec71b39f5f7f7116a2910b332281aeb36a5b679199d746a8a5381 @@ -8142,6 +10505,15 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.40.0": + version: 3.41.0 + resolution: "core-js-compat@npm:3.41.0" + dependencies: + browserslist: "npm:^4.24.4" + checksum: 10c0/92d2c748d3dd1c4e3b6cee6b6683b9212db9bc0a6574d933781210daf3baaeb76334ed4636eb8935b45802aa8d9235ab604c9a262694e02a2fa17ad0f6976829 + languageName: node + linkType: hard + "core-js-pure@npm:^3.30.2": version: 3.38.0 resolution: "core-js-pure@npm:3.38.0" @@ -8222,6 +10594,13 @@ __metadata: languageName: node linkType: hard +"crypto-js@npm:^4.1.1": + version: 4.2.0 + resolution: "crypto-js@npm:4.2.0" + checksum: 10c0/8fbdf9d56f47aea0794ab87b0eb9833baf80b01a7c5c1b0edc7faf25f662fb69ab18dc2199e2afcac54670ff0cd9607a9045a3f7a80336cccd18d77a55b9fdf0 + languageName: node + linkType: hard + "crypto-random-string@npm:^4.0.0": version: 4.0.0 resolution: "crypto-random-string@npm:4.0.0" @@ -8231,6 +10610,17 @@ __metadata: languageName: node linkType: hard +"css-blank-pseudo@npm:^7.0.1": + version: 7.0.1 + resolution: "css-blank-pseudo@npm:7.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/46c3d3a611972fdb0c264db7c0b34fe437bc4300961d11945145cf04962f52a545a6ef55bc8ff4afd82b605bd692b4970f2b54582616dea00441105e725d4618 + languageName: node + linkType: hard + "css-color-keywords@npm:^1.0.0": version: 1.0.0 resolution: "css-color-keywords@npm:1.0.0" @@ -8247,6 +10637,19 @@ __metadata: languageName: node linkType: hard +"css-has-pseudo@npm:^7.0.2": + version: 7.0.2 + resolution: "css-has-pseudo@npm:7.0.2" + dependencies: + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/456e9ce1eec8a535683c329956acfe53ce5a208345d7f2fcbe662626be8b3c98681e9041d7f4980316714397b0c1c3defde25653d629c396df17803d599c4edf + languageName: node + linkType: hard + "css-loader@npm:^6.8.1": version: 6.11.0 resolution: "css-loader@npm:6.11.0" @@ -8300,6 +10703,15 @@ __metadata: languageName: node linkType: hard +"css-prefers-color-scheme@npm:^10.0.0": + version: 10.0.0 + resolution: "css-prefers-color-scheme@npm:10.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a66c727bb2455328b18862f720819fc98ff5c1486b69f758bdb5c66f46cc6d484f9fc0bfa4f00f2693c5da6707ad136ca789496982f713ade693f08af624930e + languageName: node + linkType: hard + "css-select@npm:^4.1.3": version: 4.3.0 resolution: "css-select@npm:4.3.0" @@ -8364,6 +10776,13 @@ __metadata: languageName: node linkType: hard +"cssdb@npm:^8.2.5": + version: 8.2.5 + resolution: "cssdb@npm:8.2.5" + checksum: 10c0/3f6f2941c958ea0bdbcc1f807ee728d851ef60c370fbcd54360840e3192f082e0a0b2fa4ea600ca74fa771936c9130883727d7845132cc8bf135a4e0a1e55746 + languageName: node + linkType: hard + "cssesc@npm:^3.0.0": version: 3.0.0 resolution: "cssesc@npm:3.0.0" @@ -8930,13 +11349,6 @@ __metadata: languageName: node linkType: hard -"decko@npm:^1.2.0": - version: 1.2.0 - resolution: "decko@npm:1.2.0" - checksum: 10c0/bae2187734b6faa9db1cf53b04bb107f79a55735d85c7511f941d7fd1cac36991ad2048dee8451dcbcb4efa23a46e5dfd46f71a51585457cd5b912869b5d346b - languageName: node - linkType: hard - "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -9123,6 +11535,15 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: 10c0/4da0deae9f69e13bc37a0902d78bf7169480004b1fed3c19722d56cff578d16f0e11633b7fbf5fb6249181236c72e90024cbd68f0b9558ae06e281f47326d50d + languageName: node + linkType: hard + "detect-node@npm:^2.0.4": version: 2.1.0 resolution: "detect-node@npm:2.1.0" @@ -9130,6 +11551,15 @@ __metadata: languageName: node linkType: hard +"detect-package-manager@npm:3.0.2": + version: 3.0.2 + resolution: "detect-package-manager@npm:3.0.2" + dependencies: + execa: "npm:^5.1.1" + checksum: 10c0/855a8ccd12ea8df19d9c7170e3180592ba6a0826c9d764e6426f115444f918e69724ca38b79121b9cea27a492effc9c8de1c25ff980997252379a7e4d9722569 + languageName: node + linkType: hard + "detect-port-alt@npm:^1.1.6": version: 1.1.6 resolution: "detect-port-alt@npm:1.1.6" @@ -9186,6 +11616,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^5.0.0": + version: 5.2.0 + resolution: "diff@npm:5.2.0" + checksum: 10c0/aed0941f206fe261ecb258dc8d0ceea8abbde3ace5827518ff8d302f0fc9cc81ce116c4d8f379151171336caf0516b79e01abdc1ed1201b6440d895a66689eb4 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -9217,24 +11654,30 @@ __metadata: dependencies: "@chainsafe/sprinter-sdk": "workspace:^" "@cmfcmf/docusaurus-search-local": "npm:latest" - "@docusaurus/core": "npm:^3.5.2" - "@docusaurus/module-type-aliases": "npm:^3.5.2" - "@docusaurus/preset-classic": "npm:^3.5.2" - "@docusaurus/remark-plugin-npm2yarn": "npm:^3.5.2" - "@docusaurus/tsconfig": "npm:^3.5.2" - "@docusaurus/types": "npm:^3.5.2" + "@docusaurus/core": "npm:^3.7.0" + "@docusaurus/module-type-aliases": "npm:^3.7.0" + "@docusaurus/plugin-content-docs": "npm:^3.7.0" + "@docusaurus/preset-classic": "npm:^3.7.0" + "@docusaurus/remark-plugin-npm2yarn": "npm:^3.7.0" + "@docusaurus/theme-common": "npm:^3.7.0" + "@docusaurus/tsconfig": "npm:^3.7.0" + "@docusaurus/types": "npm:^3.7.0" + "@docusaurus/utils": "npm:^3.7.0" + "@docusaurus/utils-validation": "npm:^3.7.0" "@mdx-js/react": "npm:^3.0.1" "@types/d3": "npm:^7" "@types/d3-sankey": "npm:^0" + "@types/react": "npm:^19.1.2" clsx: "npm:^2.1.1" d3: "npm:^7.9.0" d3-sankey: "npm:^0.12.3" docusaurus-plugin-openapi-docs: "npm:^4.3.7" - mobx: "npm:^6.13.7" + docusaurus-plugin-sass: "npm:^0.2.6" + docusaurus-theme-openapi-docs: "npm:^4.3.7" prism-react-renderer: "npm:^2.3.1" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" - redoc: "npm:^2.4.0" + sass: "npm:^1.87.0" styled-components: "npm:^6.1.17" typescript: "npm:~5.2.2" languageName: unknown @@ -9286,6 +11729,59 @@ __metadata: languageName: node linkType: hard +"docusaurus-plugin-sass@npm:^0.2.6": + version: 0.2.6 + resolution: "docusaurus-plugin-sass@npm:0.2.6" + dependencies: + sass-loader: "npm:^16.0.2" + peerDependencies: + "@docusaurus/core": ^2.0.0-beta || ^3.0.0-alpha + sass: ^1.30.0 + checksum: 10c0/b5448ec386486ee1a49e9ea2a9cc9bf73a084f3150ec71a0203833f73c9ab48d5bbe98b7b95a21d5eeec5bd94fda9e3b06cf6cffa1120f2731174b7f134c38b5 + languageName: node + linkType: hard + +"docusaurus-theme-openapi-docs@npm:^4.3.7": + version: 4.3.7 + resolution: "docusaurus-theme-openapi-docs@npm:4.3.7" + dependencies: + "@hookform/error-message": "npm:^2.0.1" + "@reduxjs/toolkit": "npm:^1.7.1" + allof-merge: "npm:^0.6.6" + buffer: "npm:^6.0.3" + clsx: "npm:^1.1.1" + copy-text-to-clipboard: "npm:^3.1.0" + crypto-js: "npm:^4.1.1" + file-saver: "npm:^2.0.5" + lodash: "npm:^4.17.20" + pako: "npm:^2.1.0" + postman-code-generators: "npm:^1.10.1" + postman-collection: "npm:^4.4.0" + prism-react-renderer: "npm:^2.3.0" + process: "npm:^0.11.10" + react-hook-form: "npm:^7.43.8" + react-live: "npm:^4.0.0" + react-magic-dropzone: "npm:^1.0.1" + react-markdown: "npm:^8.0.1" + react-modal: "npm:^3.15.1" + react-redux: "npm:^7.2.0" + rehype-raw: "npm:^6.1.1" + remark-gfm: "npm:3.0.1" + sass: "npm:^1.80.4" + sass-loader: "npm:^16.0.2" + unist-util-visit: "npm:^5.0.0" + url: "npm:^0.11.1" + xml-formatter: "npm:^2.6.1" + peerDependencies: + "@docusaurus/theme-common": ^3.5.0 + docusaurus-plugin-openapi-docs: ^4.0.0 + docusaurus-plugin-sass: ^0.2.3 + react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/3e3b8c035a49a29ec3c5a1478dd85d967eb972ea692ac48040111f41037267e3844a0a5cb66289f642abd2c9c61977483dbfd3736646a3305ab05b61c3fd4cbe + languageName: node + linkType: hard + "dom-converter@npm:^0.2.0": version: 0.2.0 resolution: "dom-converter@npm:0.2.0" @@ -9342,18 +11838,6 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^3.0.6": - version: 3.2.5 - resolution: "dompurify@npm:3.2.5" - dependencies: - "@types/trusted-types": "npm:^2.0.7" - dependenciesMeta: - "@types/trusted-types": - optional: true - checksum: 10c0/b564167cc588933ad2d25c185296716bdd7124e9d2a75dac76efea831bb22d1230ce5205a1ab6ce4c1010bb32ac35f7a5cb2dd16c78cbf382111f1228362aa59 - languageName: node - linkType: hard - "domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" @@ -9402,6 +11886,17 @@ __metadata: languageName: node linkType: hard +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + "duplexer@npm:^0.1.2": version: 0.1.2 resolution: "duplexer@npm:0.1.2" @@ -9430,6 +11925,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.73": + version: 1.5.141 + resolution: "electron-to-chromium@npm:1.5.141" + checksum: 10c0/3e17fecee4420cfa312f5c38333b9428dec4fae8ebcc54bf20754e781d7551adfa2cd3b96f597e8323f2ac015d6050e60cc311011084ecd61ec7aaeff1b67dcf + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -9491,6 +11993,16 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.17.1": + version: 5.18.1 + resolution: "enhanced-resolve@npm:5.18.1" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/4cffd9b125225184e2abed9fdf0ed3dbd2224c873b165d0838fd066cde32e0918626cba2f1f4bf6860762f13a7e2364fd89a82b99566be2873d813573ac71846 + languageName: node + linkType: hard + "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -9591,6 +12103,13 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + "es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" @@ -9653,6 +12172,15 @@ __metadata: languageName: node linkType: hard +"es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.3": version: 2.0.3 resolution: "es-set-tostringtag@npm:2.0.3" @@ -9855,6 +12383,13 @@ __metadata: languageName: node linkType: hard +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + "escape-goat@npm:^4.0.0": version: 4.0.0 resolution: "escape-goat@npm:4.0.0" @@ -10565,7 +13100,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0": +"execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -10599,6 +13134,13 @@ __metadata: languageName: node linkType: hard +"exenv@npm:^1.2.0": + version: 1.2.2 + resolution: "exenv@npm:1.2.2" + checksum: 10c0/4e96b355a6b9b9547237288ca779dd673b2e698458b409e88b50df09feb7c85ef94c07354b6b87bc3ed0193a94009a6f7a3c71956da12f45911c0d0f5aa3caa0 + languageName: node + linkType: hard + "exit-hook@npm:^2.2.1": version: 2.2.1 resolution: "exit-hook@npm:2.2.1" @@ -10723,26 +13265,6 @@ __metadata: languageName: node linkType: hard -"fast-url-parser@npm:1.1.3": - version: 1.1.3 - resolution: "fast-url-parser@npm:1.1.3" - dependencies: - punycode: "npm:^1.3.2" - checksum: 10c0/d85c5c409cf0215417380f98a2d29c23a95004d93ff0d8bdf1af5f1a9d1fc608ac89ac6ffe863783d2c73efb3850dd35390feb1de3296f49877bfee0392eb5d3 - languageName: node - linkType: hard - -"fast-xml-parser@npm:^4.5.0": - version: 4.5.3 - resolution: "fast-xml-parser@npm:4.5.3" - dependencies: - strnum: "npm:^1.1.1" - bin: - fxparser: src/cli/cli.js - checksum: 10c0/bf9ccadacfadc95f6e3f0e7882a380a7f219cf0a6f96575149f02cb62bf44c3b7f0daee75b8ff3847bcfd7fbcb201e402c71045936c265cf6d94b141ec4e9327 - languageName: node - linkType: hard - "fastq@npm:^1.6.0": version: 1.17.1 resolution: "fastq@npm:1.17.1" @@ -10779,6 +13301,15 @@ __metadata: languageName: node linkType: hard +"figures@npm:^3.2.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -10809,6 +13340,13 @@ __metadata: languageName: node linkType: hard +"file-saver@npm:^2.0.5": + version: 2.0.5 + resolution: "file-saver@npm:2.0.5" + checksum: 10c0/0a361f683786c34b2574aea53744cb70d0a6feb0fa5e3af00f2fcb6c9d40d3049cc1470e38c6c75df24219f247f6fb3076f86943958f580e62ee2ffe897af8b1 + languageName: node + linkType: hard + "file-type@npm:3.9.0": version: 3.9.0 resolution: "file-type@npm:3.9.0" @@ -11170,6 +13708,24 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a + languageName: node + linkType: hard + "get-own-enumerable-property-symbols@npm:^3.0.0": version: 3.0.2 resolution: "get-own-enumerable-property-symbols@npm:3.0.2" @@ -11177,6 +13733,16 @@ __metadata: languageName: node linkType: hard +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + "get-source@npm:^2.0.12": version: 2.0.12 resolution: "get-source@npm:2.0.12" @@ -11430,6 +13996,13 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + "got@npm:^12.1.0": version: 12.6.1 resolution: "got@npm:12.6.1" @@ -11551,6 +14124,13 @@ __metadata: languageName: node linkType: hard +"has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + "has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" @@ -11576,6 +14156,21 @@ __metadata: languageName: node linkType: hard +"hast-util-from-parse5@npm:^7.0.0": + version: 7.1.2 + resolution: "hast-util-from-parse5@npm:7.1.2" + dependencies: + "@types/hast": "npm:^2.0.0" + "@types/unist": "npm:^2.0.0" + hastscript: "npm:^7.0.0" + property-information: "npm:^6.0.0" + vfile: "npm:^5.0.0" + vfile-location: "npm:^4.0.0" + web-namespaces: "npm:^2.0.0" + checksum: 10c0/c1002816d0235ff0a1e888d71c191d3ecfbaba510aaef86eec00edcba8803a3e0ad901bb0e5430a9d2aee2d52c31aabacae8282394dc519c333017a46c68d1c8 + languageName: node + linkType: hard + "hast-util-from-parse5@npm:^8.0.0": version: 8.0.1 resolution: "hast-util-from-parse5@npm:8.0.1" @@ -11592,6 +14187,15 @@ __metadata: languageName: node linkType: hard +"hast-util-parse-selector@npm:^3.0.0": + version: 3.1.1 + resolution: "hast-util-parse-selector@npm:3.1.1" + dependencies: + "@types/hast": "npm:^2.0.0" + checksum: 10c0/34ac1707a477fd9764e328087163f1f21857bdb0f8d425bf41f6def7baf840e50e4bca2eb03072e3da4e39856de28893c4b688dcba0cc305160d53afcece4df4 + languageName: node + linkType: hard + "hast-util-parse-selector@npm:^4.0.0": version: 4.0.0 resolution: "hast-util-parse-selector@npm:4.0.0" @@ -11601,6 +14205,25 @@ __metadata: languageName: node linkType: hard +"hast-util-raw@npm:^7.2.0": + version: 7.2.3 + resolution: "hast-util-raw@npm:7.2.3" + dependencies: + "@types/hast": "npm:^2.0.0" + "@types/parse5": "npm:^6.0.0" + hast-util-from-parse5: "npm:^7.0.0" + hast-util-to-parse5: "npm:^7.0.0" + html-void-elements: "npm:^2.0.0" + parse5: "npm:^6.0.0" + unist-util-position: "npm:^4.0.0" + unist-util-visit: "npm:^4.0.0" + vfile: "npm:^5.0.0" + web-namespaces: "npm:^2.0.0" + zwitch: "npm:^2.0.0" + checksum: 10c0/c7bf994938cbc1acaaeb337f99773773b51ad77695b559c6352cba5c35b26610e6de2936b5086ef8bc53b436dd8032a3860e7357f28b6bb0365f751919745398 + languageName: node + linkType: hard + "hast-util-raw@npm:^9.0.0": version: 9.0.4 resolution: "hast-util-raw@npm:9.0.4" @@ -11669,6 +14292,20 @@ __metadata: languageName: node linkType: hard +"hast-util-to-parse5@npm:^7.0.0": + version: 7.1.0 + resolution: "hast-util-to-parse5@npm:7.1.0" + dependencies: + "@types/hast": "npm:^2.0.0" + comma-separated-tokens: "npm:^2.0.0" + property-information: "npm:^6.0.0" + space-separated-tokens: "npm:^2.0.0" + web-namespaces: "npm:^2.0.0" + zwitch: "npm:^2.0.0" + checksum: 10c0/2a96302b8f25fa2d5b657a94bb20a3d9a1a81e66c2f81582a242c5634dd850e3bd95313a7471eef8282b597f2129551fef5a1631f4ce14c41aab646281b339a0 + languageName: node + linkType: hard + "hast-util-to-parse5@npm:^8.0.0": version: 8.0.0 resolution: "hast-util-to-parse5@npm:8.0.0" @@ -11684,6 +14321,13 @@ __metadata: languageName: node linkType: hard +"hast-util-whitespace@npm:^2.0.0": + version: 2.0.1 + resolution: "hast-util-whitespace@npm:2.0.1" + checksum: 10c0/dcf6ebab091c802ffa7bb3112305c7631c15adb6c07a258f5528aefbddf82b4e162c8310ef426c48dc1dc623982cc33920e6dde5a50015d307f2778dcf6c2487 + languageName: node + linkType: hard + "hast-util-whitespace@npm:^3.0.0": version: 3.0.0 resolution: "hast-util-whitespace@npm:3.0.0" @@ -11693,6 +14337,19 @@ __metadata: languageName: node linkType: hard +"hastscript@npm:^7.0.0": + version: 7.2.0 + resolution: "hastscript@npm:7.2.0" + dependencies: + "@types/hast": "npm:^2.0.0" + comma-separated-tokens: "npm:^2.0.0" + hast-util-parse-selector: "npm:^3.0.0" + property-information: "npm:^6.0.0" + space-separated-tokens: "npm:^2.0.0" + checksum: 10c0/579912b03ff4a5b19eb609df7403c6dba2505ef1a1e2bc47cbf467cbd7cffcd51df40e74d882de1ccdda40aaf18487f82619eb9cb9f2077cba778017e95e868e + languageName: node + linkType: hard + "hastscript@npm:^8.0.0": version: 8.0.0 resolution: "hastscript@npm:8.0.0" @@ -11736,7 +14393,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.1.0": +"hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -11819,6 +14476,13 @@ __metadata: languageName: node linkType: hard +"html-void-elements@npm:^2.0.0": + version: 2.0.1 + resolution: "html-void-elements@npm:2.0.1" + checksum: 10c0/1079c9e9fdb3b6a2481f2a282098a0183f3d45bf2b9d76c7dfc1671ee1857d7bacdd04fd8c6e2418f5ff550c30cabf97a010fe31ec402d0c89189807b48e6d79 + languageName: node + linkType: hard + "html-void-elements@npm:^3.0.0": version: 3.0.0 resolution: "html-void-elements@npm:3.0.0" @@ -11826,9 +14490,9 @@ __metadata: languageName: node linkType: hard -"html-webpack-plugin@npm:^5.5.3": - version: 5.6.0 - resolution: "html-webpack-plugin@npm:5.6.0" +"html-webpack-plugin@npm:^5.6.0": + version: 5.6.3 + resolution: "html-webpack-plugin@npm:5.6.3" dependencies: "@types/html-minifier-terser": "npm:^6.0.0" html-minifier-terser: "npm:^6.0.2" @@ -11843,7 +14507,7 @@ __metadata: optional: true webpack: optional: true - checksum: 10c0/50d1a0f90d512463ea8d798985d91a7ccc9d5e461713dedb240125b2ff0671f58135dd9355f7969af341ff4725e73b2defbc0984cfdce930887a48506d970002 + checksum: 10c0/25a21f83a8823d3711396dd8050bc0080c0ae55537352d432903eff58a7d9838fc811e3c26462419036190720357e67c7977efd106fb9a252770632824f0cc25 languageName: node linkType: hard @@ -12051,6 +14715,13 @@ __metadata: languageName: node linkType: hard +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + "ignore@npm:^5.0.5, ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1": version: 5.3.1 resolution: "ignore@npm:5.3.1" @@ -12069,13 +14740,20 @@ __metadata: languageName: node linkType: hard -"immer@npm:^9.0.7": +"immer@npm:^9.0.21, immer@npm:^9.0.7": version: 9.0.21 resolution: "immer@npm:9.0.21" checksum: 10c0/03ea3ed5d4d72e8bd428df4a38ad7e483ea8308e9a113d3b42e0ea2cc0cc38340eb0a6aca69592abbbf047c685dbda04e3d34bf2ff438ab57339ed0a34cc0a05 languageName: node linkType: hard +"immutable@npm:^5.0.2": + version: 5.1.1 + resolution: "immutable@npm:5.1.1" + checksum: 10c0/5fd129ee9e448884003cc4f9e43bb91bab3b39dfeb3b49ddfb8bd563e0620eb47ae1f5b3ef96615d3ec38b52ab9a966dcacf9e39df00ed1a8ad062ddfba01cdf + languageName: node + linkType: hard + "import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" @@ -12138,10 +14816,10 @@ __metadata: languageName: node linkType: hard -"infima@npm:0.2.0-alpha.44": - version: 0.2.0-alpha.44 - resolution: "infima@npm:0.2.0-alpha.44" - checksum: 10c0/0fe2b7882e09187ee62e5192673c542513fe4743f727f887e195de4f26eb792ddf81577ca98c34a69ab7eb39251f60531b9ad6d2f454553bac326b1afc9d68b5 +"infima@npm:0.2.0-alpha.45": + version: 0.2.0-alpha.45 + resolution: "infima@npm:0.2.0-alpha.45" + checksum: 10c0/b50d103f6864687742067414d09392ccf3be363cf27503925a943ff56bb2392118e2bfdb6b2f89933417015e1770e58f81b2b0caf823f2adfb67f32b1702d469 languageName: node linkType: hard @@ -12343,6 +15021,13 @@ __metadata: languageName: node linkType: hard +"is-buffer@npm:^2.0.0": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 10c0/e603f6fced83cf94c53399cff3bda1a9f08e391b872b64a73793b0928be3e5f047f2bcece230edb7632eaea2acdbfcb56c23b33d8a20c820023b230f1485679a + languageName: node + linkType: hard + "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -12928,6 +15613,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + "jsesc@npm:~0.5.0": version: 0.5.0 resolution: "jsesc@npm:0.5.0" @@ -12937,6 +15631,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -13088,7 +15791,7 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^4.1.5": +"kleur@npm:^4.0.3, kleur@npm:^4.1.5": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a @@ -13390,13 +16093,6 @@ __metadata: languageName: node linkType: hard -"lunr@npm:^2.3.9": - version: 2.3.9 - resolution: "lunr@npm:2.3.9" - checksum: 10c0/77d7dbb4fbd602aac161e2b50887d8eda28c0fa3b799159cee380fbb311f1e614219126ecbbd2c3a9c685f1720a8109b3c1ca85cc893c39b6c9cc6a62a1d8a8b - languageName: node - linkType: hard - "magic-string@npm:0.30.7": version: 0.30.7 resolution: "magic-string@npm:0.30.7" @@ -13478,6 +16174,15 @@ __metadata: languageName: node linkType: hard +"markdown-table@npm:^2.0.0": + version: 2.0.0 + resolution: "markdown-table@npm:2.0.0" + dependencies: + repeat-string: "npm:^1.0.0" + checksum: 10c0/f257e0781ea50eb946919df84bdee4ba61f983971b277a369ca7276f89740fd0e2749b9b187163a42df4c48682b71962d4007215ce3523480028f06c11ddc2e6 + languageName: node + linkType: hard + "markdown-table@npm:^3.0.0": version: 3.0.3 resolution: "markdown-table@npm:3.0.3" @@ -13485,12 +16190,21 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.3.0": - version: 4.3.0 - resolution: "marked@npm:4.3.0" - bin: - marked: bin/marked.js - checksum: 10c0/0013463855e31b9c88d8bb2891a611d10ef1dc79f2e3cbff1bf71ba389e04c5971298c886af0be799d7fa9aa4593b086a136062d59f1210b0480b026a8c5dc47 +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"mdast-util-definitions@npm:^5.0.0": + version: 5.1.2 + resolution: "mdast-util-definitions@npm:5.1.2" + dependencies: + "@types/mdast": "npm:^3.0.0" + "@types/unist": "npm:^2.0.0" + unist-util-visit: "npm:^4.0.0" + checksum: 10c0/da9049c15562e44ee4ea4a36113d98c6c9eaa3d8a17d6da2aef6a0626376dcd01d9ec007d77a8dfcad6d0cbd5c32a4abbad72a3f48c3172a55934c7d9a916480 languageName: node linkType: hard @@ -13510,6 +16224,18 @@ __metadata: languageName: node linkType: hard +"mdast-util-find-and-replace@npm:^2.0.0": + version: 2.2.2 + resolution: "mdast-util-find-and-replace@npm:2.2.2" + dependencies: + "@types/mdast": "npm:^3.0.0" + escape-string-regexp: "npm:^5.0.0" + unist-util-is: "npm:^5.0.0" + unist-util-visit-parents: "npm:^5.0.0" + checksum: 10c0/ce935f4bd4aeab47f91531a7f09dfab89aaeea62ad31029b43185c5b626921357703d8e5093c13073c097fdabfc57cb2f884d7dfad83dbe7239e351375d6797c + languageName: node + linkType: hard + "mdast-util-find-and-replace@npm:^3.0.0, mdast-util-find-and-replace@npm:^3.0.1": version: 3.0.1 resolution: "mdast-util-find-and-replace@npm:3.0.1" @@ -13522,6 +16248,26 @@ __metadata: languageName: node linkType: hard +"mdast-util-from-markdown@npm:^1.0.0": + version: 1.3.1 + resolution: "mdast-util-from-markdown@npm:1.3.1" + dependencies: + "@types/mdast": "npm:^3.0.0" + "@types/unist": "npm:^2.0.0" + decode-named-character-reference: "npm:^1.0.0" + mdast-util-to-string: "npm:^3.1.0" + micromark: "npm:^3.0.0" + micromark-util-decode-numeric-character-reference: "npm:^1.0.0" + micromark-util-decode-string: "npm:^1.0.0" + micromark-util-normalize-identifier: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + unist-util-stringify-position: "npm:^3.0.0" + uvu: "npm:^0.5.0" + checksum: 10c0/f4e901bf2a2e93fe35a339e0cff581efacce2f7117cd5652e9a270847bd7e2508b3e717b7b4156af54d4f896d63033e06ff9fafbf59a1d46fe17dd5e2a3f7846 + languageName: node + linkType: hard + "mdast-util-from-markdown@npm:^2.0.0": version: 2.0.1 resolution: "mdast-util-from-markdown@npm:2.0.1" @@ -13556,6 +16302,18 @@ __metadata: languageName: node linkType: hard +"mdast-util-gfm-autolink-literal@npm:^1.0.0": + version: 1.0.3 + resolution: "mdast-util-gfm-autolink-literal@npm:1.0.3" + dependencies: + "@types/mdast": "npm:^3.0.0" + ccount: "npm:^2.0.0" + mdast-util-find-and-replace: "npm:^2.0.0" + micromark-util-character: "npm:^1.0.0" + checksum: 10c0/750e312eae73c3f2e8aa0e8c5232cb1b905357ff37ac236927f1af50cdbee7c2cfe2379b148ac32fa4137eeb3b24601e1bb6135084af926c7cd808867804193f + languageName: node + linkType: hard + "mdast-util-gfm-autolink-literal@npm:^2.0.0": version: 2.0.0 resolution: "mdast-util-gfm-autolink-literal@npm:2.0.0" @@ -13569,6 +16327,17 @@ __metadata: languageName: node linkType: hard +"mdast-util-gfm-footnote@npm:^1.0.0": + version: 1.0.2 + resolution: "mdast-util-gfm-footnote@npm:1.0.2" + dependencies: + "@types/mdast": "npm:^3.0.0" + mdast-util-to-markdown: "npm:^1.3.0" + micromark-util-normalize-identifier: "npm:^1.0.0" + checksum: 10c0/767973e46b9e2ae44e80e51a5e38ad0b032fc7f06a1a3095aa96c2886ba333941c764474a56b82e7db05efc56242a4789bc7fbbcc753d61512750e86a4192fe8 + languageName: node + linkType: hard + "mdast-util-gfm-footnote@npm:^2.0.0": version: 2.0.0 resolution: "mdast-util-gfm-footnote@npm:2.0.0" @@ -13582,6 +16351,16 @@ __metadata: languageName: node linkType: hard +"mdast-util-gfm-strikethrough@npm:^1.0.0": + version: 1.0.3 + resolution: "mdast-util-gfm-strikethrough@npm:1.0.3" + dependencies: + "@types/mdast": "npm:^3.0.0" + mdast-util-to-markdown: "npm:^1.3.0" + checksum: 10c0/29616b3dfdd33d3cd13f9b3181a8562fa2fbacfcb04a37dba3c690ba6829f0231b145444de984726d9277b2bc90dd7d96fb9df9f6292d5e77d65a8659ee2f52b + languageName: node + linkType: hard + "mdast-util-gfm-strikethrough@npm:^2.0.0": version: 2.0.0 resolution: "mdast-util-gfm-strikethrough@npm:2.0.0" @@ -13593,6 +16372,18 @@ __metadata: languageName: node linkType: hard +"mdast-util-gfm-table@npm:^1.0.0": + version: 1.0.7 + resolution: "mdast-util-gfm-table@npm:1.0.7" + dependencies: + "@types/mdast": "npm:^3.0.0" + markdown-table: "npm:^3.0.0" + mdast-util-from-markdown: "npm:^1.0.0" + mdast-util-to-markdown: "npm:^1.3.0" + checksum: 10c0/a37a05a936292c4f48394123332d3c034a6e1b15bb3e7f3b94e6bce3260c9184fd388abbc4100827edd5485a6563098306994d15a729bde3c96de7a62ed5720b + languageName: node + linkType: hard + "mdast-util-gfm-table@npm:^2.0.0": version: 2.0.0 resolution: "mdast-util-gfm-table@npm:2.0.0" @@ -13606,6 +16397,16 @@ __metadata: languageName: node linkType: hard +"mdast-util-gfm-task-list-item@npm:^1.0.0": + version: 1.0.2 + resolution: "mdast-util-gfm-task-list-item@npm:1.0.2" + dependencies: + "@types/mdast": "npm:^3.0.0" + mdast-util-to-markdown: "npm:^1.3.0" + checksum: 10c0/91fa91f7d1a8797bf129008dab12d23917015ad12df00044e275b4459e8b383fbec6234338953a0089ef9c3a114d0a360c3e652eb0ebf6ece7e7a8fd3b5977c6 + languageName: node + linkType: hard + "mdast-util-gfm-task-list-item@npm:^2.0.0": version: 2.0.0 resolution: "mdast-util-gfm-task-list-item@npm:2.0.0" @@ -13618,6 +16419,21 @@ __metadata: languageName: node linkType: hard +"mdast-util-gfm@npm:^2.0.0": + version: 2.0.2 + resolution: "mdast-util-gfm@npm:2.0.2" + dependencies: + mdast-util-from-markdown: "npm:^1.0.0" + mdast-util-gfm-autolink-literal: "npm:^1.0.0" + mdast-util-gfm-footnote: "npm:^1.0.0" + mdast-util-gfm-strikethrough: "npm:^1.0.0" + mdast-util-gfm-table: "npm:^1.0.0" + mdast-util-gfm-task-list-item: "npm:^1.0.0" + mdast-util-to-markdown: "npm:^1.0.0" + checksum: 10c0/5b7f7f98a90a2962d7e0787e080c4e55b70119100c7685bbdb772d8d7865524aeffd1757edba5afba434250e0246b987c0617c2c635baaf51c26dbbb3b72dbec + languageName: node + linkType: hard + "mdast-util-gfm@npm:^3.0.0": version: 3.0.0 resolution: "mdast-util-gfm@npm:3.0.0" @@ -13695,6 +16511,16 @@ __metadata: languageName: node linkType: hard +"mdast-util-phrasing@npm:^3.0.0": + version: 3.0.1 + resolution: "mdast-util-phrasing@npm:3.0.1" + dependencies: + "@types/mdast": "npm:^3.0.0" + unist-util-is: "npm:^5.0.0" + checksum: 10c0/5e00e303652a7581593549dbce20dfb69d687d79a972f7928f6ca1920ef5385bceb737a3d5292ab6d937ed8c67bb59771e80e88f530b78734fe7d155f833e32b + languageName: node + linkType: hard + "mdast-util-phrasing@npm:^4.0.0": version: 4.1.0 resolution: "mdast-util-phrasing@npm:4.1.0" @@ -13705,6 +16531,22 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-hast@npm:^12.1.0": + version: 12.3.0 + resolution: "mdast-util-to-hast@npm:12.3.0" + dependencies: + "@types/hast": "npm:^2.0.0" + "@types/mdast": "npm:^3.0.0" + mdast-util-definitions: "npm:^5.0.0" + micromark-util-sanitize-uri: "npm:^1.1.0" + trim-lines: "npm:^3.0.0" + unist-util-generated: "npm:^2.0.0" + unist-util-position: "npm:^4.0.0" + unist-util-visit: "npm:^4.0.0" + checksum: 10c0/0753e45bfcce423f7a13979ac720a23ed8d6bafed174c387f43bbe8baf3838f3a043cd8006975b71e5c4068b7948f83f1348acea79801101af31eaec4e7a499a + languageName: node + linkType: hard + "mdast-util-to-hast@npm:^13.0.0": version: 13.2.0 resolution: "mdast-util-to-hast@npm:13.2.0" @@ -13722,6 +16564,22 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": + version: 1.5.0 + resolution: "mdast-util-to-markdown@npm:1.5.0" + dependencies: + "@types/mdast": "npm:^3.0.0" + "@types/unist": "npm:^2.0.0" + longest-streak: "npm:^3.0.0" + mdast-util-phrasing: "npm:^3.0.0" + mdast-util-to-string: "npm:^3.0.0" + micromark-util-decode-string: "npm:^1.0.0" + unist-util-visit: "npm:^4.0.0" + zwitch: "npm:^2.0.0" + checksum: 10c0/9831d14aa6c097750a90c7b87b4e814b040731c30606a794c9b136dc746633dd9ec07154ca97d4fec4eaf732cf89d14643424e2581732d6ee18c9b0e51ff7664 + languageName: node + linkType: hard + "mdast-util-to-markdown@npm:^2.0.0": version: 2.1.0 resolution: "mdast-util-to-markdown@npm:2.1.0" @@ -13738,6 +16596,15 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": + version: 3.2.0 + resolution: "mdast-util-to-string@npm:3.2.0" + dependencies: + "@types/mdast": "npm:^3.0.0" + checksum: 10c0/112f4bf0f6758dcb95deffdcf37afba7eaecdfe2ee13252de031723094d4d55220e147326690a8b91244758e2d678e7aeb1fdd0fa6ef3317c979bc42effd9a21 + languageName: node + linkType: hard + "mdast-util-to-string@npm:^4.0.0": version: 4.0.0 resolution: "mdast-util-to-string@npm:4.0.0" @@ -13805,6 +16672,30 @@ __metadata: languageName: node linkType: hard +"micromark-core-commonmark@npm:^1.0.0, micromark-core-commonmark@npm:^1.0.1": + version: 1.1.0 + resolution: "micromark-core-commonmark@npm:1.1.0" + dependencies: + decode-named-character-reference: "npm:^1.0.0" + micromark-factory-destination: "npm:^1.0.0" + micromark-factory-label: "npm:^1.0.0" + micromark-factory-space: "npm:^1.0.0" + micromark-factory-title: "npm:^1.0.0" + micromark-factory-whitespace: "npm:^1.0.0" + micromark-util-character: "npm:^1.0.0" + micromark-util-chunked: "npm:^1.0.0" + micromark-util-classify-character: "npm:^1.0.0" + micromark-util-html-tag-name: "npm:^1.0.0" + micromark-util-normalize-identifier: "npm:^1.0.0" + micromark-util-resolve-all: "npm:^1.0.0" + micromark-util-subtokenize: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.1" + uvu: "npm:^0.5.0" + checksum: 10c0/b3bf7b7004ce7dbb3ae151dcca4db1d12546f1b943affb2418da4b90b9ce59357373c433ee2eea4c868aee0791dafa355aeed19f5ef2b0acaf271f32f1ecbe6a + languageName: node + linkType: hard + "micromark-core-commonmark@npm:^2.0.0": version: 2.0.1 resolution: "micromark-core-commonmark@npm:2.0.1" @@ -13856,6 +16747,18 @@ __metadata: languageName: node linkType: hard +"micromark-extension-gfm-autolink-literal@npm:^1.0.0": + version: 1.0.5 + resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.5" + dependencies: + micromark-util-character: "npm:^1.0.0" + micromark-util-sanitize-uri: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/4964a52605ac36d24501d427e2d173fa39b5e0402275cb45068eba4898f4cb9cc57f7007b21b7514f0ab5f7b371b1701a5156a10b6ac8e77a7f36e830cf481d4 + languageName: node + linkType: hard + "micromark-extension-gfm-autolink-literal@npm:^2.0.0": version: 2.1.0 resolution: "micromark-extension-gfm-autolink-literal@npm:2.1.0" @@ -13868,6 +16771,22 @@ __metadata: languageName: node linkType: hard +"micromark-extension-gfm-footnote@npm:^1.0.0": + version: 1.1.2 + resolution: "micromark-extension-gfm-footnote@npm:1.1.2" + dependencies: + micromark-core-commonmark: "npm:^1.0.0" + micromark-factory-space: "npm:^1.0.0" + micromark-util-character: "npm:^1.0.0" + micromark-util-normalize-identifier: "npm:^1.0.0" + micromark-util-sanitize-uri: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + uvu: "npm:^0.5.0" + checksum: 10c0/b8090876cc3da5436c6253b0b40e39ceaa470c2429f699c19ee4163cef3102c4cd16c4ac2ec8caf916037fad310cfb52a9ef182c75d50fca7419ba08faad9b39 + languageName: node + linkType: hard + "micromark-extension-gfm-footnote@npm:^2.0.0": version: 2.1.0 resolution: "micromark-extension-gfm-footnote@npm:2.1.0" @@ -13884,6 +16803,20 @@ __metadata: languageName: node linkType: hard +"micromark-extension-gfm-strikethrough@npm:^1.0.0": + version: 1.0.7 + resolution: "micromark-extension-gfm-strikethrough@npm:1.0.7" + dependencies: + micromark-util-chunked: "npm:^1.0.0" + micromark-util-classify-character: "npm:^1.0.0" + micromark-util-resolve-all: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + uvu: "npm:^0.5.0" + checksum: 10c0/b45fe93a7a412fc44bae7a183b92a988e17b49ed9d683bd80ee4dde96d462e1ca6b316dd64bda7759e4086d6d8686790a711e53c244f1f4d2b37e1cfe852884d + languageName: node + linkType: hard + "micromark-extension-gfm-strikethrough@npm:^2.0.0": version: 2.1.0 resolution: "micromark-extension-gfm-strikethrough@npm:2.1.0" @@ -13898,6 +16831,19 @@ __metadata: languageName: node linkType: hard +"micromark-extension-gfm-table@npm:^1.0.0": + version: 1.0.7 + resolution: "micromark-extension-gfm-table@npm:1.0.7" + dependencies: + micromark-factory-space: "npm:^1.0.0" + micromark-util-character: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + uvu: "npm:^0.5.0" + checksum: 10c0/38b5af80ecab8206845a057338235bee6f47fb6cb904208be4b76e87906765821683e25bef85dfa485809f931eaf8cd55f16cd2f4d6e33b84f56edfaf1dfb129 + languageName: node + linkType: hard + "micromark-extension-gfm-table@npm:^2.0.0": version: 2.1.0 resolution: "micromark-extension-gfm-table@npm:2.1.0" @@ -13911,6 +16857,15 @@ __metadata: languageName: node linkType: hard +"micromark-extension-gfm-tagfilter@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-extension-gfm-tagfilter@npm:1.0.2" + dependencies: + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/7e1bf278255cf2a8d2dda9de84bc238b39c53100e25ba8d7168220d5b00dc74869a6cb038fbf2e76b8ae89efc66906762311797a906d7d9cdd71e07bfe1ed505 + languageName: node + linkType: hard + "micromark-extension-gfm-tagfilter@npm:^2.0.0": version: 2.0.0 resolution: "micromark-extension-gfm-tagfilter@npm:2.0.0" @@ -13920,6 +16875,19 @@ __metadata: languageName: node linkType: hard +"micromark-extension-gfm-task-list-item@npm:^1.0.0": + version: 1.0.5 + resolution: "micromark-extension-gfm-task-list-item@npm:1.0.5" + dependencies: + micromark-factory-space: "npm:^1.0.0" + micromark-util-character: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + uvu: "npm:^0.5.0" + checksum: 10c0/2179742fa2cbb243cc06bd9e43fbb94cd98e4814c9d368ddf8b4b5afa0348023f335626ae955e89d679e2c2662a7f82c315117a3b060c87bdb4420fee5a219d1 + languageName: node + linkType: hard + "micromark-extension-gfm-task-list-item@npm:^2.0.0": version: 2.1.0 resolution: "micromark-extension-gfm-task-list-item@npm:2.1.0" @@ -13933,6 +16901,22 @@ __metadata: languageName: node linkType: hard +"micromark-extension-gfm@npm:^2.0.0": + version: 2.0.3 + resolution: "micromark-extension-gfm@npm:2.0.3" + dependencies: + micromark-extension-gfm-autolink-literal: "npm:^1.0.0" + micromark-extension-gfm-footnote: "npm:^1.0.0" + micromark-extension-gfm-strikethrough: "npm:^1.0.0" + micromark-extension-gfm-table: "npm:^1.0.0" + micromark-extension-gfm-tagfilter: "npm:^1.0.0" + micromark-extension-gfm-task-list-item: "npm:^1.0.0" + micromark-util-combine-extensions: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/53056376d14caf3fab2cc44881c1ad49d975776cc2267bca74abda2cb31f2a77ec0fb2bdb2dd97565f0d9943ad915ff192b89c1cee5d9d727569a5e38505799b + languageName: node + linkType: hard + "micromark-extension-gfm@npm:^3.0.0": version: 3.0.0 resolution: "micromark-extension-gfm@npm:3.0.0" @@ -14025,6 +17009,17 @@ __metadata: languageName: node linkType: hard +"micromark-factory-destination@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-destination@npm:1.1.0" + dependencies: + micromark-util-character: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/71ebd9089bf0c9689b98ef42215c04032ae2701ae08c3546b663628553255dca18e5310dbdacddad3acd8de4f12a789835fff30dadc4da3c4e30387a75e6b488 + languageName: node + linkType: hard + "micromark-factory-destination@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-destination@npm:2.0.0" @@ -14036,6 +17031,18 @@ __metadata: languageName: node linkType: hard +"micromark-factory-label@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-label@npm:1.1.0" + dependencies: + micromark-util-character: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + uvu: "npm:^0.5.0" + checksum: 10c0/5e2cd2d8214bb92a34dfcedf9c7aecf565e3648650a3a6a0495ededf15f2318dd214dc069e3026402792cd5839d395313f8ef9c2e86ca34a8facaa0f75a77753 + languageName: node + linkType: hard + "micromark-factory-label@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-label@npm:2.0.0" @@ -14084,6 +17091,18 @@ __metadata: languageName: node linkType: hard +"micromark-factory-title@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-title@npm:1.1.0" + dependencies: + micromark-factory-space: "npm:^1.0.0" + micromark-util-character: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/cf8c687d1d5c3928846a4791d4a7e2f1d7bdd2397051e20d60f06b7565a48bf85198ab6f85735e997ab3f0cbb80b8b6391f4f7ebc0aae2f2f8c3a08541257bf6 + languageName: node + linkType: hard + "micromark-factory-title@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-title@npm:2.0.0" @@ -14096,6 +17115,18 @@ __metadata: languageName: node linkType: hard +"micromark-factory-whitespace@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-whitespace@npm:1.1.0" + dependencies: + micromark-factory-space: "npm:^1.0.0" + micromark-util-character: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/7248cc4534f9befb38c6f398b6e38efd3199f1428fc214c9cb7ed5b6e9fa7a82c0d8cdfa9bcacde62887c9a7c8c46baf5c318b2ae8f701afbccc8ad702e92dce + languageName: node + linkType: hard + "micromark-factory-whitespace@npm:^2.0.0": version: 2.0.0 resolution: "micromark-factory-whitespace@npm:2.0.0" @@ -14128,6 +17159,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-chunked@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-chunked@npm:1.1.0" + dependencies: + micromark-util-symbol: "npm:^1.0.0" + checksum: 10c0/59534cf4aaf481ed58d65478d00eae0080df9b5816673f79b5ddb0cea263e5a9ee9cbb6cc565daf1eb3c8c4ff86fc4e25d38a0577539655cda823a4249efd358 + languageName: node + linkType: hard + "micromark-util-chunked@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-chunked@npm:2.0.0" @@ -14137,6 +17177,17 @@ __metadata: languageName: node linkType: hard +"micromark-util-classify-character@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-classify-character@npm:1.1.0" + dependencies: + micromark-util-character: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/3266453dc0fdaf584e24c9b3c91d1ed180f76b5856699c51fd2549305814fcab7ec52afb4d3e83d002a9115cd2d2b2ffdc9c0b38ed85120822bf515cc00636ec + languageName: node + linkType: hard + "micromark-util-classify-character@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-classify-character@npm:2.0.0" @@ -14148,6 +17199,16 @@ __metadata: languageName: node linkType: hard +"micromark-util-combine-extensions@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-combine-extensions@npm:1.1.0" + dependencies: + micromark-util-chunked: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/0bc572fab3fe77f533c29aa1b75cb847b9fc9455f67a98623ef9740b925c0b0426ad9f09bbb56f1e844ea9ebada7873d1f06d27f7c979a917692b273c4b69e31 + languageName: node + linkType: hard + "micromark-util-combine-extensions@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-combine-extensions@npm:2.0.0" @@ -14158,6 +17219,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-decode-numeric-character-reference@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-decode-numeric-character-reference@npm:1.1.0" + dependencies: + micromark-util-symbol: "npm:^1.0.0" + checksum: 10c0/64ef2575e3fc2426976c19e16973348f20b59ddd5543f1467ac2e251f29e0a91f12089703d29ae985b0b9a408ee0d72f06d04ed3920811aa2402aabca3bdf9e4 + languageName: node + linkType: hard + "micromark-util-decode-numeric-character-reference@npm:^2.0.0": version: 2.0.1 resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.1" @@ -14167,6 +17237,18 @@ __metadata: languageName: node linkType: hard +"micromark-util-decode-string@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-decode-string@npm:1.1.0" + dependencies: + decode-named-character-reference: "npm:^1.0.0" + micromark-util-character: "npm:^1.0.0" + micromark-util-decode-numeric-character-reference: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + checksum: 10c0/757a0aaa5ad6c50c7480bd75371d407ac75f5022cd4404aba07adadf1448189502aea9bb7b2d09d25e18745e0abf72b95506b6beb184bcccabe919e48e3a5df7 + languageName: node + linkType: hard + "micromark-util-decode-string@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-decode-string@npm:2.0.0" @@ -14179,6 +17261,13 @@ __metadata: languageName: node linkType: hard +"micromark-util-encode@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-encode@npm:1.1.0" + checksum: 10c0/9878c9bc96999d45626a7597fffac85348ea842dce75d2417345cbf070a9941c62477bd0963bef37d4f0fd29f2982be6ddf416d62806f00ccb334af9d6ee87e7 + languageName: node + linkType: hard + "micromark-util-encode@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-encode@npm:2.0.0" @@ -14202,6 +17291,13 @@ __metadata: languageName: node linkType: hard +"micromark-util-html-tag-name@npm:^1.0.0": + version: 1.2.0 + resolution: "micromark-util-html-tag-name@npm:1.2.0" + checksum: 10c0/15421869678d36b4fe51df453921e8186bff514a14e9f79f32b7e1cdd67874e22a66ad34a7f048dd132cbbbfc7c382ae2f777a2bfd1f245a47705dc1c6d4f199 + languageName: node + linkType: hard + "micromark-util-html-tag-name@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-html-tag-name@npm:2.0.0" @@ -14209,6 +17305,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-normalize-identifier@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-normalize-identifier@npm:1.1.0" + dependencies: + micromark-util-symbol: "npm:^1.0.0" + checksum: 10c0/a9657321a2392584e4d978061882117a84db7d2c2c1c052c0f5d25da089d463edb9f956d5beaf7f5768984b6f72d046d59b5972951ec7bf25397687a62b8278a + languageName: node + linkType: hard + "micromark-util-normalize-identifier@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-normalize-identifier@npm:2.0.0" @@ -14218,6 +17323,15 @@ __metadata: languageName: node linkType: hard +"micromark-util-resolve-all@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-resolve-all@npm:1.1.0" + dependencies: + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/b5c95484c06e87bbbb60d8430eb030a458733a5270409f4c67892d1274737087ca6a7ca888987430e57cf1dcd44bb16390d3b3936a2bf07f7534ec8f52ce43c9 + languageName: node + linkType: hard + "micromark-util-resolve-all@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-resolve-all@npm:2.0.0" @@ -14227,6 +17341,17 @@ __metadata: languageName: node linkType: hard +"micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": + version: 1.2.0 + resolution: "micromark-util-sanitize-uri@npm:1.2.0" + dependencies: + micromark-util-character: "npm:^1.0.0" + micromark-util-encode: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + checksum: 10c0/dbdb98248e9f0408c7a00f1c1cd805775b41d213defd659533835f34b38da38e8f990bf7b3f782e96bffbc549aec9c3ecdab197d4ad5adbfe08f814a70327b6e + languageName: node + linkType: hard + "micromark-util-sanitize-uri@npm:^2.0.0": version: 2.0.0 resolution: "micromark-util-sanitize-uri@npm:2.0.0" @@ -14238,6 +17363,18 @@ __metadata: languageName: node linkType: hard +"micromark-util-subtokenize@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-subtokenize@npm:1.1.0" + dependencies: + micromark-util-chunked: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + uvu: "npm:^0.5.0" + checksum: 10c0/f292b1b162845db50d36255c9d4c4c6d47931fbca3ac98a80c7e536d2163233fd662f8ca0479ee2b80f145c66a1394c7ed17dfce801439741211015e77e3901e + languageName: node + linkType: hard + "micromark-util-subtokenize@npm:^2.0.0": version: 2.0.1 resolution: "micromark-util-subtokenize@npm:2.0.1" @@ -14264,7 +17401,7 @@ __metadata: languageName: node linkType: hard -"micromark-util-types@npm:^1.0.0": +"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": version: 1.1.0 resolution: "micromark-util-types@npm:1.1.0" checksum: 10c0/a9749cb0a12a252ff536baabcb7012421b6fad4d91a5fdd80d7b33dc7b4c22e2d0c4637dfe5b902d00247fe6c9b01f4a24fce6b572b16ccaa4da90e6ce2a11e4 @@ -14278,6 +17415,31 @@ __metadata: languageName: node linkType: hard +"micromark@npm:^3.0.0": + version: 3.2.0 + resolution: "micromark@npm:3.2.0" + dependencies: + "@types/debug": "npm:^4.0.0" + debug: "npm:^4.0.0" + decode-named-character-reference: "npm:^1.0.0" + micromark-core-commonmark: "npm:^1.0.1" + micromark-factory-space: "npm:^1.0.0" + micromark-util-character: "npm:^1.0.0" + micromark-util-chunked: "npm:^1.0.0" + micromark-util-combine-extensions: "npm:^1.0.0" + micromark-util-decode-numeric-character-reference: "npm:^1.0.0" + micromark-util-encode: "npm:^1.0.0" + micromark-util-normalize-identifier: "npm:^1.0.0" + micromark-util-resolve-all: "npm:^1.0.0" + micromark-util-sanitize-uri: "npm:^1.0.0" + micromark-util-subtokenize: "npm:^1.0.0" + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.1" + uvu: "npm:^0.5.0" + checksum: 10c0/f243e805d1b3cc699fddae2de0b1492bc82462f1a709d7ae5c82039f88b1e009c959100184717e748be057b5f88603289d5681679a4e6fbabcd037beb34bc744 + languageName: node + linkType: hard + "micromark@npm:^4.0.0": version: 4.0.0 resolution: "micromark@npm:4.0.0" @@ -14414,15 +17576,15 @@ __metadata: languageName: node linkType: hard -"mini-css-extract-plugin@npm:^2.7.6": - version: 2.9.0 - resolution: "mini-css-extract-plugin@npm:2.9.0" +"mini-css-extract-plugin@npm:^2.9.1": + version: 2.9.2 + resolution: "mini-css-extract-plugin@npm:2.9.2" dependencies: schema-utils: "npm:^4.0.0" tapable: "npm:^2.2.1" peerDependencies: webpack: ^5.0.0 - checksum: 10c0/46e20747ea250420db8a82801b9779299ce3cd5ec4d6dd75e00904c39cc80f0f01decaa534b8cb9658d7d3b656b919cb2cc84b1ba7e2394d2d6548578a5c2901 + checksum: 10c0/5d3218dbd7db48b572925ddac05162a7415bf81b321f1a0c07016ec643cb5720c8a836ae68d45f5de826097a3013b601706c9c5aacb7f610dc2041b271de2ce0 languageName: node linkType: hard @@ -14669,47 +17831,6 @@ __metadata: languageName: node linkType: hard -"mobx-react-lite@npm:^4.1.0": - version: 4.1.0 - resolution: "mobx-react-lite@npm:4.1.0" - dependencies: - use-sync-external-store: "npm:^1.4.0" - peerDependencies: - mobx: ^6.9.0 - react: ^16.8.0 || ^17 || ^18 || ^19 - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 10c0/72300665cc64d73a58d650bdf5131878376a865ae708cabc2940ee22cf6b762aeed239a83ea104ea3742a0b1563a81a19acc02f162e19f524a9b5b0f0a86668e - languageName: node - linkType: hard - -"mobx-react@npm:^9.1.1": - version: 9.2.0 - resolution: "mobx-react@npm:9.2.0" - dependencies: - mobx-react-lite: "npm:^4.1.0" - peerDependencies: - mobx: ^6.9.0 - react: ^16.8.0 || ^17 || ^18 || ^19 - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 10c0/253410a3a4d5005d6f8ec5ed8e6c9696381e65ffe03b072ee6baa7bb5973eaaa0b51f10c83849a94a1b03011538c76b80af26c6230808bd99fb3dfd130ac1845 - languageName: node - linkType: hard - -"mobx@npm:^6.13.7": - version: 6.13.7 - resolution: "mobx@npm:6.13.7" - checksum: 10c0/3ae7f8c586a48a0a2b9b4900871455bc93d3878bdff70b6820ba830c6b883d7f8a0222aa2a0fec7201d25f38a19cb340e62a18a3939182a676dc35d857f35dd6 - languageName: node - linkType: hard - "module-details-from-path@npm:^1.0.3": version: 1.0.3 resolution: "module-details-from-path@npm:1.0.3" @@ -14838,6 +17959,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^7.0.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/fb32a206276d608037fa1bcd7e9921e177fe992fc610d098aa3128baca3c0050fc1e014fa007e9b3874cf865ddb4f5bd9f43ccb7cbbbe4efaff6a83e920b17e9 + languageName: node + linkType: hard + "node-emoji@npm:^2.1.0": version: 2.1.3 resolution: "node-emoji@npm:2.1.3" @@ -14923,6 +18053,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa + languageName: node + linkType: hard + "nopt@npm:^7.0.0": version: 7.2.1 resolution: "nopt@npm:7.2.1" @@ -14973,10 +18110,10 @@ __metadata: languageName: node linkType: hard -"npm-to-yarn@npm:^2.2.1": - version: 2.2.1 - resolution: "npm-to-yarn@npm:2.2.1" - checksum: 10c0/65c696a3e595facad802b6b13c04e504806ea88fd4f87ab758f8042c19f65b4c4822815a47095df944b0809a95e574c27323c33cca5533f8454515eaa6e14fac +"npm-to-yarn@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-to-yarn@npm:3.0.1" + checksum: 10c0/f0a72bfc0ed2ad50c5995511ff6442520d259aee5a58e1b0914572a33d29c07090a684a1d8ce95d2399dfe9bc51e649e8d029b0118ecf941f40212053693caca languageName: node linkType: hard @@ -14996,6 +18133,18 @@ __metadata: languageName: node linkType: hard +"null-loader@npm:^4.0.1": + version: 4.0.1 + resolution: "null-loader@npm:4.0.1" + dependencies: + loader-utils: "npm:^2.0.0" + schema-utils: "npm:^3.0.0" + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 10c0/fe9a74a928c9ddc1eab7be0e4322516439562d6efd6feeb0f7c61777d4b79a6a8e5a6bc8133deb59408f3f423bdf84c154a88168154a583154e9e33d544b4d42 + languageName: node + linkType: hard + "oas-kit-common@npm:^1.0.8": version: 1.0.8 resolution: "oas-kit-common@npm:1.0.8" @@ -15091,6 +18240,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + "object-is@npm:^1.1.5": version: 1.1.6 resolution: "object-is@npm:1.1.6" @@ -15226,17 +18382,6 @@ __metadata: languageName: node linkType: hard -"openapi-sampler@npm:^1.5.0": - version: 1.6.1 - resolution: "openapi-sampler@npm:1.6.1" - dependencies: - "@types/json-schema": "npm:^7.0.7" - fast-xml-parser: "npm:^4.5.0" - json-pointer: "npm:0.6.2" - checksum: 10c0/b5c95d03e3a035e06da514b3db3e9645e36029dd37551e44fdbdf162c764db52a4d4fe077ea1e02e96a95580b968924000fd9275ab03a1092c734f7862951c87 - languageName: node - linkType: hard - "openapi-to-postmanv2@npm:^4.21.0": version: 4.25.0 resolution: "openapi-to-postmanv2@npm:4.25.0" @@ -15414,6 +18559,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:^2.1.0": + version: 2.1.0 + resolution: "pako@npm:2.1.0" + checksum: 10c0/8e8646581410654b50eb22a5dfd71159cae98145bd5086c9a7a816ec0370b5f72b4648d08674624b3870a521e6a3daffd6c2f7bc00fdefc7063c9d8232ff5116 + languageName: node + linkType: hard + "param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" @@ -15478,6 +18630,13 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^6.0.0": + version: 6.0.1 + resolution: "parse5@npm:6.0.1" + checksum: 10c0/595821edc094ecbcfb9ddcb46a3e1fe3a718540f8320eff08b8cf6742a5114cce2d46d45f95c26191c11b184dcaf4e2960abcd9c5ed9eb9393ac9a37efcfdecb + languageName: node + linkType: hard + "parse5@npm:^7.0.0, parse5@npm:^7.1.2": version: 7.1.2 resolution: "parse5@npm:7.1.2" @@ -15594,10 +18753,10 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:2.2.1": - version: 2.2.1 - resolution: "path-to-regexp@npm:2.2.1" - checksum: 10c0/f4b51090a73dad5ce0720f13ce8528ac77914bc927d72cc4ba05ab32770ad3a8d2e431962734b688b9ed863d4098d858da6ff4746037e4e24259cbd3b2c32b79 +"path-to-regexp@npm:3.3.0": + version: 3.3.0 + resolution: "path-to-regexp@npm:3.3.0" + checksum: 10c0/ffa0ebe7088d38d435a8d08b0fe6e8c93ceb2a81a65d4dd1d9a538f52e09d5e3474ed5f553cb3b180d894b0caa10698a68737ab599fd1e56b4663d1a64c9f77b languageName: node linkType: hard @@ -15624,6 +18783,16 @@ __metadata: languageName: node linkType: hard +"path@npm:0.12.7": + version: 0.12.7 + resolution: "path@npm:0.12.7" + dependencies: + process: "npm:^0.11.1" + util: "npm:^0.10.3" + checksum: 10c0/f795ce5438a988a590c7b6dfd450ec9baa1c391a8be4c2dea48baa6e0f5b199e56cd83b8c9ebf3991b81bea58236d2c32bdafe2c17a2e70c3a2e4c69891ade59 + languageName: node + linkType: hard + "pathe@npm:^1.1.1, pathe@npm:^1.1.2": version: 1.1.2 resolution: "pathe@npm:1.1.2" @@ -15638,13 +18807,6 @@ __metadata: languageName: node linkType: hard -"perfect-scrollbar@npm:^1.5.5": - version: 1.5.6 - resolution: "perfect-scrollbar@npm:1.5.6" - checksum: 10c0/57d3070a33a204953f5093221aa126975ae69b8cf8857a123ccf17344f4cb5c676b00868528517f33120393d66df3140df911b9ef25f3f67835b70c6f0d77139 - languageName: node - linkType: hard - "periscopic@npm:^3.0.0, periscopic@npm:^3.1.0": version: 3.1.0 resolution: "periscopic@npm:3.1.0" @@ -15783,15 +18945,6 @@ __metadata: languageName: node linkType: hard -"polished@npm:^4.2.2": - version: 4.3.1 - resolution: "polished@npm:4.3.1" - dependencies: - "@babel/runtime": "npm:^7.17.8" - checksum: 10c0/45480d4c7281a134281cef092f6ecc202a868475ff66a390fee6e9261386e16f3047b4de46a2f2e1cf7fb7aa8f52d30b4ed631a1e3bcd6f303ca31161d4f07fe - languageName: node - linkType: hard - "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" @@ -15799,6 +18952,17 @@ __metadata: languageName: node linkType: hard +"postcss-attribute-case-insensitive@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-attribute-case-insensitive@npm:7.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/48945abe2024e2d2e4c37d30b8c1aaf37af720f24f6a996f7ea7e7ed33621f5c22cf247ed22028c0c922de040c58c0802729bc39b903cb1693f4b63c0b49da34 + languageName: node + linkType: hard + "postcss-calc@npm:^9.0.1": version: 9.0.1 resolution: "postcss-calc@npm:9.0.1" @@ -15811,6 +18975,56 @@ __metadata: languageName: node linkType: hard +"postcss-clamp@npm:^4.1.0": + version: 4.1.0 + resolution: "postcss-clamp@npm:4.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.6 + checksum: 10c0/701261026b38a4c27b3c3711635fac96005f36d3270adb76dbdb1eebc950fc841db45283ee66068a7121565592e9d7967d5534e15b6e4dd266afcabf9eafa905 + languageName: node + linkType: hard + +"postcss-color-functional-notation@npm:^7.0.9": + version: 7.0.9 + resolution: "postcss-color-functional-notation@npm:7.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/62ffe51ec200df8e01daca3f45b2e05e7e509b57bfe50c880490878aff9bc63ed36cc92db42f0274a21f21330acd8fb1dff6529f7e3a202d100ea74914cf4cfd + languageName: node + linkType: hard + +"postcss-color-hex-alpha@npm:^10.0.0": + version: 10.0.0 + resolution: "postcss-color-hex-alpha@npm:10.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8a6dcb27403d04b55d6de88bf3074622bcea537fc4436bbcb346e92289c4d17059444e2e6c3554c325e7a777bb4cdc711e764a83123b4000aec211052e957d5b + languageName: node + linkType: hard + +"postcss-color-rebeccapurple@npm:^10.0.0": + version: 10.0.0 + resolution: "postcss-color-rebeccapurple@npm:10.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/308e33f76f2b48c1c2121d4502fc053e869f3415898de7d30314353df680e79b37497e7b628e3447edc1049091da3672f7d891e45604f238598e846e06b893ed + languageName: node + linkType: hard + "postcss-colormin@npm:^6.1.0": version: 6.1.0 resolution: "postcss-colormin@npm:6.1.0" @@ -15832,8 +19046,62 @@ __metadata: browserslist: "npm:^4.23.0" postcss-value-parser: "npm:^4.2.0" peerDependencies: - postcss: ^8.4.31 - checksum: 10c0/a80066965cb58fe8fcaf79f306b32c83fc678e1f0678e43f4db3e9fee06eed6db92cf30631ad348a17492769d44757400493c91a33ee865ee8dedea9234a11f5 + postcss: ^8.4.31 + checksum: 10c0/a80066965cb58fe8fcaf79f306b32c83fc678e1f0678e43f4db3e9fee06eed6db92cf30631ad348a17492769d44757400493c91a33ee865ee8dedea9234a11f5 + languageName: node + linkType: hard + +"postcss-custom-media@npm:^11.0.5": + version: 11.0.5 + resolution: "postcss-custom-media@npm:11.0.5" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5ba1ca0383818e83d5f6f398a2b0c12cfda066b5d552adfc0e030a2c5f8690c2cc6224f9a1832a9c780dae3fd8d00d78c4a5c88eb36b731da1752f0c3917d488 + languageName: node + linkType: hard + +"postcss-custom-properties@npm:^14.0.4": + version: 14.0.4 + resolution: "postcss-custom-properties@npm:14.0.4" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5b101ee71289657cc2e5a16f4912009c10441052e2c54bd9e4f3d4d72b652bab56adb662ddaa96881413e375cf9852e2159b3c778d953442ce86efb781c3b2bf + languageName: node + linkType: hard + +"postcss-custom-selectors@npm:^8.0.4": + version: 8.0.4 + resolution: "postcss-custom-selectors@npm:8.0.4" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/09d494d2580d0a99f57684f79793d03358286c32460b61a84063c33bdde24865771cb1205efe9a8e26a508be24eba4fb93fc7f1e96ba21ca96a5d17fadb24863 + languageName: node + linkType: hard + +"postcss-dir-pseudo-class@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-dir-pseudo-class@npm:9.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/da9d3387648c5c3161a653d354c8f3e70a299108df3977e8aa65cf10793e4dd58a2711b3426cd63716245b13584ca8d95adcd6e10e3c9adbc61d08743e2d8690 languageName: node linkType: hard @@ -15884,6 +19152,71 @@ __metadata: languageName: node linkType: hard +"postcss-double-position-gradients@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-double-position-gradients@npm:6.0.1" + dependencies: + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4c6cf3f54b2154cd622cdcaea58a7634c2e19bc0c366c73c46a27a3e31aa280c8721ee2b21cdd5cdca3166052cf5881c16bab2836b8896e71578213957021d52 + languageName: node + linkType: hard + +"postcss-focus-visible@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-focus-visible@npm:10.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/c5ecc8536a708a49a99d0abd68a88a160664e6c832c808db8edd9f0221e7017a258daa87e49daf2cb098cb037005d46cf492403c8c9c92ad8835d30adaccf665 + languageName: node + linkType: hard + +"postcss-focus-within@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-focus-within@npm:9.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/d6ab49d2a7f33485a9e137dc77ec92c5619a3ec92e1e672734fc604853ff1f3c0c189085c12461614be4fcb03ea0347d91791a45986a18d50b5228d161eda57a + languageName: node + linkType: hard + +"postcss-font-variant@npm:^5.0.0": + version: 5.0.0 + resolution: "postcss-font-variant@npm:5.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/ccc96460cf6a52b5439c26c9a5ea0589882e46161e3c2331d4353de7574448f5feef667d1a68f7f39b9fe3ee75d85957383ae82bbfcf87c3162c7345df4a444e + languageName: node + linkType: hard + +"postcss-gap-properties@npm:^6.0.0": + version: 6.0.0 + resolution: "postcss-gap-properties@npm:6.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4e07e0d3927d0e65d67eaf047ac39e08d39cb1bf74e16e10c7df7f0d01b184a77ea59f63fd5691b5ed6df159970b972db28cb784d883e26e981137696460897d + languageName: node + linkType: hard + +"postcss-image-set-function@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-image-set-function@npm:7.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/913fd9492f00122aa0c2550fb0d72130428cbe1e6465bc65e8fe71e9deb10ac0c01d7caceb68b560da759139e8cbc6c90ed22dfe6cf34949af49bb86bcbf4d3a + languageName: node + linkType: hard + "postcss-import@npm:^15.1.0": version: 15.1.0 resolution: "postcss-import@npm:15.1.0" @@ -15908,6 +19241,21 @@ __metadata: languageName: node linkType: hard +"postcss-lab-function@npm:^7.0.9": + version: 7.0.9 + resolution: "postcss-lab-function@npm:7.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4180669e7555d474b660d106de5fa1d4a705d693451254123bf56ab6dc1a82e4e175c387868703c14e4637d795d461b5e7f10e74d7b42df55a31f6b52bfa048e + languageName: node + linkType: hard + "postcss-load-config@npm:^3.1.4": version: 3.1.4 resolution: "postcss-load-config@npm:3.1.4" @@ -15958,6 +19306,17 @@ __metadata: languageName: node linkType: hard +"postcss-logical@npm:^8.1.0": + version: 8.1.0 + resolution: "postcss-logical@npm:8.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/0e2e9e901d8a550db7f682d46b1f7e4f363c1ada061dc8e4548e2b563c5e39f3684a2d7c3f11fe061188782bca37874e34967fc6179fa6d98a49ff66a0076d27 + languageName: node + linkType: hard + "postcss-merge-idents@npm:^6.0.3": version: 6.0.3 resolution: "postcss-merge-idents@npm:6.0.3" @@ -16099,6 +19458,19 @@ __metadata: languageName: node linkType: hard +"postcss-nesting@npm:^13.0.1": + version: 13.0.1 + resolution: "postcss-nesting@npm:13.0.1" + dependencies: + "@csstools/selector-resolve-nested": "npm:^3.0.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/549307c272cdd4cb5105d8fbcd582f15a1cb74e5bba240b05b27f77fe0422730be966699a49a9ad15fd9d1bc551c1edbaefb21a69686a9b131b585dbc9d90ebf + languageName: node + linkType: hard + "postcss-normalize-charset@npm:^6.0.2": version: 6.0.2 resolution: "postcss-normalize-charset@npm:6.0.2" @@ -16197,6 +19569,15 @@ __metadata: languageName: node linkType: hard +"postcss-opacity-percentage@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-opacity-percentage@npm:3.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/15c7d66036fa966d265c8737196646b3f93deb83d4eea0b17ed5033460599afc31d3a989345e4d7c472963b2a2bb75c83d06979d5d30d6a60fcc7f74cb6d8d40 + languageName: node + linkType: hard + "postcss-ordered-values@npm:^6.0.2": version: 6.0.2 resolution: "postcss-ordered-values@npm:6.0.2" @@ -16209,6 +19590,121 @@ __metadata: languageName: node linkType: hard +"postcss-overflow-shorthand@npm:^6.0.0": + version: 6.0.0 + resolution: "postcss-overflow-shorthand@npm:6.0.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/6598321b2ed0b68461135395bba9c7f76a4672617770df1e8487f459bc975f4ded6c3d37b6f72a44f4f77f7b6789e0c6f927e66dbbf1bcde1537167dbea39968 + languageName: node + linkType: hard + +"postcss-page-break@npm:^3.0.4": + version: 3.0.4 + resolution: "postcss-page-break@npm:3.0.4" + peerDependencies: + postcss: ^8 + checksum: 10c0/eaaf4d8922b35f2acd637eb059f7e2510b24d65eb8f31424799dd5a98447b6ef010b41880c26e78f818e00f842295638ec75f89d5d489067f53e3dd3db74a00f + languageName: node + linkType: hard + +"postcss-place@npm:^10.0.0": + version: 10.0.0 + resolution: "postcss-place@npm:10.0.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/ebb13deaac7648ba6042622375a31f78fbcc5209b7d196e478debbdf94525963fe621c932f4737a5b6b3d487af3b5ed6d059ed6193fdcbff6d3d5b150886ccc1 + languageName: node + linkType: hard + +"postcss-preset-env@npm:^10.1.0": + version: 10.1.6 + resolution: "postcss-preset-env@npm:10.1.6" + dependencies: + "@csstools/postcss-cascade-layers": "npm:^5.0.1" + "@csstools/postcss-color-function": "npm:^4.0.9" + "@csstools/postcss-color-mix-function": "npm:^3.0.9" + "@csstools/postcss-content-alt-text": "npm:^2.0.5" + "@csstools/postcss-exponential-functions": "npm:^2.0.8" + "@csstools/postcss-font-format-keywords": "npm:^4.0.0" + "@csstools/postcss-gamut-mapping": "npm:^2.0.9" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.9" + "@csstools/postcss-hwb-function": "npm:^4.0.9" + "@csstools/postcss-ic-unit": "npm:^4.0.1" + "@csstools/postcss-initial": "npm:^2.0.1" + "@csstools/postcss-is-pseudo-class": "npm:^5.0.1" + "@csstools/postcss-light-dark-function": "npm:^2.0.8" + "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" + "@csstools/postcss-logical-overflow": "npm:^2.0.0" + "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" + "@csstools/postcss-logical-resize": "npm:^3.0.0" + "@csstools/postcss-logical-viewport-units": "npm:^3.0.3" + "@csstools/postcss-media-minmax": "npm:^2.0.8" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.4" + "@csstools/postcss-nested-calc": "npm:^4.0.0" + "@csstools/postcss-normalize-display-values": "npm:^4.0.0" + "@csstools/postcss-oklab-function": "npm:^4.0.9" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/postcss-random-function": "npm:^2.0.0" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.9" + "@csstools/postcss-scope-pseudo-class": "npm:^4.0.1" + "@csstools/postcss-sign-functions": "npm:^1.1.3" + "@csstools/postcss-stepped-value-functions": "npm:^4.0.8" + "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.2" + "@csstools/postcss-trigonometric-functions": "npm:^4.0.8" + "@csstools/postcss-unset-value": "npm:^4.0.0" + autoprefixer: "npm:^10.4.21" + browserslist: "npm:^4.24.4" + css-blank-pseudo: "npm:^7.0.1" + css-has-pseudo: "npm:^7.0.2" + css-prefers-color-scheme: "npm:^10.0.0" + cssdb: "npm:^8.2.5" + postcss-attribute-case-insensitive: "npm:^7.0.1" + postcss-clamp: "npm:^4.1.0" + postcss-color-functional-notation: "npm:^7.0.9" + postcss-color-hex-alpha: "npm:^10.0.0" + postcss-color-rebeccapurple: "npm:^10.0.0" + postcss-custom-media: "npm:^11.0.5" + postcss-custom-properties: "npm:^14.0.4" + postcss-custom-selectors: "npm:^8.0.4" + postcss-dir-pseudo-class: "npm:^9.0.1" + postcss-double-position-gradients: "npm:^6.0.1" + postcss-focus-visible: "npm:^10.0.1" + postcss-focus-within: "npm:^9.0.1" + postcss-font-variant: "npm:^5.0.0" + postcss-gap-properties: "npm:^6.0.0" + postcss-image-set-function: "npm:^7.0.0" + postcss-lab-function: "npm:^7.0.9" + postcss-logical: "npm:^8.1.0" + postcss-nesting: "npm:^13.0.1" + postcss-opacity-percentage: "npm:^3.0.0" + postcss-overflow-shorthand: "npm:^6.0.0" + postcss-page-break: "npm:^3.0.4" + postcss-place: "npm:^10.0.0" + postcss-pseudo-class-any-link: "npm:^10.0.1" + postcss-replace-overflow-wrap: "npm:^4.0.0" + postcss-selector-not: "npm:^8.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/89af9060f3528e254005e6b81e88c57589e6e7f74125b10d50ca8a05f830c9ac206f8197af1b3c4b7ba82d97993118dd121f1a11cfc9fd026e18d01ca6f7ad2d + languageName: node + linkType: hard + +"postcss-pseudo-class-any-link@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-pseudo-class-any-link@npm:10.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/95e883996e87baf14fc09d25f9a763a2e9d599eb3b9c6b736e83a8c3d0b55841bcb886bccdf51b5b7fefc128cbd0187ad8841f59878f85bd1613642e592d7673 + languageName: node + linkType: hard + "postcss-reduce-idents@npm:^6.0.3": version: 6.0.3 resolution: "postcss-reduce-idents@npm:6.0.3" @@ -16243,6 +19739,15 @@ __metadata: languageName: node linkType: hard +"postcss-replace-overflow-wrap@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-replace-overflow-wrap@npm:4.0.0" + peerDependencies: + postcss: ^8.0.3 + checksum: 10c0/451361b714528cd3632951256ef073769cde725a46cda642a6864f666fb144921fa55e614aec1bcf5946f37d6ffdcca3b932b76f3d997c07b076e8db152b128d + languageName: node + linkType: hard + "postcss-safe-parser@npm:^6.0.0": version: 6.0.0 resolution: "postcss-safe-parser@npm:6.0.0" @@ -16261,6 +19766,17 @@ __metadata: languageName: node linkType: hard +"postcss-selector-not@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-selector-not@npm:8.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/491ea3dcc421cd90135be786078521605e2062fb93624ea8813cfd5ba0d35143f931e2e608d5f20effd5ea7d3f4786d2afea2afa42d117779a0288e135f132b6 + languageName: node + linkType: hard + "postcss-selector-parser@npm:6.0.10": version: 6.0.10 resolution: "postcss-selector-parser@npm:6.0.10" @@ -16281,6 +19797,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^7.0.0": + version: 7.1.0 + resolution: "postcss-selector-parser@npm:7.1.0" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/0fef257cfd1c0fe93c18a3f8a6e739b4438b527054fd77e9a62730a89b2d0ded1b59314a7e4aaa55bc256204f40830fecd2eb50f20f8cb7ab3a10b52aa06c8aa + languageName: node + linkType: hard + "postcss-sort-media-queries@npm:^5.2.0": version: 5.2.0 resolution: "postcss-sort-media-queries@npm:5.2.0" @@ -16442,6 +19968,20 @@ __metadata: languageName: node linkType: hard +"postman-code-generators@npm:^1.10.1": + version: 1.14.2 + resolution: "postman-code-generators@npm:1.14.2" + dependencies: + async: "npm:3.2.2" + detect-package-manager: "npm:3.0.2" + lodash: "npm:4.17.21" + path: "npm:0.12.7" + postman-collection: "npm:^4.4.0" + shelljs: "npm:0.8.5" + checksum: 10c0/d9d102444d65e4379a9f3c56de9c9b86514824db1a6e3f05baa7f0e23236d9d54b4b4903532d56069cf5b374c9afb18c0d9d8c0ae11bce0e3f8269e949e19a77 + languageName: node + linkType: hard + "postman-collection@npm:^4.4.0": version: 4.5.0 resolution: "postman-collection@npm:4.5.0" @@ -16568,6 +20108,18 @@ __metadata: languageName: node linkType: hard +"prism-react-renderer@npm:^2.4.0": + version: 2.4.1 + resolution: "prism-react-renderer@npm:2.4.1" + dependencies: + "@types/prismjs": "npm:^1.26.0" + clsx: "npm:^2.0.0" + peerDependencies: + react: ">=16.0.0" + checksum: 10c0/ebbe8feb975224344bbdd046b3a937d121592dbe4b8f22ba0be31f5af37b9a8219f441138ef6cab1c5b96f2aa6b529015200959f7e5e85b60ca69c81d35edcd4 + languageName: node + linkType: hard + "prismjs@npm:^1.29.0": version: 1.29.0 resolution: "prismjs@npm:1.29.0" @@ -16589,6 +20141,13 @@ __metadata: languageName: node linkType: hard +"process@npm:^0.11.1, process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + "progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" @@ -16616,7 +20175,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.5.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.0.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -16658,7 +20217,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^1.3.2": +"punycode@npm:^1.4.1": version: 1.4.1 resolution: "punycode@npm:1.4.1" checksum: 10c0/354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 @@ -16714,6 +20273,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.12.3": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -16844,29 +20412,16 @@ __metadata: languageName: node linkType: hard -"react-fast-compare@npm:^3.2.0, react-fast-compare@npm:^3.2.2": +"react-fast-compare@npm:^3.2.0": version: 3.2.2 resolution: "react-fast-compare@npm:3.2.2" checksum: 10c0/0bbd2f3eb41ab2ff7380daaa55105db698d965c396df73e6874831dbafec8c4b5b08ba36ff09df01526caa3c61595247e3269558c284e37646241cba2b90a367 languageName: node linkType: hard -"react-helmet-async@npm:*": - version: 2.0.5 - resolution: "react-helmet-async@npm:2.0.5" - dependencies: - invariant: "npm:^2.2.4" - react-fast-compare: "npm:^3.2.2" - shallowequal: "npm:^1.1.0" - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/f390ea8bf13c2681850e5f8eb5b73d8613f407c245a5fd23e9db9b2cc14a3700dd1ce992d3966632886d1d613083294c2aeee009193f49dfa7d145d9f13ea2b0 - languageName: node - linkType: hard - -"react-helmet-async@npm:^1.3.0": +"react-helmet-async@npm:@slorber/react-helmet-async@*, react-helmet-async@npm:@slorber/react-helmet-async@1.3.0": version: 1.3.0 - resolution: "react-helmet-async@npm:1.3.0" + resolution: "@slorber/react-helmet-async@npm:1.3.0" dependencies: "@babel/runtime": "npm:^7.12.5" invariant: "npm:^2.2.4" @@ -16874,9 +20429,18 @@ __metadata: react-fast-compare: "npm:^3.2.0" shallowequal: "npm:^1.1.0" peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/8f3e6d26beff61d2ed18f7b41561df3e4d83a7582914c7196aa65158c7f3cce939276547d7a0b8987952d9d44131406df74efba02d1f8fa8a3940b49e6ced70b + react: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/7a13470a0d27d6305657c7fa6b066443c94acdb22bd0decca772298bc852ce04fdc65f1207f0d546995bf7d4ca09e21c81f96b4954544937c01eda82e2caa142 + languageName: node + linkType: hard + +"react-hook-form@npm:^7.43.8": + version: 7.56.1 + resolution: "react-hook-form@npm:7.56.1" + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + checksum: 10c0/26eafd54bf47167628e34c2f22ea27ea7bdd5b4231a56af5be31ccedfb2a721708b308026ea4a17f2fb15c7b5fff83c0feb4acc7aa07bd6faa8506e917810cab languageName: node linkType: hard @@ -16887,6 +20451,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^17.0.2": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 10c0/2bdb6b93fbb1820b024b496042cce405c57e2f85e777c9aabd55f9b26d145408f9f74f5934676ffdc46f3dcff656d78413a6e43968e7b3f92eea35b3052e9053 + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.3.1 resolution: "react-is@npm:18.3.1" @@ -16903,6 +20474,27 @@ __metadata: languageName: node linkType: hard +"react-lifecycles-compat@npm:^3.0.0": + version: 3.0.4 + resolution: "react-lifecycles-compat@npm:3.0.4" + checksum: 10c0/1d0df3c85af79df720524780f00c064d53a9dd1899d785eddb7264b378026979acbddb58a4b7e06e7d0d12aa1494fd5754562ee55d32907b15601068dae82c27 + languageName: node + linkType: hard + +"react-live@npm:^4.0.0": + version: 4.1.8 + resolution: "react-live@npm:4.1.8" + dependencies: + prism-react-renderer: "npm:^2.4.0" + sucrase: "npm:^3.35.0" + use-editable: "npm:^2.3.3" + peerDependencies: + react: ">=18.0.0" + react-dom: ">=18.0.0" + checksum: 10c0/fa96ca176bc9074e4892d6a079b94488ba74e95907ea187678afb17e4a23cc7760c3774ef17f4429d2ba562f1fda852a822e18a161ef386676371c56a7585970 + languageName: node + linkType: hard + "react-loadable-ssr-addon-v5-slorber@npm:^1.0.1": version: 1.0.1 resolution: "react-loadable-ssr-addon-v5-slorber@npm:1.0.1" @@ -16926,6 +20518,75 @@ __metadata: languageName: node linkType: hard +"react-magic-dropzone@npm:^1.0.1": + version: 1.0.1 + resolution: "react-magic-dropzone@npm:1.0.1" + checksum: 10c0/3a3cf643dc53dea2d286f072f987863b448e73baba3c873078b374e432fa97e2b5d58cc23853ec069444e697f17e1f5a59a49f7947ed900ddb201ef39d1ee7ed + languageName: node + linkType: hard + +"react-markdown@npm:^8.0.1": + version: 8.0.7 + resolution: "react-markdown@npm:8.0.7" + dependencies: + "@types/hast": "npm:^2.0.0" + "@types/prop-types": "npm:^15.0.0" + "@types/unist": "npm:^2.0.0" + comma-separated-tokens: "npm:^2.0.0" + hast-util-whitespace: "npm:^2.0.0" + prop-types: "npm:^15.0.0" + property-information: "npm:^6.0.0" + react-is: "npm:^18.0.0" + remark-parse: "npm:^10.0.0" + remark-rehype: "npm:^10.0.0" + space-separated-tokens: "npm:^2.0.0" + style-to-object: "npm:^0.4.0" + unified: "npm:^10.0.0" + unist-util-visit: "npm:^4.0.0" + vfile: "npm:^5.0.0" + peerDependencies: + "@types/react": ">=16" + react: ">=16" + checksum: 10c0/016617fbd2f4c03c5ae017fe39e89202f2ff536b4921dc1a5f7283d4b9d5157f20797adda75a8c59a06787ad0bc8841e2e437915aec645ce528e0a04a6d450ac + languageName: node + linkType: hard + +"react-modal@npm:^3.15.1": + version: 3.16.3 + resolution: "react-modal@npm:3.16.3" + dependencies: + exenv: "npm:^1.2.0" + prop-types: "npm:^15.7.2" + react-lifecycles-compat: "npm:^3.0.0" + warning: "npm:^4.0.3" + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19 + react-dom: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19 + checksum: 10c0/b541c91aef680c51ee9edf4ec14b3be29787e34d4df174150361b1d42b2416b28336e2280abdc71df082b1380d0786fe2122cdca31e19a74b54b49d17855a0f2 + languageName: node + linkType: hard + +"react-redux@npm:^7.2.0": + version: 7.2.9 + resolution: "react-redux@npm:7.2.9" + dependencies: + "@babel/runtime": "npm:^7.15.4" + "@types/react-redux": "npm:^7.1.20" + hoist-non-react-statics: "npm:^3.3.2" + loose-envify: "npm:^1.4.0" + prop-types: "npm:^15.7.2" + react-is: "npm:^17.0.2" + peerDependencies: + react: ^16.8.3 || ^17 || ^18 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 10c0/904fac7f493942585ed7ebbd693b4f6b5c09c292366b4550e887ba1a2e83a92c55f0ddc35161d4ba87e3fadb6c681a59003f58df6335e5d2ddd72b06a557851d + languageName: node + linkType: hard + "react-refresh@npm:^0.14.2": version: 0.14.2 resolution: "react-refresh@npm:0.14.2" @@ -16981,18 +20642,6 @@ __metadata: languageName: node linkType: hard -"react-tabs@npm:^6.0.2": - version: 6.1.0 - resolution: "react-tabs@npm:6.1.0" - dependencies: - clsx: "npm:^2.0.0" - prop-types: "npm:^15.5.0" - peerDependencies: - react: ^18.0.0 || ^19.0.0 - checksum: 10c0/3e01f478e1563d3ae8aaffc3c5e34a09319395a7880c95194f8415e0addc92c0ce1345a1e7f1d4b821b8eb7cbf3a141bb4dcc5ee805b3ec4b185aa203278c6e1 - languageName: node - linkType: hard - "react@npm:^18.3.1": version: 18.3.1 resolution: "react@npm:18.3.1" @@ -17037,6 +20686,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -17084,38 +20740,21 @@ __metadata: languageName: node linkType: hard -"redoc@npm:^2.4.0": - version: 2.4.0 - resolution: "redoc@npm:2.4.0" - dependencies: - "@redocly/openapi-core": "npm:^1.4.0" - classnames: "npm:^2.3.2" - decko: "npm:^1.2.0" - dompurify: "npm:^3.0.6" - eventemitter3: "npm:^5.0.1" - json-pointer: "npm:^0.6.2" - lunr: "npm:^2.3.9" - mark.js: "npm:^8.11.1" - marked: "npm:^4.3.0" - mobx-react: "npm:^9.1.1" - openapi-sampler: "npm:^1.5.0" - path-browserify: "npm:^1.0.1" - perfect-scrollbar: "npm:^1.5.5" - polished: "npm:^4.2.2" - prismjs: "npm:^1.29.0" - prop-types: "npm:^15.8.1" - react-tabs: "npm:^6.0.2" - slugify: "npm:~1.4.7" - stickyfill: "npm:^1.1.1" - swagger2openapi: "npm:^7.0.8" - url-template: "npm:^2.0.8" +"redux-thunk@npm:^2.4.2": + version: 2.4.2 + resolution: "redux-thunk@npm:2.4.2" peerDependencies: - core-js: ^3.1.4 - mobx: ^6.0.4 - react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 - styled-components: ^4.1.1 || ^5.1.1 || ^6.0.5 - checksum: 10c0/94a8c02e4f4962a808a58775036d99c1d09553f8ed31b2780efe43f639a5a7d9affe7a0a77513eed78143a1247cf2b2c79055c06b956d14767e203177f7fb5ae + redux: ^4 + checksum: 10c0/e202d6ef7dfa7df08ed24cb221aa89d6c84dbaa7d65fe90dbd8e826d0c10d801f48388f9a7598a4fd970ecbc93d335014570a61ca7bc8bf569eab5de77b31a3c + languageName: node + linkType: hard + +"redux@npm:^4.0.0, redux@npm:^4.2.1": + version: 4.2.1 + resolution: "redux@npm:4.2.1" + dependencies: + "@babel/runtime": "npm:^7.9.2" + checksum: 10c0/136d98b3d5dbed1cd6279c8c18a6a74c416db98b8a432a46836bdd668475de6279a2d4fd9d1363f63904e00f0678a8a3e7fa532c897163340baf1e71bb42c742 languageName: node linkType: hard @@ -17150,6 +20789,15 @@ __metadata: languageName: node linkType: hard +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 + languageName: node + linkType: hard + "regenerate@npm:^1.4.2": version: 1.4.2 resolution: "regenerate@npm:1.4.2" @@ -17206,6 +20854,20 @@ __metadata: languageName: node linkType: hard +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" + dependencies: + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.2.0" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.12.0" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.1.0" + checksum: 10c0/bbcb83a854bf96ce4005ee4e4618b71c889cda72674ce6092432f0039b47890c2d0dfeb9057d08d440999d9ea03879ebbb7f26ca005ccf94390e55c348859b98 + languageName: node + linkType: hard + "registry-auth-token@npm:^5.0.1": version: 5.0.2 resolution: "registry-auth-token@npm:5.0.2" @@ -17224,6 +20886,24 @@ __metadata: languageName: node linkType: hard +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd + languageName: node + linkType: hard + +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" + dependencies: + jsesc: "npm:~3.0.2" + bin: + regjsparser: bin/parser + checksum: 10c0/99d3e4e10c8c7732eb7aa843b8da2fd8b647fe144d3711b480e4647dc3bff4b1e96691ccf17f3ace24aa866a50b064236177cb25e6e4fbbb18285d99edaed83b + languageName: node + linkType: hard + "regjsparser@npm:^0.9.1": version: 0.9.1 resolution: "regjsparser@npm:0.9.1" @@ -17235,6 +20915,17 @@ __metadata: languageName: node linkType: hard +"rehype-raw@npm:^6.1.1": + version: 6.1.1 + resolution: "rehype-raw@npm:6.1.1" + dependencies: + "@types/hast": "npm:^2.0.0" + hast-util-raw: "npm:^7.2.0" + unified: "npm:^10.0.0" + checksum: 10c0/c68b460d313cad877e731d83770913417e4759b3d7a824ffc0e60a7a62cdd7e24c461ead9b081760005382dd4510330e3bb961370e58dfeed09732675037a1a9 + languageName: node + linkType: hard + "rehype-raw@npm:^7.0.0": version: 7.0.0 resolution: "rehype-raw@npm:7.0.0" @@ -17290,6 +20981,18 @@ __metadata: languageName: node linkType: hard +"remark-gfm@npm:3.0.1": + version: 3.0.1 + resolution: "remark-gfm@npm:3.0.1" + dependencies: + "@types/mdast": "npm:^3.0.0" + mdast-util-gfm: "npm:^2.0.0" + micromark-extension-gfm: "npm:^2.0.0" + unified: "npm:^10.0.0" + checksum: 10c0/53c4e82204f82f81949a170efdeb49d3c45137b7bca06a7ff857a483aac1a44b55ef0de8fb1bbe4f1292f2a378058e2e42e644f2c61f3e0cdc3e56afa4ec2a2c + languageName: node + linkType: hard + "remark-gfm@npm:^4.0.0": version: 4.0.0 resolution: "remark-gfm@npm:4.0.0" @@ -17308,9 +21011,20 @@ __metadata: version: 3.0.1 resolution: "remark-mdx@npm:3.0.1" dependencies: - mdast-util-mdx: "npm:^3.0.0" - micromark-extension-mdxjs: "npm:^3.0.0" - checksum: 10c0/9e16cd5ff3b30620bd25351a2dd1701627fa5555785b35ee5fe07bd1e6793a9c825cc1f6af9e54a44351f74879f8b5ea2bce8e5a21379aeab58935e76a4d69ce + mdast-util-mdx: "npm:^3.0.0" + micromark-extension-mdxjs: "npm:^3.0.0" + checksum: 10c0/9e16cd5ff3b30620bd25351a2dd1701627fa5555785b35ee5fe07bd1e6793a9c825cc1f6af9e54a44351f74879f8b5ea2bce8e5a21379aeab58935e76a4d69ce + languageName: node + linkType: hard + +"remark-parse@npm:^10.0.0": + version: 10.0.2 + resolution: "remark-parse@npm:10.0.2" + dependencies: + "@types/mdast": "npm:^3.0.0" + mdast-util-from-markdown: "npm:^1.0.0" + unified: "npm:^10.0.0" + checksum: 10c0/30cb8f2790380b1c7370a1c66cda41f33a7dc196b9e440a00e2675037bca55aea868165a8204e0cdbacc27ef4a3bdb7d45879826bd6efa07d9fdf328cb67a332 languageName: node linkType: hard @@ -17326,6 +21040,18 @@ __metadata: languageName: node linkType: hard +"remark-rehype@npm:^10.0.0": + version: 10.1.0 + resolution: "remark-rehype@npm:10.1.0" + dependencies: + "@types/hast": "npm:^2.0.0" + "@types/mdast": "npm:^3.0.0" + mdast-util-to-hast: "npm:^12.1.0" + unified: "npm:^10.0.0" + checksum: 10c0/803e658c9b51a9b53ee2ada42ff82e8e570444bb97c873e0d602c2d8dcb69a774fd22bd6f26643dfd5ab4c181059ea6c9fb9a99a2d7f9665f3f11bef1a1489bd + languageName: node + linkType: hard + "remark-rehype@npm:^11.0.0": version: 11.1.0 resolution: "remark-rehype@npm:11.1.0" @@ -17363,6 +21089,13 @@ __metadata: languageName: node linkType: hard +"repeat-string@npm:^1.0.0": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 10c0/87fa21bfdb2fbdedc44b9a5b118b7c1239bdd2c2c1e42742ef9119b7d412a5137a1d23f1a83dc6bb686f4f27429ac6f542e3d923090b44181bafa41e8ac0174d + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -17402,6 +21135,13 @@ __metadata: languageName: node linkType: hard +"reselect@npm:^4.1.8": + version: 4.1.8 + resolution: "reselect@npm:4.1.8" + checksum: 10c0/06a305a504affcbb67dd0561ddc8306b35796199c7e15b38934c80606938a021eadcf68cfd58e7bb5e17786601c37602a3362a4665c7bf0a96c1041ceee9d0b7 + languageName: node + linkType: hard + "resolve-alpn@npm:^1.2.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" @@ -17717,13 +21457,6 @@ __metadata: languageName: unknown linkType: soft -"rtl-detect@npm:^1.0.4": - version: 1.1.2 - resolution: "rtl-detect@npm:1.1.2" - checksum: 10c0/1b92888aafca1593314f837e83fdf02eb208faae3e713ab87c176804728efd3b1980d53b64f65f1fa593348087e852c5cd729b7b9372950f6e9b7be489afc0ca - languageName: node - linkType: hard - "rtlcss@npm:^4.1.0": version: 4.2.0 resolution: "rtlcss@npm:4.2.0" @@ -17754,7 +21487,7 @@ __metadata: languageName: node linkType: hard -"sade@npm:^1.7.4, sade@npm:^1.8.1": +"sade@npm:^1.7.3, sade@npm:^1.7.4, sade@npm:^1.8.1": version: 1.8.1 resolution: "sade@npm:1.8.1" dependencies: @@ -17819,6 +21552,49 @@ __metadata: languageName: node linkType: hard +"sass-loader@npm:^16.0.2": + version: 16.0.5 + resolution: "sass-loader@npm:16.0.5" + dependencies: + neo-async: "npm:^2.6.2" + peerDependencies: + "@rspack/core": 0.x || 1.x + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: "*" + webpack: ^5.0.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + webpack: + optional: true + checksum: 10c0/216422b7b9e6e3f22739dc96887d883d2415f188d5c47631fd28c80608b5fae71167b26d0c74a1e917614e4d494fa73b1190ad5ca2f587c1afee84dc1d30f003 + languageName: node + linkType: hard + +"sass@npm:^1.80.4, sass@npm:^1.87.0": + version: 1.87.0 + resolution: "sass@npm:1.87.0" + dependencies: + "@parcel/watcher": "npm:^2.4.1" + chokidar: "npm:^4.0.0" + immutable: "npm:^5.0.2" + source-map-js: "npm:>=0.6.2 <2.0.0" + dependenciesMeta: + "@parcel/watcher": + optional: true + bin: + sass: sass.js + checksum: 10c0/bd245faf14e4783dc547765350cf05817edaac0d6d6f6e4da8ab751f3eb3cc3873afd563c0ce416a24aa6c9c4e9023b05096447fc006660a01f76adffb54fbc6 + languageName: node + linkType: hard + "sax@npm:^1.2.4": version: 1.4.1 resolution: "sax@npm:1.4.1" @@ -17869,6 +21645,18 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^4.3.0": + version: 4.3.2 + resolution: "schema-utils@npm:4.3.2" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/981632f9bf59f35b15a9bcdac671dd183f4946fe4b055ae71a301e66a9797b95e5dd450de581eb6cca56fb6583ce8f24d67b2d9f8e1b2936612209697f6c277e + languageName: node + linkType: hard + "section-matter@npm:^1.0.0": version: 1.0.0 resolution: "section-matter@npm:1.0.0" @@ -17955,7 +21743,7 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1": +"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1, serialize-javascript@npm:^6.0.2": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" dependencies: @@ -17964,19 +21752,18 @@ __metadata: languageName: node linkType: hard -"serve-handler@npm:^6.1.5": - version: 6.1.5 - resolution: "serve-handler@npm:6.1.5" +"serve-handler@npm:^6.1.6": + version: 6.1.6 + resolution: "serve-handler@npm:6.1.6" dependencies: bytes: "npm:3.0.0" content-disposition: "npm:0.5.2" - fast-url-parser: "npm:1.1.3" mime-types: "npm:2.1.18" minimatch: "npm:3.1.2" path-is-inside: "npm:1.0.2" - path-to-regexp: "npm:2.2.1" + path-to-regexp: "npm:3.3.0" range-parser: "npm:1.2.0" - checksum: 10c0/6fd393ae37a0305107e634ca545322b00605322189fe70d8f1a4a90a101c4e354768c610efe5a7ef1af3820cec5c33d97467c88151f35a3cb41d8ff2075ef802 + checksum: 10c0/1e1cb6bbc51ee32bc1505f2e0605bdc2e96605c522277c977b67f83be9d66bd1eec8604388714a4d728e036d86b629bc9aec02120ea030d3d2c3899d44696503 languageName: node linkType: hard @@ -18100,7 +21887,7 @@ __metadata: languageName: node linkType: hard -"shelljs@npm:^0.8.5": +"shelljs@npm:0.8.5, shelljs@npm:^0.8.5": version: 0.8.5 resolution: "shelljs@npm:0.8.5" dependencies: @@ -18176,6 +21963,41 @@ __metadata: languageName: node linkType: hard +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": version: 1.0.6 resolution: "side-channel@npm:1.0.6" @@ -18188,6 +22010,19 @@ __metadata: languageName: node linkType: hard +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + "siginfo@npm:^2.0.0": version: 2.0.0 resolution: "siginfo@npm:2.0.0" @@ -18271,13 +22106,6 @@ __metadata: languageName: node linkType: hard -"slugify@npm:~1.4.7": - version: 1.4.7 - resolution: "slugify@npm:1.4.7" - checksum: 10c0/27d31bac7bd28a7a702ab7b18996d2a41086d81a97cdc5487f131d7cedb009a745bcd10c8b263e48deb9f055e6c5a6b0bdb37f1156d5dd29b66f8ba981945302 - languageName: node - linkType: hard - "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -18362,6 +22190,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + "source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.0": version: 1.2.0 resolution: "source-map-js@npm:1.2.0" @@ -18369,13 +22204,6 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf - languageName: node - linkType: hard - "source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -18502,17 +22330,17 @@ __metadata: languageName: node linkType: hard -"std-env@npm:^3.0.1, std-env@npm:^3.5.0": +"std-env@npm:^3.5.0": version: 3.7.0 resolution: "std-env@npm:3.7.0" checksum: 10c0/60edf2d130a4feb7002974af3d5a5f3343558d1ccf8d9b9934d225c638606884db4a20d2fe6440a09605bca282af6b042ae8070a10490c0800d69e82e478f41e languageName: node linkType: hard -"stickyfill@npm:^1.1.1": - version: 1.1.1 - resolution: "stickyfill@npm:1.1.1" - checksum: 10c0/8f11804fd3bba852cf3277dc4d6366a2bd592d3f7f3d9ab30b7adab4190a20e1296960b5107257081645b0d28afcbbab9f80e347cc425f2cd72b0a4f6917b4ab +"std-env@npm:^3.7.0": + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 languageName: node linkType: hard @@ -18752,13 +22580,6 @@ __metadata: languageName: node linkType: hard -"strnum@npm:^1.1.1": - version: 1.1.2 - resolution: "strnum@npm:1.1.2" - checksum: 10c0/a0fce2498fa3c64ce64a40dada41beb91cabe3caefa910e467dc0518ef2ebd7e4d10f8c2202a6104f1410254cae245066c0e94e2521fb4061a5cb41831952392 - languageName: node - linkType: hard - "style-to-object@npm:^0.4.0": version: 0.4.4 resolution: "style-to-object@npm:0.4.4" @@ -18816,7 +22637,7 @@ __metadata: languageName: node linkType: hard -"sucrase@npm:^3.32.0": +"sucrase@npm:^3.32.0, sucrase@npm:^3.35.0": version: 3.35.0 resolution: "sucrase@npm:3.35.0" dependencies: @@ -19128,6 +22949,28 @@ __metadata: languageName: node linkType: hard +"terser-webpack-plugin@npm:^5.3.11": + version: 5.3.14 + resolution: "terser-webpack-plugin@npm:5.3.14" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^4.3.0" + serialize-javascript: "npm:^6.0.2" + terser: "npm:^5.31.1" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/9b060947241af43bd6fd728456f60e646186aef492163672a35ad49be6fbc7f63b54a7356c3f6ff40a8f83f00a977edc26f044b8e106cc611c053c8c0eaf8569 + languageName: node + linkType: hard + "terser@npm:^5.10.0, terser@npm:^5.15.1, terser@npm:^5.26.0": version: 5.31.5 resolution: "terser@npm:5.31.5" @@ -19142,6 +22985,20 @@ __metadata: languageName: node linkType: hard +"terser@npm:^5.31.1": + version: 5.39.0 + resolution: "terser@npm:5.39.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.8.2" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/83326545ea1aecd6261030568b6191ccfa4cb6aa61d9ea41746a52479f50017a78b77e4725fbbc207c5df841ffa66a773c5ac33636e95c7ab94fe7e0379ae5c7 + languageName: node + linkType: hard + "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -19335,6 +23192,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + "type-fest@npm:^1.0.1": version: 1.4.0 resolution: "type-fest@npm:1.4.0" @@ -19608,6 +23472,21 @@ __metadata: languageName: node linkType: hard +"unified@npm:^10.0.0": + version: 10.1.2 + resolution: "unified@npm:10.1.2" + dependencies: + "@types/unist": "npm:^2.0.0" + bail: "npm:^2.0.0" + extend: "npm:^3.0.0" + is-buffer: "npm:^2.0.0" + is-plain-obj: "npm:^4.0.0" + trough: "npm:^2.0.0" + vfile: "npm:^5.0.0" + checksum: 10c0/da9195e3375a74ab861a65e1d7b0454225d17a61646697911eb6b3e97de41091930ed3d167eb11881d4097c51deac407091d39ddd1ee8bf1fde3f946844a17a7 + languageName: node + linkType: hard + "unified@npm:^11.0.0, unified@npm:^11.0.3, unified@npm:^11.0.4": version: 11.0.5 resolution: "unified@npm:11.0.5" @@ -19650,6 +23529,22 @@ __metadata: languageName: node linkType: hard +"unist-util-generated@npm:^2.0.0": + version: 2.0.1 + resolution: "unist-util-generated@npm:2.0.1" + checksum: 10c0/6f052dd47a7280785f3787f52cdfe8819e1de50317a1bcf7c9346c63268cf2cebc61a5980e7ca734a54735e27dbb73091aa0361a98504ab7f9409fb75f1b16bb + languageName: node + linkType: hard + +"unist-util-is@npm:^5.0.0": + version: 5.2.1 + resolution: "unist-util-is@npm:5.2.1" + dependencies: + "@types/unist": "npm:^2.0.0" + checksum: 10c0/a2376910b832bb10653d2167c3cd85b3610a5fd53f5169834c08b3c3a720fae9043d75ad32d727eedfc611491966c26a9501d428ec62467edc17f270feb5410b + languageName: node + linkType: hard + "unist-util-is@npm:^6.0.0": version: 6.0.0 resolution: "unist-util-is@npm:6.0.0" @@ -19668,6 +23563,15 @@ __metadata: languageName: node linkType: hard +"unist-util-position@npm:^4.0.0": + version: 4.0.4 + resolution: "unist-util-position@npm:4.0.4" + dependencies: + "@types/unist": "npm:^2.0.0" + checksum: 10c0/e506d702e25a0fb47a64502054f709a6ff5db98993bf139eec868cd11eb7de34392b781c6c2002e2c24d97aa398c14b32a47076129f36e4b894a2c1351200888 + languageName: node + linkType: hard + "unist-util-position@npm:^5.0.0": version: 5.0.0 resolution: "unist-util-position@npm:5.0.0" @@ -19687,6 +23591,15 @@ __metadata: languageName: node linkType: hard +"unist-util-stringify-position@npm:^3.0.0": + version: 3.0.3 + resolution: "unist-util-stringify-position@npm:3.0.3" + dependencies: + "@types/unist": "npm:^2.0.0" + checksum: 10c0/14550027825230528f6437dad7f2579a841780318569851291be6c8a970bae6f65a7feb24dabbcfce0e5e68cacae85bf12cbda3f360f7c873b4db602bdf7bb21 + languageName: node + linkType: hard + "unist-util-stringify-position@npm:^4.0.0": version: 4.0.0 resolution: "unist-util-stringify-position@npm:4.0.0" @@ -19696,6 +23609,16 @@ __metadata: languageName: node linkType: hard +"unist-util-visit-parents@npm:^5.0.0, unist-util-visit-parents@npm:^5.1.1": + version: 5.1.3 + resolution: "unist-util-visit-parents@npm:5.1.3" + dependencies: + "@types/unist": "npm:^2.0.0" + unist-util-is: "npm:^5.0.0" + checksum: 10c0/f6829bfd8f2eddf63a32e2c302cd50978ef0c194b792c6fe60c2b71dfd7232415a3c5941903972543e9d34e6a8ea69dee9ccd95811f4a795495ed2ae855d28d0 + languageName: node + linkType: hard + "unist-util-visit-parents@npm:^6.0.0": version: 6.0.1 resolution: "unist-util-visit-parents@npm:6.0.1" @@ -19706,6 +23629,17 @@ __metadata: languageName: node linkType: hard +"unist-util-visit@npm:^4.0.0": + version: 4.1.2 + resolution: "unist-util-visit@npm:4.1.2" + dependencies: + "@types/unist": "npm:^2.0.0" + unist-util-is: "npm:^5.0.0" + unist-util-visit-parents: "npm:^5.1.1" + checksum: 10c0/56a1f49a4d8e321e75b3c7821d540a45165a031dd06324bb0e8c75e7737bc8d73bdddbf0b0ca82000f9708a4c36861c6ebe88d01f7cf00e925f5d75f13a3a017 + languageName: node + linkType: hard + "unist-util-visit@npm:^5.0.0": version: 5.0.0 resolution: "unist-util-visit@npm:5.0.0" @@ -19764,6 +23698,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.1.1": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 + languageName: node + linkType: hard + "update-notifier@npm:^6.0.2": version: 6.0.2 resolution: "update-notifier@npm:6.0.2" @@ -19819,19 +23767,22 @@ __metadata: languageName: node linkType: hard -"url-template@npm:^2.0.8": - version: 2.0.8 - resolution: "url-template@npm:2.0.8" - checksum: 10c0/56a15057eacbcf05d52b0caed8279c8451b3dd9d32856a1fdd91c6dc84dcb1646f12bafc756b7ade62ca5b1564da8efd7baac5add35868bafb43eb024c62805b +"url@npm:^0.11.1": + version: 0.11.4 + resolution: "url@npm:0.11.4" + dependencies: + punycode: "npm:^1.4.1" + qs: "npm:^6.12.3" + checksum: 10c0/cc93405ae4a9b97a2aa60ca67f1cb1481c0221cb4725a7341d149be5e2f9cfda26fd432d64dbbec693d16593b68b8a46aad8e5eab21f814932134c9d8620c662 languageName: node linkType: hard -"use-sync-external-store@npm:^1.4.0": - version: 1.5.0 - resolution: "use-sync-external-store@npm:1.5.0" +"use-editable@npm:^2.3.3": + version: 2.3.3 + resolution: "use-editable@npm:2.3.3" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10c0/1b8663515c0be34fa653feb724fdcce3984037c78dd4a18f68b2c8be55cc1a1084c578d5b75f158d41b5ddffc2bf5600766d1af3c19c8e329bb20af2ec6f52f4 + react: ">= 16.8.0" + checksum: 10c0/6e8ae63ed0b9ad9a79d1f88992c6a594da0ad3dd1c67da7c12b73722b2a41f787c611dbe9e640f9cee5738168028219ca3c7b4cf739f096cee8069e82968a7b9 languageName: node linkType: hard @@ -19842,6 +23793,15 @@ __metadata: languageName: node linkType: hard +"util@npm:^0.10.3": + version: 0.10.4 + resolution: "util@npm:0.10.4" + dependencies: + inherits: "npm:2.0.3" + checksum: 10c0/d29f6893e406b63b088ce9924da03201df89b31490d4d011f1c07a386ea4b3dbe907464c274023c237da470258e1805d806c7e4009a5974cd6b1d474b675852a + languageName: node + linkType: hard + "util@npm:^0.12.5": version: 0.12.5 resolution: "util@npm:0.12.5" @@ -19885,6 +23845,20 @@ __metadata: languageName: node linkType: hard +"uvu@npm:^0.5.0": + version: 0.5.6 + resolution: "uvu@npm:0.5.6" + dependencies: + dequal: "npm:^2.0.0" + diff: "npm:^5.0.0" + kleur: "npm:^4.0.3" + sade: "npm:^1.7.3" + bin: + uvu: bin.js + checksum: 10c0/ad32eb5f7d94bdeb71f80d073003f0138e24f61ed68cecc8e15d2f30838f44c9670577bb1775c8fac894bf93d1bc1583d470a9195e49bfa6efa14cc6f4942bff + languageName: node + linkType: hard + "validate.io-array@npm:^1.0.3": version: 1.0.6 resolution: "validate.io-array@npm:1.0.6" @@ -19939,6 +23913,16 @@ __metadata: languageName: node linkType: hard +"vfile-location@npm:^4.0.0": + version: 4.1.0 + resolution: "vfile-location@npm:4.1.0" + dependencies: + "@types/unist": "npm:^2.0.0" + vfile: "npm:^5.0.0" + checksum: 10c0/77097e819579214d3346aaa2b06e4d23e2413221ac4914679d312cf64973011b76f0e2424fa8f18987befcd6ed60f4f6c4c6ebd5d5326062173a95f6b4445a96 + languageName: node + linkType: hard + "vfile-location@npm:^5.0.0": version: 5.0.3 resolution: "vfile-location@npm:5.0.3" @@ -19949,6 +23933,16 @@ __metadata: languageName: node linkType: hard +"vfile-message@npm:^3.0.0": + version: 3.1.4 + resolution: "vfile-message@npm:3.1.4" + dependencies: + "@types/unist": "npm:^2.0.0" + unist-util-stringify-position: "npm:^3.0.0" + checksum: 10c0/c4ccf9c0ced92d657846fd067fefcf91c5832cdbe2ecc431bb67886e8c959bf7fc05a9dbbca5551bc34c9c87a0a73854b4249f65c64ddfebc4d59ea24a18b996 + languageName: node + linkType: hard + "vfile-message@npm:^4.0.0": version: 4.0.2 resolution: "vfile-message@npm:4.0.2" @@ -19959,6 +23953,18 @@ __metadata: languageName: node linkType: hard +"vfile@npm:^5.0.0": + version: 5.3.7 + resolution: "vfile@npm:5.3.7" + dependencies: + "@types/unist": "npm:^2.0.0" + is-buffer: "npm:^2.0.0" + unist-util-stringify-position: "npm:^3.0.0" + vfile-message: "npm:^3.0.0" + checksum: 10c0/c36bd4c3f16ec0c6cbad0711ca99200316bbf849d6b07aa4cb5d9062cc18ae89249fe62af9521926e9659c0e6bc5c2c1da0fe26b41fb71e757438297e1a41da4 + languageName: node + linkType: hard + "vfile@npm:^6.0.0, vfile@npm:^6.0.1": version: 6.0.2 resolution: "vfile@npm:6.0.2" @@ -20201,6 +24207,15 @@ __metadata: languageName: node linkType: hard +"warning@npm:^4.0.3": + version: 4.0.3 + resolution: "warning@npm:4.0.3" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10c0/aebab445129f3e104c271f1637fa38e55eb25f968593e3825bd2f7a12bd58dc3738bb70dc8ec85826621d80b4acfed5a29ebc9da17397c6125864d72301b937e + languageName: node + linkType: hard + "watchpack@npm:^2.4.1": version: 2.4.1 resolution: "watchpack@npm:2.4.1" @@ -20553,7 +24568,7 @@ __metadata: languageName: node linkType: hard -"webpack-bundle-analyzer@npm:^4.9.0": +"webpack-bundle-analyzer@npm:^4.10.2": version: 4.10.2 resolution: "webpack-bundle-analyzer@npm:4.10.2" dependencies: @@ -20590,7 +24605,7 @@ __metadata: languageName: node linkType: hard -"webpack-dev-server@npm:^4.15.1": +"webpack-dev-server@npm:^4.15.2": version: 4.15.2 resolution: "webpack-dev-server@npm:4.15.2" dependencies: @@ -20648,6 +24663,17 @@ __metadata: languageName: node linkType: hard +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" + dependencies: + clone-deep: "npm:^4.0.1" + flat: "npm:^5.0.2" + wildcard: "npm:^2.0.1" + checksum: 10c0/bf1429567858b353641801b8a2696ca0aac270fc8c55d4de8a7b586fe07d27fdcfc83099a98ab47e6162383db8dd63bb8cc25b1beb2ec82150422eec843b0dc0 + languageName: node + linkType: hard + "webpack-sources@npm:^3.2.3": version: 3.2.3 resolution: "webpack-sources@npm:3.2.3" @@ -20699,17 +24725,57 @@ __metadata: languageName: node linkType: hard -"webpackbar@npm:^5.0.2": - version: 5.0.2 - resolution: "webpackbar@npm:5.0.2" +"webpack@npm:^5.95.0": + version: 5.99.6 + resolution: "webpack@npm:5.99.6" dependencies: - chalk: "npm:^4.1.0" - consola: "npm:^2.15.3" + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.6" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.14.0" + browserslist: "npm:^4.24.0" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.17.1" + es-module-lexer: "npm:^1.2.1" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.2.0" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^4.3.0" + tapable: "npm:^2.1.1" + terser-webpack-plugin: "npm:^5.3.11" + watchpack: "npm:^2.4.1" + webpack-sources: "npm:^3.2.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/b8b44b16933a0dd83e185ad42f292bbdfa9c47e245cbe786c48520d681556ece9af6ea7fff33059fafdf3d2cd62674715308d70a6f15eda6c6de7e03ef01842a + languageName: node + linkType: hard + +"webpackbar@npm:^6.0.1": + version: 6.0.1 + resolution: "webpackbar@npm:6.0.1" + dependencies: + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" + consola: "npm:^3.2.3" + figures: "npm:^3.2.0" + markdown-table: "npm:^2.0.0" pretty-time: "npm:^1.1.0" - std-env: "npm:^3.0.1" + std-env: "npm:^3.7.0" + wrap-ansi: "npm:^7.0.0" peerDependencies: webpack: 3 || 4 || 5 - checksum: 10c0/336568a6ed1c1ad743c8d20a5cab5875a7ebe1e96181f49ae0a1a897f1a59d1661d837574a25d8ba9dfa4f2f705bd46ca0cd037ff60286ff70fb8d9db2b0c123 + checksum: 10c0/8dfa2c55f8122f729c7efd515a2b50fb752c0d0cb27ec2ecdbc70d90a86d5f69f466c9c5d01004f71b500dafba957ecd4413fca196a98cf99a39b705f98cae97 languageName: node linkType: hard @@ -20853,7 +24919,7 @@ __metadata: languageName: node linkType: hard -"wildcard@npm:^2.0.0": +"wildcard@npm:^2.0.0, wildcard@npm:^2.0.1": version: 2.0.1 resolution: "wildcard@npm:2.0.1" checksum: 10c0/08f70cd97dd9a20aea280847a1fe8148e17cae7d231640e41eb26d2388697cbe65b67fd9e68715251c39b080c5ae4f76d71a9a69fa101d897273efdfb1b58bf7 From 49f15ff4f43ef56340c784e43d9ad7c1bbfc30ac Mon Sep 17 00:00:00 2001 From: BeroBurny Date: Thu, 24 Apr 2025 11:32:03 +0200 Subject: [PATCH 12/38] fix --- docs/docs/02-Stash/02-stash-api.md | 4 ---- docs/docs/03-Solve/02-solve-api.md | 4 ---- docs/src/components/SwaggerUI.jsx | 32 ------------------------------ 3 files changed, 40 deletions(-) delete mode 100644 docs/src/components/SwaggerUI.jsx diff --git a/docs/docs/02-Stash/02-stash-api.md b/docs/docs/02-Stash/02-stash-api.md index 7aa97cf..9387735 100644 --- a/docs/docs/02-Stash/02-stash-api.md +++ b/docs/docs/02-Stash/02-stash-api.md @@ -20,7 +20,3 @@ You can also visit the [Stash swagger](https://api.sprinter.buildwithsygma.com/s → Get the borrow quote for a liquidity transaction based on the input data --- - -import SwaggerUI from '@site/src/components/SwaggerUI'; - - diff --git a/docs/docs/03-Solve/02-solve-api.md b/docs/docs/03-Solve/02-solve-api.md index c258e0a..7ef60ca 100644 --- a/docs/docs/03-Solve/02-solve-api.md +++ b/docs/docs/03-Solve/02-solve-api.md @@ -6,7 +6,3 @@ sidebar_position: 2 --- ## Solver API Endpoints - -import SwaggerUI from '@site/src/components/SwaggerUI'; - - diff --git a/docs/src/components/SwaggerUI.jsx b/docs/src/components/SwaggerUI.jsx deleted file mode 100644 index 61a3e2f..0000000 --- a/docs/src/components/SwaggerUI.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from "react"; -import { RedocStandalone } from "redoc"; - -export default function SwaggerUI({ specUrl }) { - return ( -
- -
- ); -} From 28e20cdc06088f1983278195bb44fe8d118d4c11 Mon Sep 17 00:00:00 2001 From: BeroBurny Date: Thu, 24 Apr 2025 13:09:50 +0200 Subject: [PATCH 13/38] solver yaml fix --- .../src/api/generated/solve/get-quote.api.mdx | 71 +++++++++++++++++++ .../api/generated/solve/get-route-v-2.api.mdx | 71 +++++++++++++++++++ .../src/api/generated/solve/get-route.api.mdx | 71 +++++++++++++++++++ .../generated/solve/swap-by-blanc.info.mdx | 44 ++++++++---- docs/src/api/solve-openapi.yaml | 3 + 5 files changed, 248 insertions(+), 12 deletions(-) create mode 100644 docs/src/api/generated/solve/get-quote.api.mdx create mode 100644 docs/src/api/generated/solve/get-route-v-2.api.mdx create mode 100644 docs/src/api/generated/solve/get-route.api.mdx diff --git a/docs/src/api/generated/solve/get-quote.api.mdx b/docs/src/api/generated/solve/get-quote.api.mdx new file mode 100644 index 0000000..dc726e9 --- /dev/null +++ b/docs/src/api/generated/solve/get-quote.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-quote +title: "getQuote" +description: "Get a price estimation quote" +sidebar_label: "getQuote" +hide_title: true +hide_table_of_contents: true +api: eJztlt9v2zYQx/+VA7GHdpMb2ZHr2G+K43RGX7okBQoYXkqL54iNRCrkybVn6H8vKPpXYsfZAuxhWP1m8u745eeOp1syXaDhJLUaCtZjd0h/lJqQBUygTYws3BbrsQ9IwKEwMkFASzKvfeBhZVxww3MkNJb1RksmnctDiWbBAqZ4jqzHeK5LRbdS7cW+SRH8LugpkL5HZYE0WMwykAoEJjLnGShN9aksYDZJMeest3wSKt6E4QoGV/1W6OMBt8A3gSwZqe7gjdJgE4mK5FQmm/BvWcBoUTjN3rC+HxEad8Kfo7DRHf/2CwsYznleZM6uGe79XBBJ9e6NU+CVsSpgBh9KaVCwHpkSXwpTBYdx1td6jubqzkIYtBuUR7C1QpgsCGFAKRos840rqkQLFB5finP4LimFr+H8KxQGp3J+nFU4H/HGNG5cOmbLKKweYwvn78+bnXbUiQZn3bAb9aPognfPJt12NECBcT/qtludpggvd2jGXtpxkv8g8nHAuqS/R3hSLv5fgPthi/P4tDtptU4vB2cXYRxiux9dtjoYX3TDs9N+p/2+n7RYNXaBbKGVRevQtMJwn1DddsCWSYLWTsssW0BikBMKFrBEK0JFzosXRSaT+qGefLPOdfks9etNNN+oPFxKEXBeYEIoQJdUlLRqP1vWevINE/e/MK5BkvTKVz3MFcV/sPU8Suho9zLjrUedh6tVulhVOa/oUMLOuQAXDi29PkMDY7SBdXX4/AgkLjN7IBm76tF5OuGPM+SX9875vcy5AoNc8EmGUFtBjtbyOzzAfItXKltOp7JO1ZNicWTW1Op7bGg19wV8VrykVBv5FwpowFDNeCYFxJ+GcI+LnwB3AbYPldtQuVfgXhCaGRqv4Ce3LbcqYDlSqldjnO8cKeuxk/WQZjEpjaRFPaLFhfyIi7h0JqOx69Hr7WuHzF9q12i5FsvrRRb4r2aKXKDZfja/NOJPw4Y3eNIgfa171lNtck5g728zOcPbX+tLSTXV9UGry11/5wVMFnCecZUcjFdaFBsLcPYsYDM01ps034XvwsYEibuvWaEt5bwui5XYOyQ4OO8ut3X10ui7okI4p5Mi41K5o0qTuSA+AyPmbccBS7Ult7BcTrjFzyarKrfsRw+XFiGtKxTBelOeWTwi683VqijfwisG6IOqXSd6PKjPeFY6u3pKerW258bRIyJ2xtt/SYMf2F6U4AfArYax+2OkE1E/nGD9Alz2vGOcJFjseu01Jhdl81g/DG5YVf0AB+2RRg== +sidebar_class_name: "get api-method" +info_path: ../src/api/generated/solve/swap-by-blanc +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + + + + + + +Get a price estimation quote + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/api/generated/solve/get-route-v-2.api.mdx b/docs/src/api/generated/solve/get-route-v-2.api.mdx new file mode 100644 index 0000000..f8e7218 --- /dev/null +++ b/docs/src/api/generated/solve/get-route-v-2.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-route-v-2 +title: "getRouteV2" +description: "Get a route for execution with additional parameters" +sidebar_label: "getRouteV2" +hide_title: true +hide_table_of_contents: true +api: eJztWG1vGjkQ/iuWdSclvYUsGwiBb4SQHrovVZJWJ0U5atYDuN21N34hcIj/fpr1Znmnbar70Lvybe3x+JnH48czLKjKQDMrlOxz2qZjsLfKWfgQ0YByMLEWGU7SNn0LljCicZaMlCYwg9jhHHkWdkIY5wK/WEIyplkKFrShAV37aD8sqEBXTw70nAZUshRom7JUOWkHQu7seT8B4meJGhGrPoM0xCpiIEmIkIRDLFKWEKlsHgMNqIknkDLaXmy56pRumCS9224Uen+EGcJKR8ZqIcfkRCpiYgHSipGIS/enNKB2niFmb5jHZy1o3OGvh7DSevztFxpQmLE0S9CuFu780Imw+ew9IvDI6DKgGp6c0MBp22oHX3KzDPbTmYd1iM0iZs41mJLKI7RFIRnOLZCenYAGl5ZLQcaKA/f0TWDms+BjOPtIMg0jMTvOVTh7YJVRp3KDnC3q4XKTtnB2cVVrNurNeu+yFbbq3Xr9mrUuh61GvQccOt16qxE1azy8WWOz46EdZ/IbPB8nWDn7dQwP3fz/RXA3jBjrnLeGUXR+07u8DjshNLr1m6gJnetWeHnebTYuunF0kGCTiCxjY9jL78sksSoBzWQMqAQZ6BikxfETqI6rAQmrjVynwmrj19ONAyhYky4dgqYBHSmdMkvbdJQotnURRywx6+GF1cbBtGB6DHbAndfTQWr250duRl7Mcox2AoWyGmA6nmBEqUgSYSBWkpt98IW0MN7EL6S9qB/HH4Xh8hENTKakAYMOozDczctbD8fFMRgzckkyJ2OQ+FYApwGNlbQgLa5jWZaIOA/m7JPBxYuD2X637i/WgN6KyLdfEQ6WicSsslwNP0GMd24V3QN9csrCQCCk4hnx9zIVcrAx4GlHIp9ZNohZkgw4swzdMSGH6nkgZOYsfQxopvFRtMKzU+6wE8x7KZ4cEMH9OwG6PMt8zZ77ubolT4NadF5vXDQv8bzWkP6QD9cW2z9kDEWC/FcEeivNd8L6HWZlBGiGVmX+4uJvQP9mG/r5JfBa87yVa9HG9drB0cdhsrF7seIQivWNqtUqXS5XBOSqdVuI24eILpc4W98ncFeME1QSMPb1etbTWmnyoqY+A75OuABX7qqNH949LZcySTQwzoYJkNyKpGCMfyUPUySkcaORyK8TUc4i2azI+TXe8jhKtmr7tI45O1Fa/A2cVEhfTlkiOOm865PPMP9J4DqBjX3p1pd4dVDlQE9BewQ/eVvxhs8I2Ikq2lAvNxPapmfT6CwvEfDxhthpYed5L9nJxB8w7zi0enjEsuZl+g5Z83GtG5W1E8sHaeDruAkwnhdSRSH3Z6Xzrl/xBlvvmE93T7cvu4j5PEjEFAZv8riEHKl8oyK+u2eWkeGcXCVMxnv9OQO8tCB3XvOmoI03qVXDalgZgmUoppkyNmV5ZhRgsZb0tdpuz75YZddr2/eCMAsze5YlTEhE4XSCzv35PNApbuxP6DGgE2Usji4WQ2bgvU6WSxz2xTIeGxcGc2lVnB7EfHJb5O0pecU/AXuho1ht/uMwZYlDu7wbeTW2Q331ERBrffq/hMF3nl+E4AvkV2L4npbsCLK1FvA7gL2y1zrG2L4mb4XwET+0QIi5JgUv4oKJ7z104hiydcJ3ZB+9lFL4tndPl8t/ANxtndI= +sidebar_class_name: "get api-method" +info_path: ../src/api/generated/solve/swap-by-blanc +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + + + + + + +Get a route for execution with additional parameters + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/api/generated/solve/get-route.api.mdx b/docs/src/api/generated/solve/get-route.api.mdx new file mode 100644 index 0000000..90fd16d --- /dev/null +++ b/docs/src/api/generated/solve/get-route.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-route +title: "getRoute" +description: "Get a route for execution" +sidebar_label: "getRoute" +hide_title: true +hide_table_of_contents: true +api: eJztV99v2zYQ/lcIYg9tJzeyY9eR3xTH6YJhQJGkwwDDS2npbLORSIU/UnuG/vfhSEV2IttNg+1hXf1m8nj87uN3d7o1lQUoZrgUFykd0DmYS2kN0ICmoBPFC9yiA/oeDGFE4R6ZSUVgCYl1ewEtmGI5GFCaDsZrytH+zoJa0YAKlgMdUJZLK8wNFw3H1wsgfpfIGTHyFoQmRhINWUa4ICkkPGcZEdKw6j6dLCBndLB+4iqu3TBBRpfDTuj9EaYJqx1po7iYk1dCEp1wEIbPeFK7f00DalYFYvaGLj5jQOENf47DVjT5+ScaUFiyvMjQrh02fuiEG7d7jQg8MloGVMGd5QpSOjDKwtfclMFuOl1Y+9isYk5TBbqm8gBtnZBMVwbIyCxAgc3royASmULq6VvAknzhZkE+hctPpFAw48vDXIXLMWvN4tY5crbuhuVj2sLlu9N2v9ftd0cnURh1h93uGYtOplGvO4IU4mE36nX67TQ832Iz9tAOM/kNnvcRnHNxU2lWWrOT5pwLniNbO8SrIAF+D9+tVqPoG6W6j8SGVqd29f+S6jDsMBYfR9NO5/h8dHIWxiH0ht3zTh/isyg8OR72e++GSYeWE3SkCyk0aKSmE4ZNhlz1JtomCWg9s1m2InMQWOIhpQFNpDAgDJ5jRZHxxAnp6LPGw+u9vF9t+0sUoLeqGTii625AUjCMZ3pDt5x+hgQff0PCmCYsczZzpukkoIXCLmS4j8tvNjNGKbbChBn9/htxNqgXfzNgp9BwZ0EksLmb4REaUG4g3+VR1L4aPe0QeiNpQO9ZZl2bZIY1YzDyuxGvD/Q/WcDc2zSQ/wLLmnJ8e2f1fIbfPKX3+ATSdv84omW5QTJkWeYWUOINCCNteO6SaM40edDWPhFyYWAOavvadg8j377QJf5lVR9oWeJed1eFOGWpuxG0eXlBGCklFXkoR16wz0t9wJPNhPHLzbeyORNEAUvZNAPirEgOWrM57HizzbNwoe1sxp3miLSmsKbq1I+eycVRs9VuAvgomDULqfhfkJIWuRD3LOMpiT9ckFtY/SBwm8DeLrldCMwiLAWg7kF5BD942/BWBjQHs5DV+OUrz4IO6JGqJjENiVXcrNx0FRf8V1jFFk3GE/woeNi+Qsp8UNtG67obukVshxjgAljqakr1nfZHK/5w0fIGTyq917rneiZVzgzRtzcZv4ebNy4oLmau3z0Ed/WFFWS6IqcZE8lOf1ZDWlsQtMeWCkp7k/bb8G3YmoJhWMYLqU3OnCwqsHMwZOecut7o6uDIWlFiYGmOioxxgfdYlaEHT/+YevonAV1IbXBhvZ4yDR9VVpa47D908U1SrlElKR3MWKbhAKZXl5UiX5MXDL47UWMZejxgVx2bum/yF2PbN0YeALE1lv4zGJ43Yx1A1Jjj/iVu/NjyVWqeYpjgH8URhMvm4CEtUVX+YJwkUGyfalRL9FJXkPeja1qWfwOX+fl8 +sidebar_class_name: "get api-method" +info_path: ../src/api/generated/solve/swap-by-blanc +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + + + + + + +Get a route for execution + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/api/generated/solve/swap-by-blanc.info.mdx b/docs/src/api/generated/solve/swap-by-blanc.info.mdx index 32d46f0..6436c5c 100644 --- a/docs/src/api/generated/solve/swap-by-blanc.info.mdx +++ b/docs/src/api/generated/solve/swap-by-blanc.info.mdx @@ -17,36 +17,55 @@ import Export from "@theme/ApiExplorer/Export"; +> + +> + + + API used by Blanc Swap -
+
- - + > + + + + API key with format sk_live_* +
- - - - - - + + +
Security Scheme Type:apiKey
Header parameter name:X-API-Key + Security Scheme Type: + + apiKey +
+ Header parameter name: + + X-API-Key +
@@ -54,3 +73,4 @@ API used by Blanc Swap
+ \ No newline at end of file diff --git a/docs/src/api/solve-openapi.yaml b/docs/src/api/solve-openapi.yaml index b9dc2dc..8ea42da 100644 --- a/docs/src/api/solve-openapi.yaml +++ b/docs/src/api/solve-openapi.yaml @@ -10,6 +10,7 @@ security: paths: /quote: get: + operationId: getQuote description: Get a price estimation quote parameters: - in: query @@ -61,6 +62,7 @@ paths: /route: get: + operationId: getRoute description: Get a route for execution parameters: - in: query @@ -119,6 +121,7 @@ paths: /v2/route: get: + operationId: getRouteV2 description: Get a route for execution with additional parameters parameters: - in: query From a3d591990083dd74643841e0ebd37e9146a58509 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 25 Apr 2025 11:29:57 +0100 Subject: [PATCH 14/38] final draft update to docsupgrade v2 --- docs/docs/01-introduction/01-introduction.md | 8 +- docs/docs/02-Stash/01-utilizing-stash.md | 42 ++++- docs/docs/02-Stash/02-stash-api.md | 22 --- .../02-stash-pools.md} | 8 +- ...w-cost-for-a-liquidity-transaction.api.mdx | 125 +++++++++++++++ ...ransaction-based-on-the-input-data.api.mdx | 143 ++++++++++++++++++ docs/docs/02-Stash/index.md | 4 +- docs/docs/03-Solve/01-use-solve.md | 38 ++++- docs/docs/03-Solve/02-solve-api.md | 8 - docs/docs/03-Solve/get-quote.api.mdx | 71 +++++++++ docs/docs/03-Solve/get-route-v-2.api.mdx | 71 +++++++++ docs/docs/03-Solve/get-route.api.mdx | 71 +++++++++ docs/docs/03-Solve/index.md | 8 +- docs/docs/06-fees.md | 59 -------- docs/docs/08-partnerships.md | 5 +- docs/src/css/custom.css | 27 ++++ 16 files changed, 592 insertions(+), 118 deletions(-) delete mode 100644 docs/docs/02-Stash/02-stash-api.md rename docs/docs/{04-liquidityhubpools copy.md => 02-Stash/02-stash-pools.md} (79%) create mode 100644 docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx create mode 100644 docs/docs/02-Stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx delete mode 100644 docs/docs/03-Solve/02-solve-api.md create mode 100644 docs/docs/03-Solve/get-quote.api.mdx create mode 100644 docs/docs/03-Solve/get-route-v-2.api.mdx create mode 100644 docs/docs/03-Solve/get-route.api.mdx delete mode 100644 docs/docs/06-fees.md diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index 57e36f1..14f7fc3 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -22,18 +22,18 @@ Sprinter combines solving-as-a-service infrastructure with credit-based cross-ch ### Sprinter Stash -A cross-chain credit protocol providing liquidity access to solvers and market makers without requiring collateral. Liquidity providers deposit USDC into the protocol, earning returns through solver fees and passive yield strategies. +A crosschain credit protocol providing liquidity access to solvers and market makers without requiring collateral. Liquidity providers deposit USDC into the protocol, earning returns through solver fees and passive yield strategies. ### Sprinter Solve A solving-as-a-service platform that offers a request-for-quote (RFQ) based swap API for our partners. It enables dApps, wallets, and protocols to improve execution quality, optimize pricing, and enhance user experience. -### Need to Chat to us? +### Need to chat to us? If you have questions about Sprinter, the code, the docs, or have a partnership inquiry, please reach out to us on [Telegram](https://t.me/sprinter_tech/1) or via email at [hello@sprinter.tech](mailto:hello@sprinter.tech). ### Join our Community - **Telegram:** [t.me/sprinter_tech](https://t.me/sprinter_tech) -- **Twitter:** [@sprinter_ux](https://twitter.com/sprinter_ux) -- **Website:** [Sprinter.tech](https://sprinter.tech) +- **X:** [@sprinter_ux](https://x.com/sprinter_ux) +- **Website:** [sprinter.tech](https://sprinter.tech) diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index 643705f..fe355ab 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -1,6 +1,6 @@ --- id: use-stash -title: Utilizing Stash +title: How to use Stash sidebar_position: 1 --- @@ -8,17 +8,17 @@ sidebar_position: 1 There are two main ways to utilize Sprinter Stash. Either as a Liquidity Provider or as a Solver. ::: -### As a Liquidity Provider +## As a Liquidity Provider 1. Visit [app.sprinter.tech](https://app.sprinter.tech) 2. Connect your wallet (e.g., MetaMask) 3. Deposit USDC and stake LP tokens 4. Monitor rewards, pool stats, unstake or withdraw liquidity -### As a Solver +## As a Solver -1. Request API access via [Google Form](https://forms.gle/kgpcQK722Ley2gke7) -2. Review [Stash API](StashAPI) or visit the [Stash Swagger](https://api.test.sprinter.buildwithsygma.com/swagger/index.html#/Liquidity/get_liquidity_protocol__protocol__deposit__txHash__request) +1. Request Stash API access via [Sprinter Stash Request Form](https://forms.gle/kgpcQK722Ley2gke7) +2. Review the Stash APIs ([borrow cost](borrow-cost-api), [borrow quote](borrow-quote-api)) or visit the [Stash Swagger](https://api.test.sprinter.buildwithsygma.com/swagger/index.html#/Liquidity/get_liquidity_protocol__protocol__deposit__txHash__request) 3. Query borrow rates 4. Borrow funds and execute swaps 5. Repay liquidity post-transaction @@ -36,3 +36,35 @@ There are two main ways to utilize Sprinter Stash. Either as a Liquidity Provide - Blue-Chip: WETH, WBTC Want to request support for a new chain or asset? [Submit a request](https://forms.gle/an5vZrmyDkyYR8Ni7). + + + +## Fees + +Sprinter Stash handles crosschain liquidity fills. Revenue is generated from the spread between source and destination values. + +### Revenue Components + +- **Fill Revenue:** User deposit on source - amount bridged to destination. +- **Borrow Costs:** Cost of liquidity borrowing and crosschain repayment. +- **Solver Costs:** Gas fees and execution costs fronted by solvers. + +### Profit Calculation + +``` +Fill Profit = Fill Revenue - Borrow Costs - Solver Costs +``` + +### Monthly Distribution + +1. Withdraw raw profits from liquidity pools. +2. Deduct solver gas costs. +3. Distribute monthly fill profits to: + +| Actor | Description | Fill Profit % | +| -------- | ------------------------------------- | ------------- | +| Solvers | For executing fills | 50% | +| LPs | For providing liquidity | 50% | +| Treasury | Protocol growth & sustainability fund | TBD | + +➡️ _Initial fee split is reviewed monthly by governance._ \ No newline at end of file diff --git a/docs/docs/02-Stash/02-stash-api.md b/docs/docs/02-Stash/02-stash-api.md deleted file mode 100644 index 9387735..0000000 --- a/docs/docs/02-Stash/02-stash-api.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -id: StashAPI -title: Stash API Endpoints -hide_table_of_contents: true -sidebar_position: 2 ---- - -:::tip -You can also visit the [Stash swagger](https://api.sprinter.buildwithsygma.com/swagger/index.html#/Liquidity/get_liquidity_protocol__protocol__deposit__txHash__request) directly -::: - -GET -`/liquidity/protocol/{protocol}/deposit/{txHash}/request` - -→ Get the borrow cost for a liquidity transaction - -GET -`/liquidity/protocol/{protocol}/type/{type}/quote` - -→ Get the borrow quote for a liquidity transaction based on the input data - ---- diff --git a/docs/docs/04-liquidityhubpools copy.md b/docs/docs/02-Stash/02-stash-pools.md similarity index 79% rename from docs/docs/04-liquidityhubpools copy.md rename to docs/docs/02-Stash/02-stash-pools.md index 9764b89..091ecf8 100644 --- a/docs/docs/04-liquidityhubpools copy.md +++ b/docs/docs/02-Stash/02-stash-pools.md @@ -1,12 +1,12 @@ --- id: liquidity-hub-pools -title: Liquidity Hub & Pools +title: Sprinter Stash Pools sidebar_position: 4 --- -# Liquidity Hub & Liquidity Pools +# Sprinter Stash Pools -Central to both Sprinter Stash and Solve is the **Liquidity Hub**—the smart contract that manages and distributes liquidity. +Central to both Sprinter Stash is the **Sprinter Stash Pools and Liquidity Hub**—the smart contract that manages and distributes liquidity. ## Liquidity Hub @@ -34,7 +34,7 @@ Deployed across multiple chains, these on-chain vaults serve solver requests. ### Functionality -- **Cross-Chain Execution:** Pools enable real-time execution of swaps and bridges. +- **Crosschain Execution:** Pools enable real-time execution of swaps and bridges. - **Collateral-Free Borrowing:** Solvers access liquidity backed by hub-signed approvals. - **Rebalancing:** Liquidity is auto-optimized across chains. - **Risk Management:** Protocol maintains loan-to-value ratios to ensure solvency. diff --git a/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx new file mode 100644 index 0000000..35852c5 --- /dev/null +++ b/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -0,0 +1,125 @@ +--- +id: borrow-cost-api +title: "Get the borrow cost for a liquidity transaction" +description: "Get the borrow cost for a liquidity transaction" +sidebar_label: "Get the borrow cost " +hide_title: true +hide_table_of_contents: true +api: eJzNVk2P00AM/Ssjn0CapQjBJTcWIUAggdByqnpwE28ykMxkPc62VZT/jpyPbVrCwu4B0UsnE4/9bL95TgsZxZRdLS54SOAdiZGCzDYwh51JQxRzHdigKd1N4zInByOMPmLan7BQI2NFQhwhWbdn7r5wkJCGEiw4fa5RCrDgsSJ9Or5lumkcUwaJcEMWYlpQhZC0IIdabaOw8zl0nT2PcXWEYwqMRY9Xc8ioDtHJcmzZv8dYPCjyZjCmKJchO6hFGryQF11iXZcuRUWx+h4VWHuPq86eJeF83YjJUNA8YSrx0K+fLuDbX8QX4SLcEpcBs2m/U8NYBx8pasAXz5/r32mQzx/B/j3m07OXM0JE4SaVhsnsnBQGzdblzz54MUw1UyQvlBmMZkzXaqNrYnEDtoFbb0KUhdJYuCPalxDKRQsffEqLb6LLPSqyRebMarmeoziPOUWY+9vYyV/YfqdUtImdhZdLdb7EzIxMMVlDRoJx/hZLl5mhz4FN5WJ0Pjez6/OA3pwWNKNtky/Wg5gD/7kWg4PJ/DepvlpK9YMXYo+licS3xGbw8F9n0lkQzFWt4NPUdrUcLtYO2avjBD7XxD1qk5MkqzuKrCbZWrXTqluNWrNqB13pVlP/C4ymakpxdUnmKB+arwXaC/nogh+08wcdIDnDYeEWy4b+BR4VuIqkCBkkkJP04i4FJPDIYGBBG/71KJpv91jV5ax/qs3XYdJSTJUx2iAnvZWmTxwHrikN6hClwp5Do5A/fGKdMHgm4o9wNbJLaC+rukTnFWPDvWwNtVsftWUQwmniJbP1cVIlJ3NJa7ixUPRSuYa23WKkb1x2nW7fNMQHSNYb5Qg73GrJdAS7qOsMkmssI92T8JOv49V5amaTejGpcRP9YUZJsCNn73Lpx/Nj4v/FFH8ErrGa3aazUBBmxLOL9mbAcXGlLo6Hf9ErzWk48TpNqZZ7bed36N3bK7CwHT8WqpDpEcaddhd3A87Ql6UXv36vhRJ93mCutoNL/f0EE19l6w== +sidebar_class_name: "get api-method" +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + +Get the borrow cost for a liquidity transaction + + + + + + + + diff --git a/docs/docs/02-Stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/docs/02-Stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx new file mode 100644 index 0000000..d8c973d --- /dev/null +++ b/docs/docs/02-Stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -0,0 +1,143 @@ +--- +id: borrow-quote-api +title: "Get the borrow quote for a liquidity transaction based on the input data" +description: "This endpoint calculates the borrow quote for a liquidity transaction, including the borrow cost, required input/output, and duration." +sidebar_label: "Get the borrow quote" +hide_title: true +hide_table_of_contents: true +api: eJzNVk1v2zgQ/SvEnFKAiYuie9EtaYMiwKLd7WZPQQ60OJbZUqRCDh0bhv77YkjJUR01bbIoUB9smZqP9zjDN9yDxlgH05HxDiq4Xpso0OnOG0eiVrZOVhFGQWsUSx+Cvxd3yROKlQ9CCWvuktGGdoKCclHVHEcK42qbtHHN1K/2kaQIeJdMQC2M6xItfKIukRTKaaFTUOx/BhI6FVSLhCFCdbM/QvlX8ORrb4VTLYoTPGvOpDivg4/xFUgwbNMpWoMEtuB/gwdIGAFARSGhhFivsVVQ7YF2HdtGCsY10PfyOO/fmbmyjQ+G1q1ghzH95VbVdOUymfz8KTP7Dp6c6n9heY+RjMv7JT4i3fvwVVy9Fyc+GygrhcaVSpaiIJ/L4AarVfBtXuDsGEksvd4dcN4lDLsHoIMTzGAzjrDBAH1/W5hgpAuvd2xSe0foiB9V11lTZ6CLL5Gx75/g2csjnuetT46YQ2mjmV3bnsY3/tRvMFiv9Ljes2HsvIsYOdOb16/559vo/6S6xhhXydqdCEjB4Ab1N50O8ufZdMF3GMiUjFrRzGqJ/c5HmuEvYTwEsy9H5rnPnrQo3TfbSZP9u5mimeQ+zvQo7q0c4/rlF6zpUdzMfcaK7d7OVeJC6UND6oRccOM2yppBKYQPojUxsqhMxOHlxcFlama3EEPw4cc7VwKM5t+h+scc1StHGJyyImLYYBAlwm/NpJdAqmEthj9HyWfLcvTuVXAcuIJPHZYWEg1StTiMh8UowIv9+NQvOM1iz9/9ogyVtYqiTZZMZw/ydOE1E5WAW0IXjXdlJHzFHVRHACRslE34S4Gw2rVIa6+hggYpDytaQwXPzQISuLafH6Tzcqvazk5KxaK88qOiqpqbg2thKFsxYQyxtBVXvPORWpXbZRDwD0jPGt5iqSJq4V32KkcvH+YjYZ5o/O9zaxgal3BLi84q43hPUrD50OQi3cAhORfu4VpQTZ6H6VwNv6VYtxLWWbRvYL/nTfo32L7n5TIy8zXFRLW0fKpWykZ8Yst+wfieJV9OycMUH89HbuONCobxPhP7yeehGq/ED25is5CGReV2Uzwj1EMZ8pXnJZheeEt7Adb8tr/tJaxRaQwTXXpXkJ1elxYaXR/pOrMsHud1jR09aTtVng+X1yBhOdy3Wq/ZJah8P1L3BWVppjwk8toerHJNUg3blpD8+Q/91Dyx +sidebar_class_name: "get api-method" +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + +This endpoint calculates the borrow quote for a liquidity transaction, including the borrow cost, required input/output, and duration. + + + + + + + + diff --git a/docs/docs/02-Stash/index.md b/docs/docs/02-Stash/index.md index 2ec2b14..d64fb06 100644 --- a/docs/docs/02-Stash/index.md +++ b/docs/docs/02-Stash/index.md @@ -6,13 +6,13 @@ sidebar_position: 3 # Sprinter Stash -Sprinter Stash is a cross-chain credit liquidity protocol that uses a just-in-time liquidity management system to efficiently allocate funds across multiple blockchains. +Sprinter Stash is a crosschain credit liquidity protocol that uses a just-in-time liquidity management system to efficiently allocate funds across multiple blockchains. ## How Sprinter Stash Works - **Liquidity Providers** deposit USDC on Base into the protocol’s liquidity hub and receive `spUSDC-LP` tokens in return. - **Liquidity Management** is dynamic—funds are allocated across supported chains based on solver demand. -- **Solvers** borrow liquidity instantly, without collateral, enabling seamless cross-chain execution. +- **Solvers** borrow liquidity instantly, without collateral, enabling seamless crosschain execution. - After fills are completed, the Stash receives funds on the source chain, repays the credit, and distributes profits to LPs and solvers. ## Stash Rewards diff --git a/docs/docs/03-Solve/01-use-solve.md b/docs/docs/03-Solve/01-use-solve.md index d982516..e1cabba 100644 --- a/docs/docs/03-Solve/01-use-solve.md +++ b/docs/docs/03-Solve/01-use-solve.md @@ -1,15 +1,21 @@ --- id: solvestart -title: Utilizing Solve +title: How to use Solve sidebar_position: 1 --- ## Getting Started +1. Request an API key via the [Sprinter Solve Request Form](https://forms.gle/TCAUwcYqguQbWi3bA) +2. Review the Solve APIs ([get route](solve-get-route), [get quote](solve-get-quote), [get route V2](solve-get-route-v2)) +3. Call `/v2/route` to get quote + execution data +4. Send transaction using `swap_call_data` + + ### Accessing the Solve API - **Mainnet:** `https://swaps.sprinter.tech/mainnet` -- **Base:** `https://swaps.sprinter.tech/base` +- **Base:** `https://swaps.sprinter.te`c`h/base` ### Authentication @@ -19,9 +25,27 @@ All requests must include: X-API-Key: ``` -### Basic Usage Flow -1. Request an API key via the [Sprinter Solve Request Form](https://forms.gle/TCAUwcYqguQbWi3bA) -2. Review [Solve API](solveapi) -3. Call `/v2/route` to get quote + execution data -4. Send transaction using `swap_call_data` +## Solve Fees + +When a fixed user fee is applied through Sprinter API, revenue is shared with partners based on usage volume. + +### Fee Discount Tiers + +| Monthly Volume (USD) | Sprinter Fee (X%) | Discount | +| -------------------- | ----------------- | -------- | +| $0 - $1M | X \* 0.20 | 0% | +| $1M - $10M | X \* 0.15 | 25% | +| $10M - $50M | X \* 0.10 | 50% | +| $50M - $100M | X \* 0.075 | 62.5% | +| Over $100M | X \* 0.05 | 75% | + +### Example + +``` +User Fee = 0.875% +Monthly Volume = $150M +Sprinter Fee = 0.875% * 0.05 = 0.04375% (4.375 bps) +``` + + diff --git a/docs/docs/03-Solve/02-solve-api.md b/docs/docs/03-Solve/02-solve-api.md deleted file mode 100644 index 7ef60ca..0000000 --- a/docs/docs/03-Solve/02-solve-api.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -id: solveapi -title: Solve API Endpoints -hide_table_of_contents: true -sidebar_position: 2 ---- - -## Solver API Endpoints diff --git a/docs/docs/03-Solve/get-quote.api.mdx b/docs/docs/03-Solve/get-quote.api.mdx new file mode 100644 index 0000000..7738c54 --- /dev/null +++ b/docs/docs/03-Solve/get-quote.api.mdx @@ -0,0 +1,71 @@ +--- +id: solve-get-quote +title: "Get Quote" +description: "Get a price estimation quote" +sidebar_label: "Get Quote" +hide_title: true +hide_table_of_contents: true +api: eJztlt9v2zYQx/+VA7GHdpMb2ZHr2G+K43RGX7okBQoYXkqL54iNRCrkybVn6H8vKPpXYsfZAuxhWP1m8u745eeOp1syXaDhJLUaCtZjd0h/lJqQBUygTYws3BbrsQ9IwKEwMkFASzKvfeBhZVxww3MkNJb1RksmnctDiWbBAqZ4jqzHeK5LRbdS7cW+SRH8LugpkL5HZYE0WMwykAoEJjLnGShN9aksYDZJMeest3wSKt6E4QoGV/1W6OMBt8A3gSwZqe7gjdJgE4mK5FQmm/BvWcBoUTjN3rC+HxEad8Kfo7DRHf/2CwsYznleZM6uGe79XBBJ9e6NU+CVsSpgBh9KaVCwHpkSXwpTBYdx1td6jubqzkIYtBuUR7C1QpgsCGFAKRos840rqkQLFB5finP4LimFr+H8KxQGp3J+nFU4H/HGNG5cOmbLKKweYwvn78+bnXbUiQZn3bAb9aPognfPJt12NECBcT/qtludpggvd2jGXtpxkv8g8nHAuqS/R3hSLv5fgPthi/P4tDtptU4vB2cXYRxiux9dtjoYX3TDs9N+p/2+n7RYNXaBbKGVRevQtMJwn1DddsCWSYLWTsssW0BikBMKFrBEK0JFzosXRSaT+qGefLPOdfks9etNNN+oPFxKEXBeYEIoQJdUlLRqP1vWevINE/e/MK5BkvTKVz3MFcV/sPU8Suho9zLjrUedh6tVulhVOa/oUMLOuQAXDi29PkMDY7SBdXX4/AgkLjN7IBm76tF5OuGPM+SX9875vcy5AoNc8EmGUFtBjtbyOzzAfItXKltOp7JO1ZNicWTW1Op7bGg19wV8VrykVBv5FwpowFDNeCYFxJ+GcI+LnwB3AbYPldtQuVfgXhCaGRqv4Ce3LbcqYDlSqldjnO8cKeuxk/WQZjEpjaRFPaLFhfyIi7h0JqOx69Hr7WuHzF9q12i5FsvrRRb4r2aKXKDZfja/NOJPw4Y3eNIgfa171lNtck5g728zOcPbX+tLSTXV9UGry11/5wVMFnCecZUcjFdaFBsLcPYsYDM01ps034XvwsYEibuvWaEt5bwui5XYOyQ4OO8ut3X10ui7okI4p5Mi41K5o0qTuSA+AyPmbccBS7Ult7BcTrjFzyarKrfsRw+XFiGtKxTBelOeWTwi683VqijfwisG6IOqXSd6PKjPeFY6u3pKerW258bRIyJ2xtt/SYMf2F6U4AfArYax+2OkE1E/nGD9Alz2vGOcJFjseu01Jhdl81g/DG5YVf0AB+2RRg== +sidebar_class_name: "get api-method" +info_path: ../src/api/generated/solve/swap-by-blanc +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + + + + + + +Get a price estimation quote + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/03-Solve/get-route-v-2.api.mdx b/docs/docs/03-Solve/get-route-v-2.api.mdx new file mode 100644 index 0000000..4050b90 --- /dev/null +++ b/docs/docs/03-Solve/get-route-v-2.api.mdx @@ -0,0 +1,71 @@ +--- +id: solve-get-route-v2 +title: "Get Route V2" +description: "Get a route for execution with additional parameters" +sidebar_label: "Get Route V2" +hide_title: true +hide_table_of_contents: true +api: eJztWG1vGjkQ/iuWdSclvYUsGwiBb4SQHrovVZJWJ0U5atYDuN21N34hcIj/fpr1Znmnbar70Lvybe3x+JnH48czLKjKQDMrlOxz2qZjsLfKWfgQ0YByMLEWGU7SNn0LljCicZaMlCYwg9jhHHkWdkIY5wK/WEIyplkKFrShAV37aD8sqEBXTw70nAZUshRom7JUOWkHQu7seT8B4meJGhGrPoM0xCpiIEmIkIRDLFKWEKlsHgMNqIknkDLaXmy56pRumCS9224Uen+EGcJKR8ZqIcfkRCpiYgHSipGIS/enNKB2niFmb5jHZy1o3OGvh7DSevztFxpQmLE0S9CuFu780Imw+ew9IvDI6DKgGp6c0MBp22oHX3KzDPbTmYd1iM0iZs41mJLKI7RFIRnOLZCenYAGl5ZLQcaKA/f0TWDms+BjOPtIMg0jMTvOVTh7YJVRp3KDnC3q4XKTtnB2cVVrNurNeu+yFbbq3Xr9mrUuh61GvQccOt16qxE1azy8WWOz46EdZ/IbPB8nWDn7dQwP3fz/RXA3jBjrnLeGUXR+07u8DjshNLr1m6gJnetWeHnebTYuunF0kGCTiCxjY9jL78sksSoBzWQMqAQZ6BikxfETqI6rAQmrjVynwmrj19ONAyhYky4dgqYBHSmdMkvbdJQotnURRywx6+GF1cbBtGB6DHbAndfTQWr250duRl7Mcox2AoWyGmA6nmBEqUgSYSBWkpt98IW0MN7EL6S9qB/HH4Xh8hENTKakAYMOozDczctbD8fFMRgzckkyJ2OQ+FYApwGNlbQgLa5jWZaIOA/m7JPBxYuD2X637i/WgN6KyLdfEQ6WicSsslwNP0GMd24V3QN9csrCQCCk4hnx9zIVcrAx4GlHIp9ZNohZkgw4swzdMSGH6nkgZOYsfQxopvFRtMKzU+6wE8x7KZ4cEMH9OwG6PMt8zZ77ubolT4NadF5vXDQv8bzWkP6QD9cW2z9kDEWC/FcEeivNd8L6HWZlBGiGVmX+4uJvQP9mG/r5JfBa87yVa9HG9drB0cdhsrF7seIQivWNqtUqXS5XBOSqdVuI24eILpc4W98ncFeME1QSMPb1etbTWmnyoqY+A75OuABX7qqNH949LZcySTQwzoYJkNyKpGCMfyUPUySkcaORyK8TUc4i2azI+TXe8jhKtmr7tI45O1Fa/A2cVEhfTlkiOOm865PPMP9J4DqBjX3p1pd4dVDlQE9BewQ/eVvxhs8I2Ikq2lAvNxPapmfT6CwvEfDxhthpYed5L9nJxB8w7zi0enjEsuZl+g5Z83GtG5W1E8sHaeDruAkwnhdSRSH3Z6Xzrl/xBlvvmE93T7cvu4j5PEjEFAZv8riEHKl8oyK+u2eWkeGcXCVMxnv9OQO8tCB3XvOmoI03qVXDalgZgmUoppkyNmV5ZhRgsZb0tdpuz75YZddr2/eCMAsze5YlTEhE4XSCzv35PNApbuxP6DGgE2Usji4WQ2bgvU6WSxz2xTIeGxcGc2lVnB7EfHJb5O0pecU/AXuho1ht/uMwZYlDu7wbeTW2Q331ERBrffq/hMF3nl+E4AvkV2L4npbsCLK1FvA7gL2y1zrG2L4mb4XwET+0QIi5JgUv4oKJ7z104hiydcJ3ZB+9lFL4tndPl8t/ANxtndI= +sidebar_class_name: "get api-method" +info_path: ../src/api/generated/solve/swap-by-blanc +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + + + + + + +Get a route for execution with additional parameters + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/03-Solve/get-route.api.mdx b/docs/docs/03-Solve/get-route.api.mdx new file mode 100644 index 0000000..c1c2a4a --- /dev/null +++ b/docs/docs/03-Solve/get-route.api.mdx @@ -0,0 +1,71 @@ +--- +id: solve-get-route +title: "Get Route" +description: "Get a route for execution" +sidebar_label: "Get Route" +hide_title: true +hide_table_of_contents: true +api: eJztV99v2zYQ/lcIYg9tJzeyY9eR3xTH6YJhQJGkwwDDS2npbLORSIU/UnuG/vfhSEV2IttNg+1hXf1m8nj87uN3d7o1lQUoZrgUFykd0DmYS2kN0ICmoBPFC9yiA/oeDGFE4R6ZSUVgCYl1ewEtmGI5GFCaDsZrytH+zoJa0YAKlgMdUJZLK8wNFw3H1wsgfpfIGTHyFoQmRhINWUa4ICkkPGcZEdKw6j6dLCBndLB+4iqu3TBBRpfDTuj9EaYJqx1po7iYk1dCEp1wEIbPeFK7f00DalYFYvaGLj5jQOENf47DVjT5+ScaUFiyvMjQrh02fuiEG7d7jQg8MloGVMGd5QpSOjDKwtfclMFuOl1Y+9isYk5TBbqm8gBtnZBMVwbIyCxAgc3royASmULq6VvAknzhZkE+hctPpFAw48vDXIXLMWvN4tY5crbuhuVj2sLlu9N2v9ftd0cnURh1h93uGYtOplGvO4IU4mE36nX67TQ832Iz9tAOM/kNnvcRnHNxU2lWWrOT5pwLniNbO8SrIAF+D9+tVqPoG6W6j8SGVqd29f+S6jDsMBYfR9NO5/h8dHIWxiH0ht3zTh/isyg8OR72e++GSYeWE3SkCyk0aKSmE4ZNhlz1JtomCWg9s1m2InMQWOIhpQFNpDAgDJ5jRZHxxAnp6LPGw+u9vF9t+0sUoLeqGTii625AUjCMZ3pDt5x+hgQff0PCmCYsczZzpukkoIXCLmS4j8tvNjNGKbbChBn9/htxNqgXfzNgp9BwZ0EksLmb4REaUG4g3+VR1L4aPe0QeiNpQO9ZZl2bZIY1YzDyuxGvD/Q/WcDc2zSQ/wLLmnJ8e2f1fIbfPKX3+ATSdv84omW5QTJkWeYWUOINCCNteO6SaM40edDWPhFyYWAOavvadg8j377QJf5lVR9oWeJed1eFOGWpuxG0eXlBGCklFXkoR16wz0t9wJPNhPHLzbeyORNEAUvZNAPirEgOWrM57HizzbNwoe1sxp3miLSmsKbq1I+eycVRs9VuAvgomDULqfhfkJIWuRD3LOMpiT9ckFtY/SBwm8DeLrldCMwiLAWg7kF5BD942/BWBjQHs5DV+OUrz4IO6JGqJjENiVXcrNx0FRf8V1jFFk3GE/woeNi+Qsp8UNtG67obukVshxjgAljqakr1nfZHK/5w0fIGTyq917rneiZVzgzRtzcZv4ebNy4oLmau3z0Ed/WFFWS6IqcZE8lOf1ZDWlsQtMeWCkp7k/bb8G3YmoJhWMYLqU3OnCwqsHMwZOecut7o6uDIWlFiYGmOioxxgfdYlaEHT/+YevonAV1IbXBhvZ4yDR9VVpa47D908U1SrlElKR3MWKbhAKZXl5UiX5MXDL47UWMZejxgVx2bum/yF2PbN0YeALE1lv4zGJ43Yx1A1Jjj/iVu/NjyVWqeYpjgH8URhMvm4CEtUVX+YJwkUGyfalRL9FJXkPeja1qWfwOX+fl8 +sidebar_class_name: "get api-method" +info_path: ../src/api/generated/solve/swap-by-blanc +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; + + + + + + + + + + +Get a route for execution + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/03-Solve/index.md b/docs/docs/03-Solve/index.md index f22c895..458f314 100644 --- a/docs/docs/03-Solve/index.md +++ b/docs/docs/03-Solve/index.md @@ -9,7 +9,7 @@ Sprinter Solve enables the efficient execution of intent-based Swaps through its - **Best Price:** Finds optimal routes and prices with MEV protection and low slippage. - **Fast Integration:** Dedicated API that can be integrated in hours. -- **Cross-chain Liquidity:** Leverages Sprinter Stash for real-time liquidity allocation. +- **Crosschain Liquidity:** Leverages Sprinter Stash for real-time liquidity allocation. - **Zero Collateral:** Solvers execute transactions without upfront capital. - **Support:** 24/7 support with flexible SLAs. @@ -19,15 +19,15 @@ Sprinter Solve enables the efficient execution of intent-based Swaps through its dApps and wallets can easily interface with the Solve API to: -- Enable seamless swaps and cross-chain execution for users. +- Enable seamless swaps and crosschain execution for users. - Improve transaction reliability and reduce slippage. - Integrate directly with the Solver API for superior UX. ### For Intent-Based Protocols -Sprinter can seamlessly integrate our Solver into intent-based protocols to: +Seamlessly integrate our solver into intent-based protocols for: -- Best-In-class intent execution for your protocol across swaps, cross-chain and complex Intents +- Best-In-class intent execution for your protocol across swaps, crosschain and complex Intents - Improve fulfillment rates across chains. - Fast Solver onboarding via dedicated protocol integration or ERC-7683 compliant interface - Day 1 support for new protocol launches diff --git a/docs/docs/06-fees.md b/docs/docs/06-fees.md deleted file mode 100644 index 64c174d..0000000 --- a/docs/docs/06-fees.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: sprnt-fees -title: Fees -sidebar_position: 6 ---- - -# Protocol Fees - -## Sprinter Stash - -Sprinter Stash handles cross-chain liquidity fills. Revenue is generated from the spread between source and destination values. - -### Revenue Components - -- **Fill Revenue:** User deposit on source - amount bridged to destination. -- **Borrow Costs:** Cost of liquidity borrowing and cross-chain repayment. -- **Solver Costs:** Gas fees and execution costs fronted by solvers. - -### Profit Calculation - -``` -Fill Profit = Fill Revenue - Borrow Costs - Solver Costs -``` - -### Monthly Distribution - -1. Withdraw raw profits from liquidity pools. -2. Deduct solver gas costs. -3. Distribute monthly fill profits to: - -| Actor | Description | Fill Profit % | -| -------- | ------------------------------------- | ------------- | -| Solvers | For executing fills | 50% | -| LPs | For providing liquidity | 50% | -| Treasury | Protocol growth & sustainability fund | TBD | - -➡️ _Initial fee split is reviewed monthly by governance._ - -## Solving API Revenue Share - -When a fixed user fee is applied through Sprinter API, revenue is shared with partners based on usage volume. - -### Fee Discount Tiers - -| Monthly Volume (USD) | Sprinter Fee (X%) | Discount | -| -------------------- | ----------------- | -------- | -| $0 - $1M | X \* 0.20 | 0% | -| $1M - $10M | X \* 0.15 | 25% | -| $10M - $50M | X \* 0.10 | 50% | -| $50M - $100M | X \* 0.075 | 62.5% | -| Over $100M | X \* 0.05 | 75% | - -### Example - -``` -User Fee = 0.875% -Monthly Volume = $150M -Sprinter Fee = 0.875% * 0.05 = 0.04375% (4.375 bps) -``` diff --git a/docs/docs/08-partnerships.md b/docs/docs/08-partnerships.md index 5e61208..66ca26a 100644 --- a/docs/docs/08-partnerships.md +++ b/docs/docs/08-partnerships.md @@ -10,8 +10,7 @@ Sprinter is currently operating in private beta and selectively partnering with ## Who We're Looking to Partner With -- **Cross-Chain DEXs & Intent-Based Protocols** -- **dApps & Wallets** seeking seamless cross-chain execution +- **CrossChain DEXs & Intent-Based Protocolschain execution - **Liquidity Providers** interested in sustainable, high-yield opportunities ## Get in Touch @@ -19,4 +18,4 @@ Sprinter is currently operating in private beta and selectively partnering with - **Email:** [hello@sprinter.tech](mailto:hello@sprinter.tech) - **Telegram:** [@sprinter_tech](https://t.me/sprinter_tech) -Let’s build the future of cross-chain liquidity together. +Let’s build the future of crosschain liquidity together. diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 01bd778..827f4a4 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -6,6 +6,13 @@ /* You can override the default Infima variables here. */ +@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap'); + + + + :root { --ifm-color-primary: #2e8555; --ifm-color-primary-dark: #29784c; @@ -49,6 +56,26 @@ } /* custom.css */ +html, body { + font-family: 'Poppins', sans-serif; + font-weight: 300; + + h1 { + font-weight: 600; + } + + h2 { + font-weight: 500; + } + + h3 { + font-weight: 500; + } + p { + font-weight: 300; + } + +} /* Container for the Swagger UI to adjust width and margins */ .swagger-container { From 46548cb58802167df2b6960c8b2d1fe08001746e Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 25 Apr 2025 11:39:24 +0100 Subject: [PATCH 15/38] run lint --- docs/docs/02-Stash/01-utilizing-stash.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index fe355ab..adf9f6d 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -25,7 +25,7 @@ There are two main ways to utilize Sprinter Stash. Either as a Liquidity Provide ### Supported Networks -- Arbitrum +- Arbitrum - Optimism - Base - Ethereum Mainnet (coming soon) From 07ca7d4a1851bc3f7d8b96093abcf95ceac49c97 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 25 Apr 2025 13:01:39 +0100 Subject: [PATCH 16/38] ran prettier --- docs/docs/02-Stash/01-utilizing-stash.md | 6 +- ...w-cost-for-a-liquidity-transaction.api.mdx | 3 +- ...ransaction-based-on-the-input-data.api.mdx | 11 +- docs/docs/03-Solve/01-use-solve.md | 4 - docs/docs/03-Solve/get-quote.api.mdx | 169 ++++++++++--- docs/docs/03-Solve/get-route-v-2.api.mdx | 223 +++++++++++++++--- docs/docs/03-Solve/get-route.api.mdx | 213 ++++++++++++++--- docs/docs/08-partnerships.md | 2 +- .../src/api/generated/solve/get-quote.api.mdx | 164 +++++++++++-- .../api/generated/solve/get-route-v-2.api.mdx | 219 +++++++++++++++-- .../src/api/generated/solve/get-route.api.mdx | 210 +++++++++++++++-- .../generated/solve/swap-by-blanc.info.mdx | 44 +--- docs/src/css/custom.css | 19 +- packages/react/CHANGELOG.md | 15 +- packages/react/README.md | 1 - packages/sdk/CHANGELOG.md | 22 +- packages/sdk/README.md | 1 - 17 files changed, 1057 insertions(+), 269 deletions(-) diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index adf9f6d..f784a7d 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -25,7 +25,7 @@ There are two main ways to utilize Sprinter Stash. Either as a Liquidity Provide ### Supported Networks -- Arbitrum +- Arbitrum - Optimism - Base - Ethereum Mainnet (coming soon) @@ -37,8 +37,6 @@ There are two main ways to utilize Sprinter Stash. Either as a Liquidity Provide Want to request support for a new chain or asset? [Submit a request](https://forms.gle/an5vZrmyDkyYR8Ni7). - - ## Fees Sprinter Stash handles crosschain liquidity fills. Revenue is generated from the spread between source and destination values. @@ -67,4 +65,4 @@ Fill Profit = Fill Revenue - Borrow Costs - Solver Costs | LPs | For providing liquidity | 50% | | Treasury | Protocol growth & sustainability fund | TBD | -➡️ _Initial fee split is reviewed monthly by governance._ \ No newline at end of file +➡️ _Initial fee split is reviewed monthly by governance._ diff --git a/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx index 35852c5..4fe17a6 100644 --- a/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx +++ b/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -77,8 +77,7 @@ Get the borrow cost for a liquidity transaction content: { "application/json": { schema: { - description: - "Borrow cost structure with a big.Int represented as string", + description: "Borrow cost structure with a big.Int represented as string", properties: { borrowCost: { type: "string" }, liquidityPool: { type: "string" }, diff --git a/docs/docs/02-Stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/docs/02-Stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx index d8c973d..c721745 100644 --- a/docs/docs/02-Stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx +++ b/docs/docs/02-Stash/get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -21,9 +21,7 @@ import Heading from "@theme/Heading"; ``` - ## Solve Fees When a fixed user fee is applied through Sprinter API, revenue is shared with partners based on usage volume. @@ -47,5 +45,3 @@ User Fee = 0.875% Monthly Volume = $150M Sprinter Fee = 0.875% * 0.05 = 0.04375% (4.375 bps) ``` - - diff --git a/docs/docs/03-Solve/get-quote.api.mdx b/docs/docs/03-Solve/get-quote.api.mdx index 7738c54..317ef33 100644 --- a/docs/docs/03-Solve/get-quote.api.mdx +++ b/docs/docs/03-Solve/get-quote.api.mdx @@ -19,22 +19,9 @@ import OperationTabs from "@theme/OperationTabs"; import TabItem from "@theme/TabItem"; import Heading from "@theme/Heading"; - - - - - - - + + Get a price estimation quote @@ -43,29 +30,143 @@ Get a price estimation quote as={"h2"} className={"openapi-tabs__heading"} children={"Request"} -> - +> - - + parameters={[ + { + in: "query", + name: "amount_in", + description: "The amount of tokens to sell in decimal notation", + schema: { + description: "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + required: true, + example: "1000000000000000000", + }, + { + in: "query", + name: "token_in", + description: "The token address to sell", + schema: { + description: "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + }, + { + in: "query", + name: "token_out", + description: "The token address to buy", + schema: { + description: "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + }, + ]} +> - - - + - - - - - \ No newline at end of file + responses={{ + "200": { + description: "Quote successfully created", + content: { + "application/json": { + schema: { + description: "Successful quote with the expected output amount", + type: "object", + properties: { + amount_out: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + }, + required: ["amount_out"], + title: "QuoteResponse", + }, + }, + }, + }, + "400": { + description: "Bad request", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "401": { + description: "Unauthorized - Invalid API key", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "500": { + description: "Internal server error", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + }} +> diff --git a/docs/docs/03-Solve/get-route-v-2.api.mdx b/docs/docs/03-Solve/get-route-v-2.api.mdx index 4050b90..85626fb 100644 --- a/docs/docs/03-Solve/get-route-v-2.api.mdx +++ b/docs/docs/03-Solve/get-route-v-2.api.mdx @@ -19,22 +19,9 @@ import OperationTabs from "@theme/OperationTabs"; import TabItem from "@theme/TabItem"; import Heading from "@theme/Heading"; - - - - - - - + + Get a route for execution with additional parameters @@ -43,29 +30,197 @@ Get a route for execution with additional parameters as={"h2"} className={"openapi-tabs__heading"} children={"Request"} -> - +> - - + parameters={[ + { + in: "query", + name: "amount_in", + description: "The amount of tokens to sell in decimal notation", + schema: { + description: "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + required: true, + example: "1000000000000000000", + }, + { + in: "query", + name: "token_in", + description: "The token address to sell", + schema: { + description: "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + }, + { + in: "query", + name: "token_out", + description: "The token address to buy", + schema: { + description: "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + }, + { + in: "query", + name: "slippage", + description: "The slippage tolerance in percentage (e.g., 0.5 for 0.5%)", + schema: { type: "number", format: "float" }, + required: false, + example: 0.5, + }, + { + in: "query", + name: "target_duration_ms", + description: "The target duration for the route search in milliseconds", + schema: { type: "integer", format: "int64" }, + required: false, + example: 200, + }, + ]} +> - - - + - - - - - \ No newline at end of file + responses={{ + "200": { + description: "Route successfully generated", + content: { + "application/json": { + schema: { + description: "Successfully created route with additional details", + type: "object", + required: [ + "quote_id", + "amount_out", + "min_amount_out", + "target", + "swap_call_data", + "rainbow_input", + ], + properties: { + quote_id: { + description: "Unique identifier for the quote", + type: "string", + example: "q_12345678", + }, + amount_out: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + min_amount_out: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + target: { + description: "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + swap_call_data: { + description: "Hex encoded calldata for the swap", + type: "string", + pattern: "^0x[a-fA-F0-9]*$", + example: "0x38ed1739", + }, + rainbow_input: { + description: "Input data for the rainbow swap", + type: "string", + example: "0x...", + }, + }, + title: "RouteResponseV2", + }, + }, + }, + }, + "400": { + description: "Bad request", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "401": { + description: "Unauthorized - Invalid API key", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "500": { + description: "Internal server error", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + }} +> diff --git a/docs/docs/03-Solve/get-route.api.mdx b/docs/docs/03-Solve/get-route.api.mdx index c1c2a4a..c59f286 100644 --- a/docs/docs/03-Solve/get-route.api.mdx +++ b/docs/docs/03-Solve/get-route.api.mdx @@ -19,22 +19,9 @@ import OperationTabs from "@theme/OperationTabs"; import TabItem from "@theme/TabItem"; import Heading from "@theme/Heading"; - - - - - - - + + Get a route for execution @@ -43,29 +30,187 @@ Get a route for execution as={"h2"} className={"openapi-tabs__heading"} children={"Request"} -> - +> - - + parameters={[ + { + in: "query", + name: "amount_in", + description: "The amount of tokens to sell in decimal notation", + schema: { + description: "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + required: true, + example: "1000000000000000000", + }, + { + in: "query", + name: "token_in", + description: "The token address to sell", + schema: { + description: "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + }, + { + in: "query", + name: "min_amount_out", + description: "The minimum amount of tokens to receive", + schema: { + description: "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + required: true, + example: "990000000000000000", + }, + { + in: "query", + name: "token_out", + description: "The token address to buy", + schema: { + description: "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + }, + ]} +> - - - + - - - - - \ No newline at end of file + responses={{ + "200": { + description: "Route successfully generated", + content: { + "application/json": { + schema: { + description: "Successfully created route with execution details", + type: "object", + required: ["calls", "gas"], + properties: { + calls: { + description: "Array of EVM calls to execute in sequence", + type: "array", + items: { + description: "An EVM call for execution", + type: "object", + required: ["to", "value", "data"], + properties: { + to: { + description: "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + value: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + data: { + description: "Hex encoded calldata", + type: "string", + pattern: "^0x[a-fA-F0-9]*$", + example: "0x38ed1739", + }, + }, + title: "Call", + }, + }, + gas: { + description: "Estimated gas required for execution", + type: "integer", + example: 150000, + }, + }, + title: "RouteResponse", + }, + }, + }, + }, + "400": { + description: "Bad request", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "401": { + description: "Unauthorized - Invalid API key", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "500": { + description: "Internal server error", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + }} +> diff --git a/docs/docs/08-partnerships.md b/docs/docs/08-partnerships.md index 66ca26a..a32038a 100644 --- a/docs/docs/08-partnerships.md +++ b/docs/docs/08-partnerships.md @@ -10,7 +10,7 @@ Sprinter is currently operating in private beta and selectively partnering with ## Who We're Looking to Partner With -- **CrossChain DEXs & Intent-Based Protocolschain execution +- \*\*CrossChain DEXs & Intent-Based Protocolschain execution - **Liquidity Providers** interested in sustainable, high-yield opportunities ## Get in Touch diff --git a/docs/src/api/generated/solve/get-quote.api.mdx b/docs/src/api/generated/solve/get-quote.api.mdx index dc726e9..48591d5 100644 --- a/docs/src/api/generated/solve/get-quote.api.mdx +++ b/docs/src/api/generated/solve/get-quote.api.mdx @@ -23,18 +23,13 @@ import Heading from "@theme/Heading"; as={"h1"} className={"openapi__heading"} children={"getQuote"} -> - +> - - - - +> Get a price estimation quote @@ -43,29 +38,146 @@ Get a price estimation quote as={"h2"} className={"openapi-tabs__heading"} children={"Request"} -> - +> - - + parameters={[ + { + in: "query", + name: "amount_in", + description: "The amount of tokens to sell in decimal notation", + schema: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + required: true, + example: "1000000000000000000", + }, + { + in: "query", + name: "token_in", + description: "The token address to sell", + schema: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + }, + { + in: "query", + name: "token_out", + description: "The token address to buy", + schema: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + }, + ]} +> - - - + - - - - - \ No newline at end of file + responses={{ + "200": { + description: "Quote successfully created", + content: { + "application/json": { + schema: { + description: "Successful quote with the expected output amount", + type: "object", + properties: { + amount_out: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + }, + required: ["amount_out"], + title: "QuoteResponse", + }, + }, + }, + }, + "400": { + description: "Bad request", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "401": { + description: "Unauthorized - Invalid API key", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "500": { + description: "Internal server error", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + }} +> diff --git a/docs/src/api/generated/solve/get-route-v-2.api.mdx b/docs/src/api/generated/solve/get-route-v-2.api.mdx index f8e7218..48c487c 100644 --- a/docs/src/api/generated/solve/get-route-v-2.api.mdx +++ b/docs/src/api/generated/solve/get-route-v-2.api.mdx @@ -23,18 +23,13 @@ import Heading from "@theme/Heading"; as={"h1"} className={"openapi__heading"} children={"getRouteV2"} -> - +> - - - - +> Get a route for execution with additional parameters @@ -43,29 +38,201 @@ Get a route for execution with additional parameters as={"h2"} className={"openapi-tabs__heading"} children={"Request"} -> - +> - - + parameters={[ + { + in: "query", + name: "amount_in", + description: "The amount of tokens to sell in decimal notation", + schema: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + required: true, + example: "1000000000000000000", + }, + { + in: "query", + name: "token_in", + description: "The token address to sell", + schema: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + }, + { + in: "query", + name: "token_out", + description: "The token address to buy", + schema: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + }, + { + in: "query", + name: "slippage", + description: "The slippage tolerance in percentage (e.g., 0.5 for 0.5%)", + schema: { type: "number", format: "float" }, + required: false, + example: 0.5, + }, + { + in: "query", + name: "target_duration_ms", + description: "The target duration for the route search in milliseconds", + schema: { type: "integer", format: "int64" }, + required: false, + example: 200, + }, + ]} +> - - - + - - - - - \ No newline at end of file + responses={{ + "200": { + description: "Route successfully generated", + content: { + "application/json": { + schema: { + description: "Successfully created route with additional details", + type: "object", + required: [ + "quote_id", + "amount_out", + "min_amount_out", + "target", + "swap_call_data", + "rainbow_input", + ], + properties: { + quote_id: { + description: "Unique identifier for the quote", + type: "string", + example: "q_12345678", + }, + amount_out: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + min_amount_out: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + target: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + swap_call_data: { + description: "Hex encoded calldata for the swap", + type: "string", + pattern: "^0x[a-fA-F0-9]*$", + example: "0x38ed1739", + }, + rainbow_input: { + description: "Input data for the rainbow swap", + type: "string", + example: "0x...", + }, + }, + title: "RouteResponseV2", + }, + }, + }, + }, + "400": { + description: "Bad request", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "401": { + description: "Unauthorized - Invalid API key", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "500": { + description: "Internal server error", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + }} +> diff --git a/docs/src/api/generated/solve/get-route.api.mdx b/docs/src/api/generated/solve/get-route.api.mdx index 90fd16d..9e12dcd 100644 --- a/docs/src/api/generated/solve/get-route.api.mdx +++ b/docs/src/api/generated/solve/get-route.api.mdx @@ -23,18 +23,13 @@ import Heading from "@theme/Heading"; as={"h1"} className={"openapi__heading"} children={"getRoute"} -> - +> - - - - +> Get a route for execution @@ -43,29 +38,192 @@ Get a route for execution as={"h2"} className={"openapi-tabs__heading"} children={"Request"} -> - +> - - + parameters={[ + { + in: "query", + name: "amount_in", + description: "The amount of tokens to sell in decimal notation", + schema: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + required: true, + example: "1000000000000000000", + }, + { + in: "query", + name: "token_in", + description: "The token address to sell", + schema: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + }, + { + in: "query", + name: "min_amount_out", + description: "The minimum amount of tokens to receive", + schema: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + required: true, + example: "990000000000000000", + }, + { + in: "query", + name: "token_out", + description: "The token address to buy", + schema: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + required: true, + example: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + }, + ]} +> - - - + - - - - - \ No newline at end of file + responses={{ + "200": { + description: "Route successfully generated", + content: { + "application/json": { + schema: { + description: "Successfully created route with execution details", + type: "object", + required: ["calls", "gas"], + properties: { + calls: { + description: "Array of EVM calls to execute in sequence", + type: "array", + items: { + description: "An EVM call for execution", + type: "object", + required: ["to", "value", "data"], + properties: { + to: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix", + type: "string", + pattern: "^0x[a-fA-F0-9]{40}$", + example: "0x6B175474E89094C44Da98b954EedeAC495271d0F", + title: "Address", + }, + value: { + description: + "Amount of an ERC20 token as a decimal string (no scientific notation)", + type: "string", + pattern: "^[0-9]+$", + example: "1000000000000000000", + title: "TokenAmount", + }, + data: { + description: "Hex encoded calldata", + type: "string", + pattern: "^0x[a-fA-F0-9]*$", + example: "0x38ed1739", + }, + }, + title: "Call", + }, + }, + gas: { + description: "Estimated gas required for execution", + type: "integer", + example: 150000, + }, + }, + title: "RouteResponse", + }, + }, + }, + }, + "400": { + description: "Bad request", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "401": { + description: "Unauthorized - Invalid API key", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + "500": { + description: "Internal server error", + content: { + "application/json": { + schema: { + description: "Error response with details", + type: "object", + required: ["error"], + properties: { + error: { + description: "Human readable error message", + type: "string", + example: "insufficient output amount", + }, + }, + title: "Error", + }, + }, + }, + }, + }} +> diff --git a/docs/src/api/generated/solve/swap-by-blanc.info.mdx b/docs/src/api/generated/solve/swap-by-blanc.info.mdx index 6436c5c..32d46f0 100644 --- a/docs/src/api/generated/solve/swap-by-blanc.info.mdx +++ b/docs/src/api/generated/solve/swap-by-blanc.info.mdx @@ -17,55 +17,36 @@ import Export from "@theme/ApiExplorer/Export"; - +> - - - +> API used by Blanc Swap -
+
- - - - + > + + API key with format sk_live_* -
- - - + + + + + +
- Security Scheme Type: - - apiKey -
- Header parameter name: - - X-API-Key - Security Scheme Type:apiKey
Header parameter name:X-API-Key
@@ -73,4 +54,3 @@ API used by Blanc Swap
- \ No newline at end of file diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 827f4a4..3323323 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -6,12 +6,9 @@ /* You can override the default Infima variables here. */ -@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500;700&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap'); - - - +@import url("https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500;700&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap"); :root { --ifm-color-primary: #2e8555; @@ -56,25 +53,25 @@ } /* custom.css */ -html, body { - font-family: 'Poppins', sans-serif; +html, +body { + font-family: "Poppins", sans-serif; font-weight: 300; h1 { font-weight: 600; } - + h2 { font-weight: 500; } - + h3 { font-weight: 500; } p { font-weight: 300; } - } /* Container for the Swagger UI to adjust width and margins */ diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index f7ea7f9..fb2022e 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -2,36 +2,31 @@ ## [1.2.3](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-react-v1.2.2...sprinter-react-v1.2.3) (2025-01-22) - ### Bug Fixes -* release ([20f30b0](https://github.com/sprintertech/sprinter-sdk/commit/20f30b0ed2a6b8410650beb6825346e79b38eb8b)) +- release ([20f30b0](https://github.com/sprintertech/sprinter-sdk/commit/20f30b0ed2a6b8410650beb6825346e79b38eb8b)) ## [1.2.2](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-react-v1.2.1...sprinter-react-v1.2.2) (2025-01-21) - ### Bug Fixes -* release `1.3.0` v2 ([71959d1](https://github.com/sprintertech/sprinter-sdk/commit/71959d1d8b5583fb27a36826415d5f7fe8ab9581)) +- release `1.3.0` v2 ([71959d1](https://github.com/sprintertech/sprinter-sdk/commit/71959d1d8b5583fb27a36826415d5f7fe8ab9581)) ## [1.2.1](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-react-v1.2.0...sprinter-react-v1.2.1) (2025-01-21) - ### Bug Fixes -* release `1.3.0` ([aaa6938](https://github.com/sprintertech/sprinter-sdk/commit/aaa69388e4910f92d53fe14ea08785cd63ef4176)) +- release `1.3.0` ([aaa6938](https://github.com/sprintertech/sprinter-sdk/commit/aaa69388e4910f92d53fe14ea08785cd63ef4176)) ## [1.2.0](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-react-v1.1.2...sprinter-react-v1.2.0) (2025-01-21) - ### Features -* Add sweep function ([#115](https://github.com/sprintertech/sprinter-sdk/issues/115)) ([efaaa2b](https://github.com/sprintertech/sprinter-sdk/commit/efaaa2b3d8674e46b264caddcd373218c3f552c1)), closes [#110](https://github.com/sprintertech/sprinter-sdk/issues/110) - +- Add sweep function ([#115](https://github.com/sprintertech/sprinter-sdk/issues/115)) ([efaaa2b](https://github.com/sprintertech/sprinter-sdk/commit/efaaa2b3d8674e46b264caddcd373218c3f552c1)), closes [#110](https://github.com/sprintertech/sprinter-sdk/issues/110) ### Bug Fixes -* `package.json` - repository ([#127](https://github.com/sprintertech/sprinter-sdk/issues/127)) ([21c7007](https://github.com/sprintertech/sprinter-sdk/commit/21c70077d2e5ef83730f730990e849f8d54ec8c0)) +- `package.json` - repository ([#127](https://github.com/sprintertech/sprinter-sdk/issues/127)) ([21c7007](https://github.com/sprintertech/sprinter-sdk/commit/21c70077d2e5ef83730f730990e849f8d54ec8c0)) ## [1.2.0](https://github.com/ChainSafe/sprinter-ts/compare/sprinter-react-v1.1.2...sprinter-react-v1.2.0) (2025-01-13) diff --git a/packages/react/README.md b/packages/react/README.md index a5e2638..358a4fe 100644 --- a/packages/react/README.md +++ b/packages/react/README.md @@ -1,4 +1,3 @@ - # Sprinter React SDK The Sprinter React SDK is a React wrapper for the [Sprinter SDK](https://github.com/ChainSafe/sprinter-sdk), enabling easy interaction with blockchain networks through React components and hooks. It provides context management and custom hooks for retrieving balances, tokens, supported chains, and solutions for asset transfers. diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index 90472aa..bcc4a08 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -2,45 +2,39 @@ ## [1.2.4](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-sdk-v1.2.3...sprinter-sdk-v1.2.4) (2025-01-29) - ### Bug Fixes -* relay URL error ([#140](https://github.com/sprintertech/sprinter-sdk/issues/140)) ([4ce0b49](https://github.com/sprintertech/sprinter-sdk/commit/4ce0b499a1c44ddf7fc20c302d005b4040fdfb35)) +- relay URL error ([#140](https://github.com/sprintertech/sprinter-sdk/issues/140)) ([4ce0b49](https://github.com/sprintertech/sprinter-sdk/commit/4ce0b499a1c44ddf7fc20c302d005b4040fdfb35)) ## [1.2.3](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-sdk-v1.2.2...sprinter-sdk-v1.2.3) (2025-01-22) - ### Bug Fixes -* release ([20f30b0](https://github.com/sprintertech/sprinter-sdk/commit/20f30b0ed2a6b8410650beb6825346e79b38eb8b)) +- release ([20f30b0](https://github.com/sprintertech/sprinter-sdk/commit/20f30b0ed2a6b8410650beb6825346e79b38eb8b)) ## [1.2.2](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-sdk-v1.2.1...sprinter-sdk-v1.2.2) (2025-01-21) - ### Bug Fixes -* release `1.3.0` v2 ([71959d1](https://github.com/sprintertech/sprinter-sdk/commit/71959d1d8b5583fb27a36826415d5f7fe8ab9581)) +- release `1.3.0` v2 ([71959d1](https://github.com/sprintertech/sprinter-sdk/commit/71959d1d8b5583fb27a36826415d5f7fe8ab9581)) ## [1.2.1](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-sdk-v1.2.0...sprinter-sdk-v1.2.1) (2025-01-21) - ### Bug Fixes -* release `1.3.0` ([aaa6938](https://github.com/sprintertech/sprinter-sdk/commit/aaa69388e4910f92d53fe14ea08785cd63ef4176)) +- release `1.3.0` ([aaa6938](https://github.com/sprintertech/sprinter-sdk/commit/aaa69388e4910f92d53fe14ea08785cd63ef4176)) ## [1.2.0](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-sdk-v1.1.2...sprinter-sdk-v1.2.0) (2025-01-21) - ### Features -* Add sweep function ([#115](https://github.com/sprintertech/sprinter-sdk/issues/115)) ([efaaa2b](https://github.com/sprintertech/sprinter-sdk/commit/efaaa2b3d8674e46b264caddcd373218c3f552c1)), closes [#110](https://github.com/sprintertech/sprinter-sdk/issues/110) -* expand bridge transaction history using relay API ([#122](https://github.com/sprintertech/sprinter-sdk/issues/122)) ([06ca1a0](https://github.com/sprintertech/sprinter-sdk/commit/06ca1a0d8b5cb76bc06cd9aeaf58ac81b197cde3)) - +- Add sweep function ([#115](https://github.com/sprintertech/sprinter-sdk/issues/115)) ([efaaa2b](https://github.com/sprintertech/sprinter-sdk/commit/efaaa2b3d8674e46b264caddcd373218c3f552c1)), closes [#110](https://github.com/sprintertech/sprinter-sdk/issues/110) +- expand bridge transaction history using relay API ([#122](https://github.com/sprintertech/sprinter-sdk/issues/122)) ([06ca1a0](https://github.com/sprintertech/sprinter-sdk/commit/06ca1a0d8b5cb76bc06cd9aeaf58ac81b197cde3)) ### Bug Fixes -* `package.json` - repository ([#127](https://github.com/sprintertech/sprinter-sdk/issues/127)) ([21c7007](https://github.com/sprintertech/sprinter-sdk/commit/21c70077d2e5ef83730f730990e849f8d54ec8c0)) -* webpack import meta error ([#114](https://github.com/sprintertech/sprinter-sdk/issues/114)) ([f5f6fcf](https://github.com/sprintertech/sprinter-sdk/commit/f5f6fcfda884cd70aa6ccd94f19b2641741b265b)) +- `package.json` - repository ([#127](https://github.com/sprintertech/sprinter-sdk/issues/127)) ([21c7007](https://github.com/sprintertech/sprinter-sdk/commit/21c70077d2e5ef83730f730990e849f8d54ec8c0)) +- webpack import meta error ([#114](https://github.com/sprintertech/sprinter-sdk/issues/114)) ([f5f6fcf](https://github.com/sprintertech/sprinter-sdk/commit/f5f6fcfda884cd70aa6ccd94f19b2641741b265b)) ## [1.2.0](https://github.com/ChainSafe/sprinter-ts/compare/sprinter-sdk-v1.1.2...sprinter-sdk-v1.2.0) (2025-01-13) diff --git a/packages/sdk/README.md b/packages/sdk/README.md index 0ce450e..ca51a31 100644 --- a/packages/sdk/README.md +++ b/packages/sdk/README.md @@ -1,4 +1,3 @@ - # Sprinter SDK The **Sprinter SDK** is a JavaScript/TypeScript library that simplifies cross-chain operations such as fetching balances and providing solutions for asset transfers across multiple blockchains. From cb5803a15882275106a578d292888c45e818093c Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Wed, 30 Apr 2025 16:04:50 +0100 Subject: [PATCH 17/38] restructure docs api starter kit --- docs/docs/01-introduction/01-introduction.md | 6 +- docs/docs/02-Stash/01-utilizing-stash.md | 112 ++-- ...-cost-for-a-liquidity-transaction.api.mdx} | 13 +- ...ansaction-based-on-the-input-data.api.mdx} | 9 +- docs/docs/02-Stash/index.md | 102 +++- docs/docs/{02-Stash => }/02-stash-pools.md | 4 +- docs/docs/03-Solve/01-use-solve.md | 2 +- docs/docs/03-Solve/02-solve-quick-start.md | 45 ++ docs/docs/03-Solve/get-quote.api.mdx | 2 +- docs/docs/03-Solve/get-route-v-2.api.mdx | 13 +- docs/docs/03-Solve/get-route.api.mdx | 216 ------- docs/docs/05-sprnt.md | 7 +- docs/docs/08-partnerships.md | 4 +- docs/docs/10-glossary.md | 159 +++++ docs/docusaurus.config.ts | 20 +- docs/package.json | 1 + docs/src/css/custom.css | 44 +- yarn.lock | 552 +++++++++++++++++- 18 files changed, 987 insertions(+), 324 deletions(-) rename docs/docs/02-Stash/{get-the-borrow-cost-for-a-liquidity-transaction.api.mdx => 03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx} (85%) rename docs/docs/02-Stash/{get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx => 04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx} (92%) rename docs/docs/{02-Stash => }/02-stash-pools.md (95%) create mode 100644 docs/docs/03-Solve/02-solve-quick-start.md delete mode 100644 docs/docs/03-Solve/get-route.api.mdx create mode 100644 docs/docs/10-glossary.md diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index 14f7fc3..5c27a70 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -20,15 +20,15 @@ Sprinter combines solving-as-a-service infrastructure with credit-based cross-ch ## Sprinter’s Core Products -### Sprinter Stash +### [Sprinter Stash](Stash) A crosschain credit protocol providing liquidity access to solvers and market makers without requiring collateral. Liquidity providers deposit USDC into the protocol, earning returns through solver fees and passive yield strategies. -### Sprinter Solve +### [Sprinter Solve](Solve) A solving-as-a-service platform that offers a request-for-quote (RFQ) based swap API for our partners. It enables dApps, wallets, and protocols to improve execution quality, optimize pricing, and enhance user experience. -### Need to chat to us? +## Need to chat to us? If you have questions about Sprinter, the code, the docs, or have a partnership inquiry, please reach out to us on [Telegram](https://t.me/sprinter_tech/1) or via email at [hello@sprinter.tech](mailto:hello@sprinter.tech). diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index f784a7d..b609db9 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -1,68 +1,94 @@ --- id: use-stash -title: How to use Stash +title: Stash API quick start sidebar_position: 1 --- - :::tip -There are two main ways to utilize Sprinter Stash. Either as a Liquidity Provider or as a Solver. +Request your Stash API key via [Sprinter Stash Request](https://forms.gle/kgpcQK722Ley2gke7) or contacting support@sprinter.tech ::: -## As a Liquidity Provider +## As a Solver -1. Visit [app.sprinter.tech](https://app.sprinter.tech) -2. Connect your wallet (e.g., MetaMask) -3. Deposit USDC and stake LP tokens -4. Monitor rewards, pool stats, unstake or withdraw liquidity +Sprinter Stash enables solvers to **borrow liquidity crosschain on-demand** to execute user intents without needing pre-funded inventory. -## As a Solver +This guide covers: + +1. Recap of the [**Stash Fill Lifecycle**](use-stash#1-stash-fill-lifecycle) +2. Requesting a [**Borrow Cost Estimate**](use-stash#1-request-a-borrow-cost-estimate-optional) +3. Requesting a **Final Borrow Quote and Liquidity Authorization** -1. Request Stash API access via [Sprinter Stash Request Form](https://forms.gle/kgpcQK722Ley2gke7) -2. Review the Stash APIs ([borrow cost](borrow-cost-api), [borrow quote](borrow-quote-api)) or visit the [Stash Swagger](https://api.test.sprinter.buildwithsygma.com/swagger/index.html#/Liquidity/get_liquidity_protocol__protocol__deposit__txHash__request) -3. Query borrow rates -4. Borrow funds and execute swaps -5. Repay liquidity post-transaction +### 1. Stash Fill Lifecycle -### Supported Networks -- Arbitrum -- Optimism -- Base -- Ethereum Mainnet (coming soon) +
-### Supported Assets +```mermaid +flowchart TD + A[Detect User Intent] --> B[2 - Preview an estimated borrowing cost🔗] + B --> C[Receive Borrow Cost Estimate] + C --> D{Is Cost Acceptable?} + D -- Yes --> E[3 - Reserve liquidity and authorize the fill🔗] + D -- No --> F[Abort Fill] + E --> G[Borrow Liquidity from Sprinter Stash] + G --> H[Perform Cross-Chain Swap/Bridge Execution] + H --> I[Repay Borrowed Liquidity + Costs] + I --> J[Fill Complete] -- Stablecoins: USDC, DAI, USDT -- Blue-Chip: WETH, WBTC +click B "borrow-cost-api" "Borrow Cost" +style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold -Want to request support for a new chain or asset? [Submit a request](https://forms.gle/an5vZrmyDkyYR8Ni7). +click E "borrow-quote-api" "Borrow Quote" +style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold -## Fees +``` +
-Sprinter Stash handles crosschain liquidity fills. Revenue is generated from the spread between source and destination values. -### Revenue Components -- **Fill Revenue:** User deposit on source - amount bridged to destination. -- **Borrow Costs:** Cost of liquidity borrowing and crosschain repayment. -- **Solver Costs:** Gas fees and execution costs fronted by solvers. +### 2. Request a Borrow Cost Estimate (Optional) -### Profit Calculation +Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated [borrowing cost](/glossary#46-borrow-cost)) for a potential fill before requesting liquidity. -``` -Fill Profit = Fill Revenue - Borrow Costs - Solver Costs -``` -### Monthly Distribution +```ts title="Fetch Borrow Cost Estimate" +const protocol = "across"; // Example: "across", "uniswapx" +const type = "swap"; // Example: "swap", "bridge" + +const response = await fetch( + `https://api.sprinter.tech/v1/liquidity/protocol/${protocol}/type/${type}/quote`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + "X-API-Key": "", + }, + } +); + +const costEstimate = await response.json(); +console.log("Borrow Cost Estimate:", costEstimate); + ``` + + +### 3. Request a Final Borrow Quote + +If the estimated cost is acceptable, call the [**Borrow Quote API**](borrow-quote-api) to request a [borrow quote](/glossary#47-borrow-quote) to reserve liquidity and authorize the fill. -1. Withdraw raw profits from liquidity pools. -2. Deduct solver gas costs. -3. Distribute monthly fill profits to: +```ts title="Request Final Borrow Quote" +const protocol = "across"; +const txHash = "0xabc123"; // Related transaction hash -| Actor | Description | Fill Profit % | -| -------- | ------------------------------------- | ------------- | -| Solvers | For executing fills | 50% | -| LPs | For providing liquidity | 50% | -| Treasury | Protocol growth & sustainability fund | TBD | +const response = await fetch( + `https://api.sprinter.tech/v1/liquidity/protocol/${protocol}/deposit/${txHash}/request`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + "X-API-Key": "", + }, + } +); -➡️ _Initial fee split is reviewed monthly by governance._ +const borrowQuote = await response.json(); +console.log("Borrow Quote:", borrowQuote); +``` \ No newline at end of file diff --git a/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx similarity index 85% rename from docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx rename to docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx index 4fe17a6..be4aa35 100644 --- a/docs/docs/02-Stash/get-the-borrow-cost-for-a-liquidity-transaction.api.mdx +++ b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -2,7 +2,7 @@ id: borrow-cost-api title: "Get the borrow cost for a liquidity transaction" description: "Get the borrow cost for a liquidity transaction" -sidebar_label: "Get the borrow cost " +sidebar_label: "Borrow Cost API " hide_title: true hide_table_of_contents: true api: eJzNVk2P00AM/Ssjn0CapQjBJTcWIUAggdByqnpwE28ykMxkPc62VZT/jpyPbVrCwu4B0UsnE4/9bL95TgsZxZRdLS54SOAdiZGCzDYwh51JQxRzHdigKd1N4zInByOMPmLan7BQI2NFQhwhWbdn7r5wkJCGEiw4fa5RCrDgsSJ9Or5lumkcUwaJcEMWYlpQhZC0IIdabaOw8zl0nT2PcXWEYwqMRY9Xc8ioDtHJcmzZv8dYPCjyZjCmKJchO6hFGryQF11iXZcuRUWx+h4VWHuPq86eJeF83YjJUNA8YSrx0K+fLuDbX8QX4SLcEpcBs2m/U8NYBx8pasAXz5/r32mQzx/B/j3m07OXM0JE4SaVhsnsnBQGzdblzz54MUw1UyQvlBmMZkzXaqNrYnEDtoFbb0KUhdJYuCPalxDKRQsffEqLb6LLPSqyRebMarmeoziPOUWY+9vYyV/YfqdUtImdhZdLdb7EzIxMMVlDRoJx/hZLl5mhz4FN5WJ0Pjez6/OA3pwWNKNtky/Wg5gD/7kWg4PJ/DepvlpK9YMXYo+licS3xGbw8F9n0lkQzFWt4NPUdrUcLtYO2avjBD7XxD1qk5MkqzuKrCbZWrXTqluNWrNqB13pVlP/C4ymakpxdUnmKB+arwXaC/nogh+08wcdIDnDYeEWy4b+BR4VuIqkCBkkkJP04i4FJPDIYGBBG/71KJpv91jV5ax/qs3XYdJSTJUx2iAnvZWmTxwHrikN6hClwp5Do5A/fGKdMHgm4o9wNbJLaC+rukTnFWPDvWwNtVsftWUQwmniJbP1cVIlJ3NJa7ixUPRSuYa23WKkb1x2nW7fNMQHSNYb5Qg73GrJdAS7qOsMkmssI92T8JOv49V5amaTejGpcRP9YUZJsCNn73Lpx/Nj4v/FFH8ErrGa3aazUBBmxLOL9mbAcXGlLo6Hf9ErzWk48TpNqZZ7bed36N3bK7CwHT8WqpDpEcaddhd3A87Ql6UXv36vhRJ93mCutoNL/f0EE19l6w== @@ -21,7 +21,7 @@ import Heading from "@theme/Heading"; -Get the borrow cost for a liquidity transaction + +A [borrow cost](/glossary#46-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow liquidity from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. + +Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. -This endpoint calculates the borrow quote for a liquidity transaction, including the borrow cost, required input/output, and duration. +A [borrow quote](/glossary#47-borrow-quote) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. +It reserves liquidity under specific conditions, allowing solvers to confidently execute the cross-chain transaction. + + B[Preview an estimated borrowing cost🔗] + B --> C[Receive Borrow Cost Estimate] + C --> D{Is Cost Acceptable?} + D -- Yes --> E[Reserve liquidity and authorize the fill🔗] + D -- No --> F[Abort Fill] + E --> G[Borrow Liquidity from Sprinter Stash] + G --> H[Perform Cross-Chain Swap/Bridge Execution] + H --> I[Repay Borrowed Liquidity + Costs] + I --> J[Fill Complete] + +click B "borrow-cost-api" "Borrow Cost" +style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold + +click E "borrow-quote-api" "Borrow Quote" +style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold + +``` -- **LPs earn dynamic rewards**: - - Base APY from supply on lending protocols (e.g., Aave) - - SPRNT staking rewards with multiplier boosts for longer locks - - Earlybird incentives -Sprinter Stash is powered by **Sprinter Solve**. ## Features & Utility +### For Liquidity Providers + +- Earn passive yield, solver-generated fees and protocol incentives. +- Participate in liquidity mining campaigns for SPRNT rewards. +- Benefit from protocol-managed inventory strategies. ### For Solvers - Reduce capital requirements by borrowing liquidity on demand. - Eliminate need to manage inventory across chains. - Improve execution efficiency with shared liquidity access. -### For LPs - -- Earn passive yield and solver-generated fees. -- Participate in liquidity mining campaigns for SPRNT rewards. -- Benefit from protocol-managed inventory strategies. - -## How Sprinter Enables Zero-Collateral Loans +### How Stash Enables Zero-Collateral Loans Sprinter Stash enables solvers to borrow liquidity with near zero collateral, and achieves this through a series of mechanisms below: @@ -78,3 +96,49 @@ Sprinter enforces: #### 4. Bonding Pools Sprinter will also allow Solver Operators to create Bonding Pools, that escrow funds to vouch for their solvers, enabling more favourable borrowing conditions. Sprinter Bonding Pools will be controlled by governance and similarly allow slashing by governance for any malicious activity or violations. + + +### Supported Networks + +- Arbitrum +- Optimism +- Base +- Ethereum Mainnet (coming soon) + +### Supported Assets + +- Stablecoins: USDC, DAI, USDT +- Blue-Chip: WETH, WBTC + +Want to request support for a new chain or asset? [Submit a request](https://forms.gle/an5vZrmyDkyYR8Ni7). + +## Stash Fees + +Sprinter Stash handles crosschain liquidity fills. Revenue is generated from the spread between between the amount the user deposited on source and the amount provided on the destination. + + +### Revenue Components + +- **Fill Revenue:** Amount user deposits on source - amount send to user on destination +- **Borrow Costs:** Cost of liquidity borrowing and crosschain repayment. +- **Solver Costs:** Gas fees and execution costs fronted by solvers. + +### Profit Calculation + +``` +Fill Profit = Fill Revenue - Borrow Costs - Solver Costs +``` + +### Monthly Distribution + +1. Withdraw raw profits from liquidity pools. +2. Deduct solver gas costs. +3. Distribute monthly fill profits to: + +| Actor | Description | Fill Profit % | +| -------- | ------------------------------------- | ------------- | +| Solvers | For executing fills | 50% | +| LPs | For providing liquidity | 50% | +| Treasury | Protocol growth & sustainability fund | TBD | + +➡️ _Initial fee split is reviewed monthly by governance._ diff --git a/docs/docs/02-Stash/02-stash-pools.md b/docs/docs/02-stash-pools.md similarity index 95% rename from docs/docs/02-Stash/02-stash-pools.md rename to docs/docs/02-stash-pools.md index 091ecf8..faa1207 100644 --- a/docs/docs/02-Stash/02-stash-pools.md +++ b/docs/docs/02-stash-pools.md @@ -1,7 +1,7 @@ --- id: liquidity-hub-pools -title: Sprinter Stash Pools -sidebar_position: 4 +title: 🅿️ Sprinter Stash Pools +sidebar_position: 113 --- # Sprinter Stash Pools diff --git a/docs/docs/03-Solve/01-use-solve.md b/docs/docs/03-Solve/01-use-solve.md index 429fbb3..bf72a05 100644 --- a/docs/docs/03-Solve/01-use-solve.md +++ b/docs/docs/03-Solve/01-use-solve.md @@ -7,7 +7,7 @@ sidebar_position: 1 ## Getting Started 1. Request an API key via the [Sprinter Solve Request Form](https://forms.gle/TCAUwcYqguQbWi3bA) -2. Review the Solve APIs ([get route](solve-get-route), [get quote](solve-get-quote), [get route V2](solve-get-route-v2)) +2. Review the Solve APIs ([get quote](solve-get-quote), [get route](solve-get-route-v2)) 3. Call `/v2/route` to get quote + execution data 4. Send transaction using `swap_call_data` diff --git a/docs/docs/03-Solve/02-solve-quick-start.md b/docs/docs/03-Solve/02-solve-quick-start.md new file mode 100644 index 0000000..816403b --- /dev/null +++ b/docs/docs/03-Solve/02-solve-quick-start.md @@ -0,0 +1,45 @@ +--- +id: solve-api-quick-start +title: Solve API Quick Start +sidebar_position: 110 +--- + +# 🚀 Sprinter Solve API Quick Start Guide + +A practical walkthrough of how developers can use the **Sprinter Solve API** to optimize swap execution via intent fulfillment. + +--- + +## 📘 Step 1: Detect a User Intent or Trade Request + +Listen for user swap requests or intent triggers in your dApp, aggregator, or protocol integration. + +--- + +## 📘 Step 2: Fetch a Quote from Solve API + +Use the `/v2/route` endpoint to fetch an optimized swap route and quote for execution. + +```ts title="Fetch Swap Quote" +const chainId = 1; // 1 = Ethereum, 8453 = Base, etc. +const srcToken = "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; // USDC +const dstToken = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; // WETH +const amount = "1000000"; // USDC with 6 decimals = 1 USDC + +const res = await fetch(`https://swaps.sprinter.tech/base/v2/route`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-Key": "", + }, + body: JSON.stringify({ + fromToken: srcToken, + toToken: dstToken, + amount: amount, + slippage: 0.005, // 0.5% slippage tolerance + user: "", + }), +}); + +const quoteData = await res.json(); +console.log("Solve API Quote:", quoteData); diff --git a/docs/docs/03-Solve/get-quote.api.mdx b/docs/docs/03-Solve/get-quote.api.mdx index 317ef33..f4cb51f 100644 --- a/docs/docs/03-Solve/get-quote.api.mdx +++ b/docs/docs/03-Solve/get-quote.api.mdx @@ -19,7 +19,7 @@ import OperationTabs from "@theme/OperationTabs"; import TabItem from "@theme/TabItem"; import Heading from "@theme/Heading"; - + diff --git a/docs/docs/03-Solve/get-route-v-2.api.mdx b/docs/docs/03-Solve/get-route-v-2.api.mdx index 85626fb..e1de185 100644 --- a/docs/docs/03-Solve/get-route-v-2.api.mdx +++ b/docs/docs/03-Solve/get-route-v-2.api.mdx @@ -1,8 +1,8 @@ --- id: solve-get-route-v2 -title: "Get Route V2" +title: "Get Route" description: "Get a route for execution with additional parameters" -sidebar_label: "Get Route V2" +sidebar_label: "Get Route " hide_title: true hide_table_of_contents: true api: eJztWG1vGjkQ/iuWdSclvYUsGwiBb4SQHrovVZJWJ0U5atYDuN21N34hcIj/fpr1Znmnbar70Lvybe3x+JnH48czLKjKQDMrlOxz2qZjsLfKWfgQ0YByMLEWGU7SNn0LljCicZaMlCYwg9jhHHkWdkIY5wK/WEIyplkKFrShAV37aD8sqEBXTw70nAZUshRom7JUOWkHQu7seT8B4meJGhGrPoM0xCpiIEmIkIRDLFKWEKlsHgMNqIknkDLaXmy56pRumCS9224Uen+EGcJKR8ZqIcfkRCpiYgHSipGIS/enNKB2niFmb5jHZy1o3OGvh7DSevztFxpQmLE0S9CuFu780Imw+ew9IvDI6DKgGp6c0MBp22oHX3KzDPbTmYd1iM0iZs41mJLKI7RFIRnOLZCenYAGl5ZLQcaKA/f0TWDms+BjOPtIMg0jMTvOVTh7YJVRp3KDnC3q4XKTtnB2cVVrNurNeu+yFbbq3Xr9mrUuh61GvQccOt16qxE1azy8WWOz46EdZ/IbPB8nWDn7dQwP3fz/RXA3jBjrnLeGUXR+07u8DjshNLr1m6gJnetWeHnebTYuunF0kGCTiCxjY9jL78sksSoBzWQMqAQZ6BikxfETqI6rAQmrjVynwmrj19ONAyhYky4dgqYBHSmdMkvbdJQotnURRywx6+GF1cbBtGB6DHbAndfTQWr250duRl7Mcox2AoWyGmA6nmBEqUgSYSBWkpt98IW0MN7EL6S9qB/HH4Xh8hENTKakAYMOozDczctbD8fFMRgzckkyJ2OQ+FYApwGNlbQgLa5jWZaIOA/m7JPBxYuD2X637i/WgN6KyLdfEQ6WicSsslwNP0GMd24V3QN9csrCQCCk4hnx9zIVcrAx4GlHIp9ZNohZkgw4swzdMSGH6nkgZOYsfQxopvFRtMKzU+6wE8x7KZ4cEMH9OwG6PMt8zZ77ubolT4NadF5vXDQv8bzWkP6QD9cW2z9kDEWC/FcEeivNd8L6HWZlBGiGVmX+4uJvQP9mG/r5JfBa87yVa9HG9drB0cdhsrF7seIQivWNqtUqXS5XBOSqdVuI24eILpc4W98ncFeME1QSMPb1etbTWmnyoqY+A75OuABX7qqNH949LZcySTQwzoYJkNyKpGCMfyUPUySkcaORyK8TUc4i2azI+TXe8jhKtmr7tI45O1Fa/A2cVEhfTlkiOOm865PPMP9J4DqBjX3p1pd4dVDlQE9BewQ/eVvxhs8I2Ikq2lAvNxPapmfT6CwvEfDxhthpYed5L9nJxB8w7zi0enjEsuZl+g5Z83GtG5W1E8sHaeDruAkwnhdSRSH3Z6Xzrl/xBlvvmE93T7cvu4j5PEjEFAZv8riEHKl8oyK+u2eWkeGcXCVMxnv9OQO8tCB3XvOmoI03qVXDalgZgmUoppkyNmV5ZhRgsZb0tdpuz75YZddr2/eCMAsze5YlTEhE4XSCzv35PNApbuxP6DGgE2Usji4WQ2bgvU6WSxz2xTIeGxcGc2lVnB7EfHJb5O0pecU/AXuho1ht/uMwZYlDu7wbeTW2Q331ERBrffq/hMF3nl+E4AvkV2L4npbsCLK1FvA7gL2y1zrG2L4mb4XwET+0QIi5JgUv4oKJ7z104hiydcJ3ZB+9lFL4tndPl8t/ANxtndI= @@ -19,11 +19,16 @@ import OperationTabs from "@theme/OperationTabs"; import TabItem from "@theme/TabItem"; import Heading from "@theme/Heading"; - + -Get a route for execution with additional parameters +:::tip +Networks need to be selected via URI. See [accessing the solve API](/solve/solvestart/#accessing-the-solve-api) for further details. +::: + + +Get an executable swap route - - - -Get a route for execution - - - - - - - - diff --git a/docs/docs/05-sprnt.md b/docs/docs/05-sprnt.md index 41fa8f6..7b62ab6 100644 --- a/docs/docs/05-sprnt.md +++ b/docs/docs/05-sprnt.md @@ -20,11 +20,6 @@ SPRNT is the native governance and utility token of the Sprinter Protocol. It is - Distributed to LPs and solvers for protocol usage - Used to bootstrap solver routes and usage -### Safety Module - -- SPRNT can be staked to secure the protocol -- Rewards are earned in exchange for risk of slashing - ### Bonding Pools - Solvers can create Bonding Pools, where SPRNT can be bonded @@ -34,7 +29,7 @@ SPRNT is the native governance and utility token of the Sprinter Protocol. It is ## Token Supply & Allocation - **Total Supply:** 1,000,000,000 SPRNT -- **Token Standard:** xERC20 +- **Token Standard:** ERC20 - **Network:** Ethereum Mainnet More details on the token generation event and distribution will be released soon. diff --git a/docs/docs/08-partnerships.md b/docs/docs/08-partnerships.md index a32038a..b54ea6d 100644 --- a/docs/docs/08-partnerships.md +++ b/docs/docs/08-partnerships.md @@ -10,8 +10,8 @@ Sprinter is currently operating in private beta and selectively partnering with ## Who We're Looking to Partner With -- \*\*CrossChain DEXs & Intent-Based Protocolschain execution -- **Liquidity Providers** interested in sustainable, high-yield opportunities +- CrossChain DEXs & Intent-Based Protocolschain execution +- Liquidity Providers interested in sustainable, high-yield opportunities ## Get in Touch diff --git a/docs/docs/10-glossary.md b/docs/docs/10-glossary.md new file mode 100644 index 0000000..5b0f576 --- /dev/null +++ b/docs/docs/10-glossary.md @@ -0,0 +1,159 @@ +--- +id: glossary +title: Sprinter Glossary +sidebar_position: 10 +--- + +### 1. Solvers +Automated agents that find and execute the most efficient way to fulfill a user’s intent, optimizing for cost, speed, and security. + +### 2. Intent Systems +A model where users specify desired outcomes, and solvers or order flow networks execute transactions accordingly. + +### 3. MEV (Maximal Extractable Value) +The value miners, validators, or solvers can extract by reordering transactions, with growing importance in MEV-resistant routing across chains. + +### 4. Liquidity Mining +Incentivizing users to provide liquidity to decentralized protocols, crucial for ensuring deep liquidity in interoperable ecosystems. + +### 5. Swaps +Asset exchanges that can occur within a single chain or across multiple chains using interoperability protocols. + +### 6. Interop +The ability of multiple blockchain networks to communicate and share information in a seamless, trust-minimized, and permissionless way. + +### 7. Atomic Swaps +A mechanism that allows users to exchange assets across different blockchains in a trustless manner without intermediaries. + +### 8. Bridges +Protocols that facilitate asset and data transfer between different blockchain networks. Bridges can be trust-minimized (e.g., ZK-proofs, MPC) or centralized. + +### 9. Cross-Chain Messaging (CCM) +A communication layer that enables smart contracts and applications on different blockchains to exchange messages and trigger actions. + +### 10. Trust-Minimized Interoperability +A security model that ensures cross-chain transactions can be verified without relying on a single centralized authority. + +### 11. State Proofs +Cryptographic proofs that verify the state of one blockchain on another without needing a centralized validator. + +### 12. Order Flow Auctions (OFAs) +A mechanism where solvers compete to execute user intents by offering the most efficient execution path. + +### 13. Commit-Reveal Schemes +A cryptographic technique where users commit to an intent before revealing execution details to prevent frontrunning. + +### 14. Solver Competition +A model where multiple solvers bid to execute a user’s intent based on optimal execution parameters. + +### 15. Fair Ordering Protocols +Systems that prevent MEV extraction and ensure user transactions are processed fairly in intent-based architectures. + +### 16. Flow Isolation +A technique used to prevent solver collusion and ensure that intents remain private until execution. + +### 17. Meta-Transactions +Transactions that are relayed and executed on behalf of a user, abstracting away gas fees and network complexity. + +### 18. Gas Abstraction +A mechanism where users don’t need to hold native tokens to pay for gas fees, allowing transactions to be executed with alternative assets. + +### 19. Account Abstraction (AA) +A design that moves away from traditional externally owned accounts (EOAs) and allows more flexible wallet interactions. + +### 20. Unified Liquidity Pools +Cross-chain pools that allow users to access liquidity seamlessly without needing to bridge assets manually. + +### 21. Execution Environments +Different blockchain execution layers (e.g., EVM, WASM) that need to be abstracted for smooth multi-chain interactions. + +### 22. Threshold Signatures (TSS) +A cryptographic scheme used in cross-chain transactions to prevent single points of failure. + +### 23. Rollup Composability +The ability of rollups to interact with each other and with Layer 1 chains in a seamless way. + +### 24. Hybrid Custodial & Non-Custodial Bridges +Models that combine elements of centralized and decentralized bridge security to improve trust minimization. + +### 25. Cross-Chain Governance +Systems that enable decentralized governance across multiple chains without requiring users to vote on each network separately. + +### 26. Cross-Domain MEV +The study of how maximal extractable value (MEV) can be exploited or mitigated across different blockchain networks. + +### 27. Cross-Chain Finality +Ensuring that transactions on one blockchain are finalized and verifiable on another without rollback risks. + +### 28. Recursive SNARKs +A cryptographic method for verifying multiple proofs efficiently, often used for cross-chain validation. + +### 29. Bridgeless Interoperability +A model where assets do not need to be explicitly bridged but are instead referenced and executed natively across chains. + +### 30. Atomic Composability +The ability to execute transactions in a single atomic operation, ensuring all steps succeed or fail together. + +### 31. Shared Security Models +Mechanisms where smaller chains inherit security from a larger, more established network. + +### 32. Intent Standardization +The process of creating common formats for intent expression so that multiple solvers can compete on execution. + +### 33. Solver Networks +Decentralized networks of solvers that execute user intents efficiently while minimizing costs and MEV risks. + +### 34. Executable Intents +Intents that include conditions and constraints to ensure execution only happens when all state change criteria are met. + +### 35. Decentralized Order Flow +A distributed mechanism where the process is open, permissionless, and avoids reliance on a central entity. + +### 36. Cross-Domain Intent Execution +The ability for an intent system to execute across different execution environments (EVM, WASM, etc.). + +### 37. Bounded MEV Intents +Intents that are designed to minimize MEV exploitation by setting strict execution conditions. + +### 38. Intent Aggregation +The process of bundling multiple user intents to optimize execution costs and efficiency. + +### 39. Universal Smart Accounts +Wallet accounts that function across multiple blockchains and support advanced execution logic. + +### 40. Multichain Asset Abstraction +The ability to use a single asset representation across multiple blockchains without explicit bridging. + +### 41. Trustless Relayers +Intermediaries that facilitate cross-chain transactions without requiring users to trust them with their assets. + +### 42. Intent-Based Arbitrage +Arbitrage that is facilitated through intents, optimizing price discrepancies across venues without needing specific trade paths. + +### 43. Interoperable Liquidity Aggregation +The process of dynamically managing liquidity across chains to optimize swap execution and efficiency. + +### 44. Threshold Multi-Signature (TMS) +A security mechanism where multiple signatures are required to execute a transaction across chains. + +### 45. Consensus-Agnostic Interoperability +Systems that facilitate communication between chains regardless of their underlying consensus mechanism (PoS, PoW, etc.). + +### 46. Borrow Cost +A **borrow cost** is the preliminary **estimated fee** a solver would incur to borrow liquidity from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is **not a binding or reserved price**. + +### 47. Borrow Quote + +A **borrow quote** is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves liquidity under specific conditions, allowing solvers to confidently execute the cross-chain transaction. + + + +### 48. Sprinter Solve Quote +A quote is a solver’s proposed price and execution plan for fulfilling a user's intent. It includes information such as input/output amounts, fees, and gas costs. In Sprinter, a quote is typically returned from the Solve API (/v2/route) and reflects the cost, path, and feasibility of executing a swap or cross-chain action at a given moment. Users (or integrators) evaluate quotes to determine if they're acceptable before triggering execution. + +### 49. Sprinter Solve Fill +A fill is the successful execution of a user intent by a solver. Once a quote is accepted, the solver "fills" the intent by borrowing liquidity (via Sprinter Stash), performing the necessary transactions (swap, bridge, etc.), and finalizing the settlement on the destination chain. In Sprinter, fills represent the moment where capital moves and the solver earns fees — it's the actual fulfillment of what was quoted. + +### 50. Fill + +A fill represents the full lifecycle: Detecting a user intent ➔ Borrowing liquidity ➔ Executing the transaction ➔ Repaying liquidity ➔ Realizing solver and protocol profits. \ No newline at end of file diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index a775ab1..274edcd 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -46,6 +46,9 @@ const config: Config = { ], themeConfig: { + mermaid: { + theme: { light: "neutral", dark: "dark" }, + }, colorMode: { defaultMode: "dark", disableSwitch: false, // optional: hide theme toggle switch @@ -177,7 +180,22 @@ const config: Config = { ], ], - themes: ["docusaurus-theme-openapi-docs"], + + themes: [ + "docusaurus-theme-openapi-docs", + "@docusaurus/theme-mermaid", + ], + + + markdown: { + mermaid: true, + }, + }; + + + + export default config; + diff --git a/docs/package.json b/docs/package.json index 1e7abf0..65b8811 100644 --- a/docs/package.json +++ b/docs/package.json @@ -25,6 +25,7 @@ "@docusaurus/core": "^3.7.0", "@docusaurus/preset-classic": "^3.7.0", "@docusaurus/remark-plugin-npm2yarn": "^3.7.0", + "@docusaurus/theme-mermaid": "^3.7.0", "@mdx-js/react": "^3.0.1", "clsx": "^2.1.1", "d3": "^7.9.0", diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 3323323..ecaa6cd 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -11,26 +11,26 @@ @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap"); :root { - --ifm-color-primary: #2e8555; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; + --ifm-color-primary: #FF9B43; + --ifm-color-primary-dark: #FF9B43; + --ifm-color-primary-darker: #FF9B43; + --ifm-color-primary-darkest: #FF9B43; + --ifm-color-primary-light: #FF9B43; + --ifm-color-primary-lighter: #FF9B43; + --ifm-color-primary-lightest: #FF9B43; --ifm-code-font-size: 95%; --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); } /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme="dark"] { - --ifm-color-primary: #25c2a0; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; + --ifm-color-primary: #FF9B43; + --ifm-color-primary-dark: #FF9B43; + --ifm-color-primary-darker: #FF9B43; + --ifm-color-primary-darkest: #FF9B43; + --ifm-color-primary-light: #FF9B43; + --ifm-color-primary-lighter: #FF9B43; + --ifm-color-primary-lightest: #FF9B43; --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); } @@ -93,3 +93,19 @@ body { max-height: 800px; /* Set max height for scrollable area */ overflow-y: auto; /* Vertical scrolling */ } + +/* Custom Tip Box (:::tip) */ +.alert--success { + background-color: #262627; /* Tip background color */ + color: #f4f6f9; /* Tip text color */ + border-left: 4px solid #FF9B43; /* Tip border color */ +} +/* Optional: Adjust icon */ +.alert--success .alert__icon { + color: #FF9B43; /* Tip icon color */ +} +/* Style links inside TIP boxes */ +.alert--success a { + color: #FF9B43; /* Your link color inside tip */ + text-decoration: underline; +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index a0cf31d..a58348c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -445,6 +445,23 @@ __metadata: languageName: node linkType: hard +"@antfu/install-pkg@npm:^1.0.0": + version: 1.0.0 + resolution: "@antfu/install-pkg@npm:1.0.0" + dependencies: + package-manager-detector: "npm:^0.2.8" + tinyexec: "npm:^0.3.2" + checksum: 10c0/2361383f9aef51f39e96d0276eb266f01d1cabd4881bba6db2e3dff392ac33b537fcb18a07c66ecd315b808b9a70dc48a95e53531d407b2e1956f49f3b6c5b5b + languageName: node + linkType: hard + +"@antfu/utils@npm:^8.1.0": + version: 8.1.1 + resolution: "@antfu/utils@npm:8.1.1" + checksum: 10c0/cd55d322496f0324323a7bd312bbdc305db02f5c74c53d59213a00a7ecfd66926b6755a41f27c6e664a687cd7a967d3a8b12d3ea57f264ae45dd1c5c181f5160 + languageName: node + linkType: hard + "@apidevtools/json-schema-ref-parser@npm:^11.5.4": version: 11.9.3 resolution: "@apidevtools/json-schema-ref-parser@npm:11.9.3" @@ -3127,6 +3144,13 @@ __metadata: languageName: node linkType: hard +"@braintree/sanitize-url@npm:^7.0.4": + version: 7.1.1 + resolution: "@braintree/sanitize-url@npm:7.1.1" + checksum: 10c0/fdfc1759c4244e287693ce1e9d42d649423e7c203fdccf27a571f8951ddfe34baa5273b7e6a8dd3007d7676859c7a0a9819be0ab42a3505f8505ad0eefecf7c1 + languageName: node + linkType: hard + "@chainsafe/eslint-config@npm:^2.2.4": version: 2.2.4 resolution: "@chainsafe/eslint-config@npm:2.2.4" @@ -3196,6 +3220,48 @@ __metadata: languageName: unknown linkType: soft +"@chevrotain/cst-dts-gen@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/cst-dts-gen@npm:11.0.3" + dependencies: + "@chevrotain/gast": "npm:11.0.3" + "@chevrotain/types": "npm:11.0.3" + lodash-es: "npm:4.17.21" + checksum: 10c0/9e945a0611386e4e08af34c2d0b3af36c1af08f726b58145f11310f2aeafcb2d65264c06ec65a32df6b6a65771e6a55be70580c853afe3ceb51487e506967104 + languageName: node + linkType: hard + +"@chevrotain/gast@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/gast@npm:11.0.3" + dependencies: + "@chevrotain/types": "npm:11.0.3" + lodash-es: "npm:4.17.21" + checksum: 10c0/54fc44d7b4a7b0323f49d957dd88ad44504922d30cb226d93b430b0e09925efe44e0726068581d777f423fabfb878a2238ed2c87b690c0c0014ebd12b6968354 + languageName: node + linkType: hard + +"@chevrotain/regexp-to-ast@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/regexp-to-ast@npm:11.0.3" + checksum: 10c0/6939c5c94fbfb8c559a4a37a283af5ded8e6147b184a7d7bcf5ad1404d9d663c78d81602bd8ea8458ec497358a9e1671541099c511835d0be2cad46f00c62b3f + languageName: node + linkType: hard + +"@chevrotain/types@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/types@npm:11.0.3" + checksum: 10c0/72fe8f0010ebef848e47faea14a88c6fdc3cdbafaef6b13df4a18c7d33249b1b675e37b05cb90a421700c7016dae7cd4187ab6b549e176a81cea434f69cd2503 + languageName: node + linkType: hard + +"@chevrotain/utils@npm:11.0.3": + version: 11.0.3 + resolution: "@chevrotain/utils@npm:11.0.3" + checksum: 10c0/b31972d1b2d444eef1499cf9b7576fc1793e8544910de33a3c18e07c270cfad88067f175d0ee63e7bc604713ebed647f8190db45cc8311852cd2d4fe2ef14068 + languageName: node + linkType: hard + "@cloudflare/kv-asset-handler@npm:0.3.4": version: 0.3.4 resolution: "@cloudflare/kv-asset-handler@npm:0.3.4" @@ -4293,6 +4359,24 @@ __metadata: languageName: node linkType: hard +"@docusaurus/theme-mermaid@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-mermaid@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/module-type-aliases": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + mermaid: "npm:>=10.4" + tslib: "npm:^2.6.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/266b66abd079bd6b369a0dc23dde973e0dfc89baa75118ea195673a80c856825290b625ee13897a6d06283b4c1ad01a3a9c738214e30032ae49662c754b9e33d + languageName: node + linkType: hard + "@docusaurus/theme-search-algolia@npm:3.7.0": version: 3.7.0 resolution: "@docusaurus/theme-search-algolia@npm:3.7.0" @@ -5001,6 +5085,29 @@ __metadata: languageName: node linkType: hard +"@iconify/types@npm:^2.0.0": + version: 2.0.0 + resolution: "@iconify/types@npm:2.0.0" + checksum: 10c0/65a3be43500c7ccacf360e136d00e1717f050b7b91da644e94370256ac66f582d59212bdb30d00788aab4fc078262e91c95b805d1808d654b72f6d2072a7e4b2 + languageName: node + linkType: hard + +"@iconify/utils@npm:^2.1.33": + version: 2.3.0 + resolution: "@iconify/utils@npm:2.3.0" + dependencies: + "@antfu/install-pkg": "npm:^1.0.0" + "@antfu/utils": "npm:^8.1.0" + "@iconify/types": "npm:^2.0.0" + debug: "npm:^4.4.0" + globals: "npm:^15.14.0" + kolorist: "npm:^1.8.0" + local-pkg: "npm:^1.0.0" + mlly: "npm:^1.7.4" + checksum: 10c0/926013852cd9d09b8501ee0f3f7d40386dc5ed1cb904869d6502f5ee1a64aee5664e9c00da49d700528d26c4a51ea0cac4f046c4eb281d0f8d54fc5df2f3fd0d + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -5157,6 +5264,15 @@ __metadata: languageName: node linkType: hard +"@mermaid-js/parser@npm:^0.4.0": + version: 0.4.0 + resolution: "@mermaid-js/parser@npm:0.4.0" + dependencies: + langium: "npm:3.3.1" + checksum: 10c0/f0bea89b993c89d9e655e487e6ffd6866897e607264e70a7addc4794683f5c9632376c1e9893246e7e2d5c05569d1b35005a213c283107453b8dff273fb8d8b2 + languageName: node + linkType: hard + "@microsoft/api-extractor-model@npm:7.29.6": version: 7.29.6 resolution: "@microsoft/api-extractor-model@npm:7.29.6" @@ -7250,7 +7366,7 @@ __metadata: languageName: node linkType: hard -"@types/d3@npm:^7": +"@types/d3@npm:^7, @types/d3@npm:^7.4.3": version: 7.4.3 resolution: "@types/d3@npm:7.4.3" dependencies: @@ -7828,6 +7944,13 @@ __metadata: languageName: node linkType: hard +"@types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c + languageName: node + linkType: hard + "@types/unist@npm:*, @types/unist@npm:^3.0.0": version: 3.0.2 resolution: "@types/unist@npm:3.0.2" @@ -10032,6 +10155,31 @@ __metadata: languageName: node linkType: hard +"chevrotain-allstar@npm:~0.3.0": + version: 0.3.1 + resolution: "chevrotain-allstar@npm:0.3.1" + dependencies: + lodash-es: "npm:^4.17.21" + peerDependencies: + chevrotain: ^11.0.0 + checksum: 10c0/5cadedffd3114eb06b15fd3939bb1aa6c75412dbd737fe302b52c5c24334f9cb01cee8edc1d1067d98ba80dddf971f1d0e94b387de51423fc6cf3c5d8b7ef27a + languageName: node + linkType: hard + +"chevrotain@npm:~11.0.3": + version: 11.0.3 + resolution: "chevrotain@npm:11.0.3" + dependencies: + "@chevrotain/cst-dts-gen": "npm:11.0.3" + "@chevrotain/gast": "npm:11.0.3" + "@chevrotain/regexp-to-ast": "npm:11.0.3" + "@chevrotain/types": "npm:11.0.3" + "@chevrotain/utils": "npm:11.0.3" + lodash-es: "npm:4.17.21" + checksum: 10c0/ffd425fa321e3f17e9833d7f44cd39f2743f066e92ca74b226176080ca5d455f853fe9091cdfd86354bd899d85c08b3bdc3f55b267e7d07124b048a88349765f + languageName: node + linkType: hard + "chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -10378,6 +10526,20 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418 + languageName: node + linkType: hard + +"confbox@npm:^0.2.1": + version: 0.2.2 + resolution: "confbox@npm:0.2.2" + checksum: 10c0/7c246588d533d31e8cdf66cb4701dff6de60f9be77ab54c0d0338e7988750ac56863cc0aca1b3f2046f45ff223a765d3e5d4977a7674485afcd37b6edf3fd129 + languageName: node + linkType: hard + "config-chain@npm:^1.1.11": version: 1.1.13 resolution: "config-chain@npm:1.1.13" @@ -10535,6 +10697,24 @@ __metadata: languageName: node linkType: hard +"cose-base@npm:^1.0.0": + version: 1.0.3 + resolution: "cose-base@npm:1.0.3" + dependencies: + layout-base: "npm:^1.0.0" + checksum: 10c0/a6e400b1d101393d6af0967c1353355777c1106c40417c5acaef6ca8bdda41e2fc9398f466d6c85be30290943ad631f2590569f67b3fd5368a0d8318946bd24f + languageName: node + linkType: hard + +"cose-base@npm:^2.2.0": + version: 2.2.0 + resolution: "cose-base@npm:2.2.0" + dependencies: + layout-base: "npm:^2.0.0" + checksum: 10c0/14b9f8100ac322a00777ffb1daeb3321af368bbc9cabe3103943361273baee2003202ffe38e4ab770960b600214224e9c196195a78d589521540aa694df7cdec + languageName: node + linkType: hard + "cosmiconfig@npm:^6.0.0": version: 6.0.0 resolution: "cosmiconfig@npm:6.0.0" @@ -10886,6 +11066,35 @@ __metadata: languageName: node linkType: hard +"cytoscape-cose-bilkent@npm:^4.1.0": + version: 4.1.0 + resolution: "cytoscape-cose-bilkent@npm:4.1.0" + dependencies: + cose-base: "npm:^1.0.0" + peerDependencies: + cytoscape: ^3.2.0 + checksum: 10c0/5e2480ddba9da1a68e700ed2c674cbfd51e9efdbd55788f1971a68de4eb30708e3b3a5e808bf5628f7a258680406bbe6586d87a9133e02a9bdc1ab1a92f512f2 + languageName: node + linkType: hard + +"cytoscape-fcose@npm:^2.2.0": + version: 2.2.0 + resolution: "cytoscape-fcose@npm:2.2.0" + dependencies: + cose-base: "npm:^2.2.0" + peerDependencies: + cytoscape: ^3.2.0 + checksum: 10c0/ce472c9f85b9057e75c5685396f8e1f2468895e71b184913e05ad56dcf3092618fe59a1054f29cb0995051ba8ebe566ad0dd49a58d62845145624bd60cd44917 + languageName: node + linkType: hard + +"cytoscape@npm:^3.29.3": + version: 3.31.2 + resolution: "cytoscape@npm:3.31.2" + checksum: 10c0/7b1652ab0ad60966b43e9b64ac21c23efaea9ab33a0fd0dff35b036d51f084d25010f2dd78205b60ccb76fba73affa4dcd477a5c15a80e0d2af03e42d39229a9 + languageName: node + linkType: hard + "d3-array@npm:1 - 2": version: 2.12.1 resolution: "d3-array@npm:2.12.1" @@ -11239,6 +11448,16 @@ __metadata: languageName: node linkType: hard +"dagre-d3-es@npm:7.0.11": + version: 7.0.11 + resolution: "dagre-d3-es@npm:7.0.11" + dependencies: + d3: "npm:^7.9.0" + lodash-es: "npm:^4.17.21" + checksum: 10c0/52f88bdfeca0d8554bee0c1419377585355b4ef179e5fedd3bac75f772745ecb789f6d7ea377a17566506bc8f151bc0dfe02a5175207a547975f335cd88c726c + languageName: node + linkType: hard + "damerau-levenshtein@npm:^1.0.8": version: 1.0.8 resolution: "damerau-levenshtein@npm:1.0.8" @@ -11293,6 +11512,13 @@ __metadata: languageName: node linkType: hard +"dayjs@npm:^1.11.13": + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: 10c0/a3caf6ac8363c7dade9d1ee797848ddcf25c1ace68d9fe8678ecf8ba0675825430de5d793672ec87b24a69bf04a1544b176547b2539982275d5542a7955f35b7 + languageName: node + linkType: hard + "de-indent@npm:^1.0.2": version: 1.0.2 resolution: "de-indent@npm:1.0.2" @@ -11349,6 +11575,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.4.0": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de + languageName: node + linkType: hard + "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -11660,6 +11898,7 @@ __metadata: "@docusaurus/preset-classic": "npm:^3.7.0" "@docusaurus/remark-plugin-npm2yarn": "npm:^3.7.0" "@docusaurus/theme-common": "npm:^3.7.0" + "@docusaurus/theme-mermaid": "npm:^3.7.0" "@docusaurus/tsconfig": "npm:^3.7.0" "@docusaurus/types": "npm:^3.7.0" "@docusaurus/utils": "npm:^3.7.0" @@ -11838,6 +12077,18 @@ __metadata: languageName: node linkType: hard +"dompurify@npm:^3.2.4": + version: 3.2.5 + resolution: "dompurify@npm:3.2.5" + dependencies: + "@types/trusted-types": "npm:^2.0.7" + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 10c0/b564167cc588933ad2d25c185296716bdd7124e9d2a75dac76efea831bb22d1230ce5205a1ab6ce4c1010bb32ac35f7a5cb2dd16c78cbf382111f1228362aa59 + languageName: node + linkType: hard + "domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" @@ -13194,6 +13445,13 @@ __metadata: languageName: node linkType: hard +"exsolve@npm:^1.0.1": + version: 1.0.5 + resolution: "exsolve@npm:1.0.5" + checksum: 10c0/0e845843951e8e7f190d26648259b3d584990933ea68a3c8ec984e826d4fb3731681f7f2569252b4fe619db1d67b0859abe0ef694cb2edb454343bd44bcdce59 + languageName: node + linkType: hard + "extend-shallow@npm:^2.0.1": version: 2.0.1 resolution: "extend-shallow@npm:2.0.1" @@ -13929,6 +14187,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:^15.14.0": + version: 15.15.0 + resolution: "globals@npm:15.15.0" + checksum: 10c0/f9ae80996392ca71316495a39bec88ac43ae3525a438b5626cd9d5ce9d5500d0a98a266409605f8cd7241c7acf57c354a48111ea02a767ba4f374b806d6861fe + languageName: node + linkType: hard + "globals@npm:^15.9.0": version: 15.9.0 resolution: "globals@npm:15.9.0" @@ -14073,6 +14338,13 @@ __metadata: languageName: node linkType: hard +"hachure-fill@npm:^0.5.2": + version: 0.5.2 + resolution: "hachure-fill@npm:0.5.2" + checksum: 10c0/307e3b6f9f2d3c11a82099c3f71eecbb9c440c00c1f896ac1732c23e6dbff16a92bb893d222b8b721b89cf11e58649ca60b4c24e5663f705f877cefd40153429 + languageName: node + linkType: hard + "handle-thing@npm:^2.0.0": version: 2.0.1 resolution: "handle-thing@npm:2.0.1" @@ -15768,6 +16040,17 @@ __metadata: languageName: node linkType: hard +"katex@npm:^0.16.9": + version: 0.16.22 + resolution: "katex@npm:0.16.22" + dependencies: + commander: "npm:^8.3.0" + bin: + katex: cli.js + checksum: 10c0/07b8b1f07ae53171b5f1ea0cf6f18841d2055825c8b11cd81cfe039afcd3af2cfc84ad033531ee3875088329105195b039c267e0dd4b0c237807e3c3b2009913 + languageName: node + linkType: hard + "keyv@npm:^4.5.3, keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -15777,6 +16060,13 @@ __metadata: languageName: node linkType: hard +"khroma@npm:^2.1.0": + version: 2.1.0 + resolution: "khroma@npm:2.1.0" + checksum: 10c0/634d98753ff5d2540491cafeb708fc98de0d43f4e6795256d5c8f6e3ad77de93049ea41433928fda3697adf7bbe6fe27351858f6d23b78f8b5775ef314c59891 + languageName: node + linkType: hard + "kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -15812,6 +16102,19 @@ __metadata: languageName: node linkType: hard +"langium@npm:3.3.1": + version: 3.3.1 + resolution: "langium@npm:3.3.1" + dependencies: + chevrotain: "npm:~11.0.3" + chevrotain-allstar: "npm:~0.3.0" + vscode-languageserver: "npm:~9.0.1" + vscode-languageserver-textdocument: "npm:~1.0.11" + vscode-uri: "npm:~3.0.8" + checksum: 10c0/0c54803068addb0f7c16a57fdb2db2e5d4d9a21259d477c3c7d0587c2c2f65a313f9eeef3c95ac1c2e41cd11d4f2eaf620d2c03fe839a3350ffee59d2b4c7647 + languageName: node + linkType: hard + "language-subtag-registry@npm:^0.3.20": version: 0.3.23 resolution: "language-subtag-registry@npm:0.3.23" @@ -15847,6 +16150,20 @@ __metadata: languageName: node linkType: hard +"layout-base@npm:^1.0.0": + version: 1.0.2 + resolution: "layout-base@npm:1.0.2" + checksum: 10c0/2a55d0460fd9f6ed53d7e301b9eb3dea19bda03815d616a40665ce6dc75c1f4d62e1ca19a897da1cfaf6de1b91de59cd6f2f79ba1258f3d7fccc7d46ca7f3337 + languageName: node + linkType: hard + +"layout-base@npm:^2.0.0": + version: 2.0.1 + resolution: "layout-base@npm:2.0.1" + checksum: 10c0/a44df9ef3cbff9916a10f616635e22b5787c89fa62b2fec6f99e8e6ee512c7cebd22668ce32dab5a83c934ba0a309c51a678aa0b40d70853de6c357893c0a88b + languageName: node + linkType: hard + "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -15927,6 +16244,17 @@ __metadata: languageName: node linkType: hard +"local-pkg@npm:^1.0.0": + version: 1.1.1 + resolution: "local-pkg@npm:1.1.1" + dependencies: + mlly: "npm:^1.7.4" + pkg-types: "npm:^2.0.1" + quansync: "npm:^0.2.8" + checksum: 10c0/fe8f9d0443fb066c3f28a4c89d587dd7cba3ab02645cd16598f8d5f30968acf60af1b0ec2d6ad768475ec9f52baad124f31a93d2fbc034f645bcc02bf3a84882 + languageName: node + linkType: hard + "locate-character@npm:^3.0.0": version: 3.0.0 resolution: "locate-character@npm:3.0.0" @@ -15962,6 +16290,13 @@ __metadata: languageName: node linkType: hard +"lodash-es@npm:4.17.21, lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 10c0/fb407355f7e6cd523a9383e76e6b455321f0f153a6c9625e21a8827d10c54c2a2341bd2ae8d034358b60e07325e1330c14c224ff582d04612a46a4f0479ff2f2 + languageName: node + linkType: hard + "lodash.castarray@npm:^4.4.0": version: 4.4.0 resolution: "lodash.castarray@npm:4.4.0" @@ -16190,6 +16525,15 @@ __metadata: languageName: node linkType: hard +"marked@npm:^15.0.7": + version: 15.0.11 + resolution: "marked@npm:15.0.11" + bin: + marked: bin/marked.js + checksum: 10c0/d532db4955c1f2ac6efc65a644725e9e12e7944cb6af40c7148baecfd3b3c2f3564229b3daf12d2125635466448fb9b367ce52357be3aea0273e3d152efdbdcf + languageName: node + linkType: hard + "math-intrinsics@npm:^1.1.0": version: 1.1.0 resolution: "math-intrinsics@npm:1.1.0" @@ -16665,6 +17009,34 @@ __metadata: languageName: node linkType: hard +"mermaid@npm:>=10.4": + version: 11.6.0 + resolution: "mermaid@npm:11.6.0" + dependencies: + "@braintree/sanitize-url": "npm:^7.0.4" + "@iconify/utils": "npm:^2.1.33" + "@mermaid-js/parser": "npm:^0.4.0" + "@types/d3": "npm:^7.4.3" + cytoscape: "npm:^3.29.3" + cytoscape-cose-bilkent: "npm:^4.1.0" + cytoscape-fcose: "npm:^2.2.0" + d3: "npm:^7.9.0" + d3-sankey: "npm:^0.12.3" + dagre-d3-es: "npm:7.0.11" + dayjs: "npm:^1.11.13" + dompurify: "npm:^3.2.4" + katex: "npm:^0.16.9" + khroma: "npm:^2.1.0" + lodash-es: "npm:^4.17.21" + marked: "npm:^15.0.7" + roughjs: "npm:^4.6.6" + stylis: "npm:^4.3.6" + ts-dedent: "npm:^2.2.0" + uuid: "npm:^11.1.0" + checksum: 10c0/69709ac58992ed532e1173e327b75f4135e226b7b9f61c15a759266a323b726ce429eef554357be1fc68463597a8111e9be4f7f013a6780b558e88ea3bda46b6 + languageName: node + linkType: hard + "methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" @@ -17831,6 +18203,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.7.4": + version: 1.7.4 + resolution: "mlly@npm:1.7.4" + dependencies: + acorn: "npm:^8.14.0" + pathe: "npm:^2.0.1" + pkg-types: "npm:^1.3.0" + ufo: "npm:^1.5.4" + checksum: 10c0/69e738218a13d6365caf930e0ab4e2b848b84eec261597df9788cefb9930f3e40667be9cb58a4718834ba5f97a6efeef31d3b5a95f4388143fd4e0d0deff72ff + languageName: node + linkType: hard + "module-details-from-path@npm:^1.0.3": version: 1.0.3 resolution: "module-details-from-path@npm:1.0.3" @@ -18559,6 +18943,15 @@ __metadata: languageName: node linkType: hard +"package-manager-detector@npm:^0.2.8": + version: 0.2.11 + resolution: "package-manager-detector@npm:0.2.11" + dependencies: + quansync: "npm:^0.2.7" + checksum: 10c0/247991de461b9e731f3463b7dae9ce187e53095b7b94d7d96eec039abf418b61ccf74464bec1d0c11d97311f33472e77baccd4c5898f77358da4b5b33395e0b1 + languageName: node + linkType: hard + "pako@npm:^2.1.0": version: 2.1.0 resolution: "pako@npm:2.1.0" @@ -18670,6 +19063,13 @@ __metadata: languageName: node linkType: hard +"path-data-parser@npm:0.1.0, path-data-parser@npm:^0.1.0": + version: 0.1.0 + resolution: "path-data-parser@npm:0.1.0" + checksum: 10c0/ba22d54669a8bc4a3df27431fe667900685585d1196085b803d0aa4066b83e709bbf2be7c1d2b56e706b49cc698231d55947c22abbfc4843ca424bbf8c985745 + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -18800,6 +19200,13 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.1, pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" @@ -18929,6 +19336,28 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.3.0": + version: 1.3.1 + resolution: "pkg-types@npm:1.3.1" + dependencies: + confbox: "npm:^0.1.8" + mlly: "npm:^1.7.4" + pathe: "npm:^2.0.1" + checksum: 10c0/19e6cb8b66dcc66c89f2344aecfa47f2431c988cfa3366bdfdcfb1dd6695f87dcce37fbd90fe9d1605e2f4440b77f391e83c23255347c35cf84e7fd774d7fcea + languageName: node + linkType: hard + +"pkg-types@npm:^2.0.1": + version: 2.1.0 + resolution: "pkg-types@npm:2.1.0" + dependencies: + confbox: "npm:^0.2.1" + exsolve: "npm:^1.0.1" + pathe: "npm:^2.0.3" + checksum: 10c0/7729d0a2367ba0aa2caf0f84a6ff0b73b13f4e9a3d62c229ddfa6d45d1f3898f590acdbaa64d779d56737d4ebea2d085961efd59094b8adf8baa34d829599b75 + languageName: node + linkType: hard + "pkg-up@npm:^3.1.0": version: 3.1.0 resolution: "pkg-up@npm:3.1.0" @@ -18945,6 +19374,23 @@ __metadata: languageName: node linkType: hard +"points-on-curve@npm:0.2.0, points-on-curve@npm:^0.2.0": + version: 0.2.0 + resolution: "points-on-curve@npm:0.2.0" + checksum: 10c0/f0d92343fcc2ad1f48334633e580574c1e0e28038a756133e171e537f270d6d64203feada5ee556e36f448a1b46e0306dee07b30f589f4e3ad720f6ee38ef48c + languageName: node + linkType: hard + +"points-on-path@npm:^0.2.1": + version: 0.2.1 + resolution: "points-on-path@npm:0.2.1" + dependencies: + path-data-parser: "npm:0.1.0" + points-on-curve: "npm:0.2.0" + checksum: 10c0/a7010340f9f196976f61838e767bb7b0b7f6273ab4fb9eb37c61001fe26fbfc3fcd63c96d5e85b9a4ab579213ab366f2ddaaf60e2a9253e2b91a62db33f395ba + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" @@ -20282,6 +20728,13 @@ __metadata: languageName: node linkType: hard +"quansync@npm:^0.2.7, quansync@npm:^0.2.8": + version: 0.2.10 + resolution: "quansync@npm:0.2.10" + checksum: 10c0/f86f1d644f812a3a7c42de79eb401c47a5a67af82a9adff8a8afb159325e03e00f77cebbf42af6340a0bd47bd0c1fbe999e7caf7e1bbb30d7acb00c8729b7530 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -21457,6 +21910,18 @@ __metadata: languageName: unknown linkType: soft +"roughjs@npm:^4.6.6": + version: 4.6.6 + resolution: "roughjs@npm:4.6.6" + dependencies: + hachure-fill: "npm:^0.5.2" + path-data-parser: "npm:^0.1.0" + points-on-curve: "npm:^0.2.0" + points-on-path: "npm:^0.2.1" + checksum: 10c0/68c11bf4516aa014cef2fe52426a9bab237c2f500d13e1a4f13b523cb5723667bf2d92b9619325efdc5bc2a193588ff5af8d51683df17cfb8720e96fe2b92b0c + languageName: node + linkType: hard + "rtlcss@npm:^4.1.0": version: 4.2.0 resolution: "rtlcss@npm:4.2.0" @@ -22637,6 +23102,13 @@ __metadata: languageName: node linkType: hard +"stylis@npm:^4.3.6": + version: 4.3.6 + resolution: "stylis@npm:4.3.6" + checksum: 10c0/e736d484983a34f7c65d362c67dc79b7bce388054b261c2b7b23d02eaaf280617033f65d44b1ea341854f4331a5074b885668ac8741f98c13a6cfd6443ae85d0 + languageName: node + linkType: hard + "sucrase@npm:^3.32.0, sucrase@npm:^3.35.0": version: 3.35.0 resolution: "sucrase@npm:3.35.0" @@ -23062,6 +23534,13 @@ __metadata: languageName: node linkType: hard +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + "tinypool@npm:^0.8.3": version: 0.8.4 resolution: "tinypool@npm:0.8.4" @@ -23136,6 +23615,13 @@ __metadata: languageName: node linkType: hard +"ts-dedent@npm:^2.2.0": + version: 2.2.0 + resolution: "ts-dedent@npm:2.2.0" + checksum: 10c0/175adea838468cc2ff7d5e97f970dcb798bbcb623f29c6088cb21aa2880d207c5784be81ab1741f56b9ac37840cbaba0c0d79f7f8b67ffe61c02634cafa5c303 + languageName: node + linkType: hard + "ts-interface-checker@npm:^0.1.9": version: 0.1.13 resolution: "ts-interface-checker@npm:0.1.13" @@ -23360,11 +23846,11 @@ __metadata: "typescript@patch:typescript@npm%3A^5.5.3#optional!builtin": version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=379a07" + resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/e6c1662e4852e22fe4bbdca471dca3e3edc74f6f1df043135c44a18a7902037023ccb0abdfb754595ca9028df8920f2f8492c00fc3cbb4309079aae8b7de71cd + checksum: 10c0/94eb47e130d3edd964b76da85975601dcb3604b0c848a36f63ac448d0104e93819d94c8bdf6b07c00120f2ce9c05256b8b6092d23cf5cf1c6fa911159e4d572f languageName: node linkType: hard @@ -23385,6 +23871,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.5.4": + version: 1.6.1 + resolution: "ufo@npm:1.6.1" + checksum: 10c0/5a9f041e5945fba7c189d5410508cbcbefef80b253ed29aa2e1f8a2b86f4bd51af44ee18d4485e6d3468c92be9bf4a42e3a2b72dcaf27ce39ce947ec994f1e6b + languageName: node + linkType: hard + "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" @@ -23845,6 +24338,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^11.1.0": + version: 11.1.0 + resolution: "uuid@npm:11.1.0" + bin: + uuid: dist/esm/bin/uuid + checksum: 10c0/34aa51b9874ae398c2b799c88a127701408cd581ee89ec3baa53509dd8728cbb25826f2a038f9465f8b7be446f0fbf11558862965b18d21c993684297628d4d3 + languageName: node + linkType: hard + "uvu@npm:^0.5.0": version: 0.5.6 resolution: "uvu@npm:0.5.6" @@ -24200,7 +24702,49 @@ __metadata: languageName: node linkType: hard -"vscode-uri@npm:^3.0.8": +"vscode-jsonrpc@npm:8.2.0": + version: 8.2.0 + resolution: "vscode-jsonrpc@npm:8.2.0" + checksum: 10c0/0789c227057a844f5ead55c84679206227a639b9fb76e881185053abc4e9848aa487245966cc2393fcb342c4541241b015a1a2559fddd20ac1e68945c95344e6 + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.17.5": + version: 3.17.5 + resolution: "vscode-languageserver-protocol@npm:3.17.5" + dependencies: + vscode-jsonrpc: "npm:8.2.0" + vscode-languageserver-types: "npm:3.17.5" + checksum: 10c0/5f38fd80da9868d706eaa4a025f4aff9c3faad34646bcde1426f915cbd8d7e8b6c3755ce3fef6eebd256ba3145426af1085305f8a76e34276d2e95aaf339a90b + languageName: node + linkType: hard + +"vscode-languageserver-textdocument@npm:~1.0.11": + version: 1.0.12 + resolution: "vscode-languageserver-textdocument@npm:1.0.12" + checksum: 10c0/534349894b059602c4d97615a1147b6c4c031141c2093e59657f54e38570f5989c21b376836f13b9375419869242e9efb4066643208b21ab1e1dee111a0f00fb + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.5": + version: 3.17.5 + resolution: "vscode-languageserver-types@npm:3.17.5" + checksum: 10c0/1e1260de79a2cc8de3e46f2e0182cdc94a7eddab487db5a3bd4ee716f67728e685852707d72c059721ce500447be9a46764a04f0611e94e4321ffa088eef36f8 + languageName: node + linkType: hard + +"vscode-languageserver@npm:~9.0.1": + version: 9.0.1 + resolution: "vscode-languageserver@npm:9.0.1" + dependencies: + vscode-languageserver-protocol: "npm:3.17.5" + bin: + installServerIntoExtension: bin/installServerIntoExtension + checksum: 10c0/8a0838d77c98a211c76e54bd3a6249fc877e4e1a73322673fb0e921168d8e91de4f170f1d4ff7e8b6289d0698207afc6aba6662d4c1cd8e4bd7cae96afd6b0c2 + languageName: node + linkType: hard + +"vscode-uri@npm:^3.0.8, vscode-uri@npm:~3.0.8": version: 3.0.8 resolution: "vscode-uri@npm:3.0.8" checksum: 10c0/f7f217f526bf109589969fe6e66b71e70b937de1385a1d7bb577ca3ee7c5e820d3856a86e9ff2fa9b7a0bc56a3dd8c3a9a557d3fedd7df414bc618d5e6b567f9 From abbe5d2048bbb245f88b5e4f72894a38f13cad3e Mon Sep 17 00:00:00 2001 From: BeroBurny Date: Thu, 1 May 2025 09:02:53 +0200 Subject: [PATCH 18/38] fix yarn lock --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index a58348c..256fc62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23846,11 +23846,11 @@ __metadata: "typescript@patch:typescript@npm%3A^5.5.3#optional!builtin": version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" + resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=379a07" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/94eb47e130d3edd964b76da85975601dcb3604b0c848a36f63ac448d0104e93819d94c8bdf6b07c00120f2ce9c05256b8b6092d23cf5cf1c6fa911159e4d572f + checksum: 10c0/e6c1662e4852e22fe4bbdca471dca3e3edc74f6f1df043135c44a18a7902037023ccb0abdfb754595ca9028df8920f2f8492c00fc3cbb4309079aae8b7de71cd languageName: node linkType: hard From 680e5c6ad507fbd39d0d2b920f618c71cd8629de Mon Sep 17 00:00:00 2001 From: BeroBurny Date: Thu, 1 May 2025 09:19:16 +0200 Subject: [PATCH 19/38] fix links --- docs/docs/02-Stash/01-utilizing-stash.md | 2 +- docs/docs/03-Solve/get-route-v-2.api.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index b609db9..c96d4ca 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -14,7 +14,7 @@ Sprinter Stash enables solvers to **borrow liquidity crosschain on-demand** to e This guide covers: 1. Recap of the [**Stash Fill Lifecycle**](use-stash#1-stash-fill-lifecycle) -2. Requesting a [**Borrow Cost Estimate**](use-stash#1-request-a-borrow-cost-estimate-optional) +2. Requesting a [**Borrow Cost Estimate**](use-stash#2-request-a-borrow-cost-estimate-optional) 3. Requesting a **Final Borrow Quote and Liquidity Authorization** ### 1. Stash Fill Lifecycle diff --git a/docs/docs/03-Solve/get-route-v-2.api.mdx b/docs/docs/03-Solve/get-route-v-2.api.mdx index e1de185..4d33837 100644 --- a/docs/docs/03-Solve/get-route-v-2.api.mdx +++ b/docs/docs/03-Solve/get-route-v-2.api.mdx @@ -24,7 +24,7 @@ import Heading from "@theme/Heading"; :::tip -Networks need to be selected via URI. See [accessing the solve API](/solve/solvestart/#accessing-the-solve-api) for further details. +Networks need to be selected via URI. See [accessing the solve API](/Solve/solvestart/#accessing-the-solve-api) for further details. ::: From 1821564d75c022621190b3523fedf5f087f14ac7 Mon Sep 17 00:00:00 2001 From: BeroBurny Date: Thu, 1 May 2025 09:25:12 +0200 Subject: [PATCH 20/38] lit fix --- docs/docs/02-Stash/01-utilizing-stash.md | 25 ++++---- ...w-cost-for-a-liquidity-transaction.api.mdx | 3 +- ...ransaction-based-on-the-input-data.api.mdx | 2 - docs/docs/02-Stash/index.md | 9 +-- docs/docs/03-Solve/02-solve-quick-start.md | 1 + docs/docs/03-Solve/get-route-v-2.api.mdx | 1 - docs/docs/10-glossary.md | 62 ++++++++++++++++--- docs/docusaurus.config.ts | 13 +--- docs/src/css/custom.css | 38 ++++++------ 9 files changed, 90 insertions(+), 64 deletions(-) diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index c96d4ca..e035725 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -3,6 +3,7 @@ id: use-stash title: Stash API quick start sidebar_position: 1 --- + :::tip Request your Stash API key via [Sprinter Stash Request](https://forms.gle/kgpcQK722Ley2gke7) or contacting support@sprinter.tech ::: @@ -12,14 +13,13 @@ Request your Stash API key via [Sprinter Stash Request](https://forms.gle/kgpcQK Sprinter Stash enables solvers to **borrow liquidity crosschain on-demand** to execute user intents without needing pre-funded inventory. This guide covers: - + 1. Recap of the [**Stash Fill Lifecycle**](use-stash#1-stash-fill-lifecycle) 2. Requesting a [**Borrow Cost Estimate**](use-stash#2-request-a-borrow-cost-estimate-optional) 3. Requesting a **Final Borrow Quote and Liquidity Authorization** ### 1. Stash Fill Lifecycle -
```mermaid @@ -41,18 +41,16 @@ click E "borrow-quote-api" "Borrow Quote" style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ``` -
- +
### 2. Request a Borrow Cost Estimate (Optional) -Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated [borrowing cost](/glossary#46-borrow-cost)) for a potential fill before requesting liquidity. - +Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated [borrowing cost](/glossary#46-borrow-cost)) for a potential fill before requesting liquidity. ```ts title="Fetch Borrow Cost Estimate" -const protocol = "across"; // Example: "across", "uniswapx" -const type = "swap"; // Example: "swap", "bridge" +const protocol = "across"; // Example: "across", "uniswapx" +const type = "swap"; // Example: "swap", "bridge" const response = await fetch( `https://api.sprinter.tech/v1/liquidity/protocol/${protocol}/type/${type}/quote`, @@ -62,15 +60,14 @@ const response = await fetch( "Content-Type": "application/json", "X-API-Key": "", }, - } + }, ); const costEstimate = await response.json(); console.log("Borrow Cost Estimate:", costEstimate); - ``` - +``` -### 3. Request a Final Borrow Quote +### 3. Request a Final Borrow Quote If the estimated cost is acceptable, call the [**Borrow Quote API**](borrow-quote-api) to request a [borrow quote](/glossary#47-borrow-quote) to reserve liquidity and authorize the fill. @@ -86,9 +83,9 @@ const response = await fetch( "Content-Type": "application/json", "X-API-Key": "", }, - } + }, ); const borrowQuote = await response.json(); console.log("Borrow Quote:", borrowQuote); -``` \ No newline at end of file +``` diff --git a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx index be4aa35..9cc155a 100644 --- a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx +++ b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -30,8 +30,7 @@ import Heading from "@theme/Heading"; context={"endpoint"} > - -A [borrow cost](/glossary#46-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow liquidity from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. +A [borrow cost](/glossary#46-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow liquidity from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. diff --git a/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx index de2566d..9f5acbb 100644 --- a/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx +++ b/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -33,8 +33,6 @@ import Heading from "@theme/Heading"; A [borrow quote](/glossary#47-borrow-quote) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves liquidity under specific conditions, allowing solvers to confidently execute the cross-chain transaction. - - B[Preview an estimated borrowing cost🔗] @@ -41,8 +41,6 @@ style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ``` - - ## Features & Utility ### For Liquidity Providers @@ -50,6 +48,7 @@ style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold - Earn passive yield, solver-generated fees and protocol incentives. - Participate in liquidity mining campaigns for SPRNT rewards. - Benefit from protocol-managed inventory strategies. + ### For Solvers - Reduce capital requirements by borrowing liquidity on demand. @@ -97,7 +96,6 @@ Sprinter enforces: Sprinter will also allow Solver Operators to create Bonding Pools, that escrow funds to vouch for their solvers, enabling more favourable borrowing conditions. Sprinter Bonding Pools will be controlled by governance and similarly allow slashing by governance for any malicious activity or violations. - ### Supported Networks - Arbitrum @@ -116,7 +114,6 @@ Want to request support for a new chain or asset? [Submit a request](https://for Sprinter Stash handles crosschain liquidity fills. Revenue is generated from the spread between between the amount the user deposited on source and the amount provided on the destination. - ### Revenue Components - **Fill Revenue:** Amount user deposits on source - amount send to user on destination diff --git a/docs/docs/03-Solve/02-solve-quick-start.md b/docs/docs/03-Solve/02-solve-quick-start.md index 816403b..feb521c 100644 --- a/docs/docs/03-Solve/02-solve-quick-start.md +++ b/docs/docs/03-Solve/02-solve-quick-start.md @@ -43,3 +43,4 @@ const res = await fetch(`https://swaps.sprinter.tech/base/v2/route`, { const quoteData = await res.json(); console.log("Solve API Quote:", quoteData); +``` diff --git a/docs/docs/03-Solve/get-route-v-2.api.mdx b/docs/docs/03-Solve/get-route-v-2.api.mdx index 4d33837..470e718 100644 --- a/docs/docs/03-Solve/get-route-v-2.api.mdx +++ b/docs/docs/03-Solve/get-route-v-2.api.mdx @@ -27,7 +27,6 @@ import Heading from "@theme/Heading"; Networks need to be selected via URI. See [accessing the solve API](/Solve/solvestart/#accessing-the-solve-api) for further details. ::: - Get an executable swap route Date: Thu, 1 May 2025 17:10:36 +0100 Subject: [PATCH 21/38] updates to docs with api starter kits --- docs/CHANGELOG.md | 15 +- docs/_temp/sprinterNameService.abi.json | 2 +- docs/docs/02-Stash/01-utilizing-stash.md | 41 +++-- ...w-cost-for-a-liquidity-transaction.api.mdx | 8 +- ...ransaction-based-on-the-input-data.api.mdx | 4 +- docs/docs/02-Stash/index.md | 16 +- docs/docs/03-Solve/01-use-solve.md | 47 ------ docs/docs/03-Solve/02-solve-quick-start.md | 140 ++++++++++++++++-- docs/docs/03-Solve/get-quote.api.mdx | 14 +- docs/docs/03-Solve/get-route-v-2.api.mdx | 14 +- docs/docs/03-Solve/index.md | 44 ++++++ docs/docs/10-glossary.md | 4 +- 12 files changed, 237 insertions(+), 112 deletions(-) delete mode 100644 docs/docs/03-Solve/01-use-solve.md diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 1a70aa1..a0a2b04 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,36 +2,31 @@ ## [0.1.3](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.1.2...docs-v0.1.3) (2025-01-22) - ### Bug Fixes -* release ([20f30b0](https://github.com/sprintertech/sprinter-sdk/commit/20f30b0ed2a6b8410650beb6825346e79b38eb8b)) +- release ([20f30b0](https://github.com/sprintertech/sprinter-sdk/commit/20f30b0ed2a6b8410650beb6825346e79b38eb8b)) ## [0.1.2](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.1.1...docs-v0.1.2) (2025-01-21) - ### Bug Fixes -* release `1.3.0` v2 ([71959d1](https://github.com/sprintertech/sprinter-sdk/commit/71959d1d8b5583fb27a36826415d5f7fe8ab9581)) +- release `1.3.0` v2 ([71959d1](https://github.com/sprintertech/sprinter-sdk/commit/71959d1d8b5583fb27a36826415d5f7fe8ab9581)) ## [0.1.1](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.1.0...docs-v0.1.1) (2025-01-21) - ### Bug Fixes -* release `1.3.0` ([aaa6938](https://github.com/sprintertech/sprinter-sdk/commit/aaa69388e4910f92d53fe14ea08785cd63ef4176)) +- release `1.3.0` ([aaa6938](https://github.com/sprintertech/sprinter-sdk/commit/aaa69388e4910f92d53fe14ea08785cd63ef4176)) ## [0.1.0](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.0.1...docs-v0.1.0) (2025-01-21) - ### Features -* Add sweep function ([#115](https://github.com/sprintertech/sprinter-sdk/issues/115)) ([efaaa2b](https://github.com/sprintertech/sprinter-sdk/commit/efaaa2b3d8674e46b264caddcd373218c3f552c1)), closes [#110](https://github.com/sprintertech/sprinter-sdk/issues/110) - +- Add sweep function ([#115](https://github.com/sprintertech/sprinter-sdk/issues/115)) ([efaaa2b](https://github.com/sprintertech/sprinter-sdk/commit/efaaa2b3d8674e46b264caddcd373218c3f552c1)), closes [#110](https://github.com/sprintertech/sprinter-sdk/issues/110) ### Bug Fixes -* `package.json` - repository ([#127](https://github.com/sprintertech/sprinter-sdk/issues/127)) ([21c7007](https://github.com/sprintertech/sprinter-sdk/commit/21c70077d2e5ef83730f730990e849f8d54ec8c0)) +- `package.json` - repository ([#127](https://github.com/sprintertech/sprinter-sdk/issues/127)) ([21c7007](https://github.com/sprintertech/sprinter-sdk/commit/21c70077d2e5ef83730f730990e849f8d54ec8c0)) ## [1.0.0](https://github.com/ChainSafe/sprinter-ts/compare/docs-v0.0.1...docs-v1.0.0) (2025-01-13) diff --git a/docs/_temp/sprinterNameService.abi.json b/docs/_temp/sprinterNameService.abi.json index acc6fed..1f8919a 100644 --- a/docs/_temp/sprinterNameService.abi.json +++ b/docs/_temp/sprinterNameService.abi.json @@ -230,4 +230,4 @@ "stateMutability": "nonpayable", "type": "function" } -] \ No newline at end of file +] diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index e035725..239f406 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -10,43 +10,44 @@ Request your Stash API key via [Sprinter Stash Request](https://forms.gle/kgpcQK ## As a Solver -Sprinter Stash enables solvers to **borrow liquidity crosschain on-demand** to execute user intents without needing pre-funded inventory. +Sprinter Stash enables solvers to **borrow credit crosschain on-demand** to execute user intents without needing pre-funded inventory. This guide covers: -1. Recap of the [**Stash Fill Lifecycle**](use-stash#1-stash-fill-lifecycle) -2. Requesting a [**Borrow Cost Estimate**](use-stash#2-request-a-borrow-cost-estimate-optional) -3. Requesting a **Final Borrow Quote and Liquidity Authorization** +1. Recap of the [Stash Solver Fill Lifecycle](use-stash#1-stash-solver-fill-lifecycle) +2. Requesting a [Credit Borrow Cost Estimate](use-stash#2-request-a-borrow-cost-estimate-optional) +3. Requesting a [Final Borrow Quote and Credit Authorization](use-stash#3-request-a-final-borrow-quote) +4. Check out the [Fill Optimization Tips](use-stash#4-fill-optimization-tips) -### 1. Stash Fill Lifecycle +### 1. Stash Solver Fill Lifecycle
```mermaid flowchart TD - A[Detect User Intent] --> B[2 - Preview an estimated borrowing cost🔗] + A[Detect User Intent] --> B[2 - Preview an estimated borrowing cost of credit🔗] B --> C[Receive Borrow Cost Estimate] C --> D{Is Cost Acceptable?} - D -- Yes --> E[3 - Reserve liquidity and authorize the fill🔗] + D -- Yes --> E[3 - Reserve credit and authorize the fill🔗] D -- No --> F[Abort Fill] E --> G[Borrow Liquidity from Sprinter Stash] G --> H[Perform Cross-Chain Swap/Bridge Execution] - H --> I[Repay Borrowed Liquidity + Costs] + H --> I[Repay Borrowed Credit + Costs] I --> J[Fill Complete] -click B "borrow-cost-api" "Borrow Cost" +click B "use-stash#2-request-a-borrow-cost-estimate-optional" "Borrow Cost" style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold -click E "borrow-quote-api" "Borrow Quote" +click E "use-stash#3-request-a-final-borrow-quote" "Borrow Quote" style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ```
-### 2. Request a Borrow Cost Estimate (Optional) +### 2. Request a Credit Borrow Cost Estimate (Optional) -Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated [borrowing cost](/glossary#46-borrow-cost)) for a potential fill before requesting liquidity. +Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated [borrowing cost](/glossary#46-borrow-cost) for a potential fill before requesting credit. ```ts title="Fetch Borrow Cost Estimate" const protocol = "across"; // Example: "across", "uniswapx" @@ -69,7 +70,7 @@ console.log("Borrow Cost Estimate:", costEstimate); ### 3. Request a Final Borrow Quote -If the estimated cost is acceptable, call the [**Borrow Quote API**](borrow-quote-api) to request a [borrow quote](/glossary#47-borrow-quote) to reserve liquidity and authorize the fill. +If the estimated cost is acceptable, call the [**Borrow Quote API**](borrow-quote-api) to request a [borrow quote](/glossary#47-borrow-quote) to reserve credit and authorize the fill. ```ts title="Request Final Borrow Quote" const protocol = "across"; @@ -89,3 +90,17 @@ const response = await fetch( const borrowQuote = await response.json(); console.log("Borrow Quote:", borrowQuote); ``` + +### 4. Fill Optimization Tips + +Here are some tips on getting the best performance and profit from your Sprinter Stash integration: + +1. **Pre-fetch Borrow Cost** - Call `GET /type/{type}/quote` as early as possible (when detecting intents) to evaluate solver profitability. + +2. **Batch Gas Where Possible** - Bundle execution and repayment transactions to reduce gas costs. + +3. **Optimize for Slippage** - Query quotes close to execution time to reduce stale pricing or slippage-induced fills. + +4. **Handling Rate Limits** - If you hit 429s, give it a moment and retry using retry_after value. You can request higher limits via support@sprinter.tech. + +5. **Validate Transaction Hash Early** - Ensure the user intent transaction is final and not reverted before calling `/deposit/{txHash}/request`. diff --git a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx index 9cc155a..caa4cb5 100644 --- a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx +++ b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -1,7 +1,7 @@ --- id: borrow-cost-api -title: "Get the borrow cost for a liquidity transaction" -description: "Get the borrow cost for a liquidity transaction" +title: "Get the borrow cost for a credit transaction" +description: "Get the borrow cost for a credit transaction" sidebar_label: "Borrow Cost API " hide_title: true hide_table_of_contents: true @@ -21,7 +21,7 @@ import Heading from "@theme/Heading"; -A [borrow cost](/glossary#46-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow liquidity from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. +A [borrow cost](/glossary#46-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. diff --git a/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx index 9f5acbb..b0f475e 100644 --- a/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx +++ b/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -21,7 +21,7 @@ import Heading from "@theme/Heading"; A [borrow quote](/glossary#47-borrow-quote) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. -It reserves liquidity under specific conditions, allowing solvers to confidently execute the cross-chain transaction. +It reserves credit under specific conditions, allowing solvers to confidently execute the cross-chain transaction. B[Preview an estimated borrowing cost🔗] + A[Detect User Intent] --> B[Preview an estimated borrowing cost of credit🔗] B --> C[Receive Borrow Cost Estimate] C --> D{Is Cost Acceptable?} - D -- Yes --> E[Reserve liquidity and authorize the fill🔗] + D -- Yes --> E[Reserve credit and authorize the fill🔗] D -- No --> F[Abort Fill] E --> G[Borrow Liquidity from Sprinter Stash] G --> H[Perform Cross-Chain Swap/Bridge Execution] - H --> I[Repay Borrowed Liquidity + Costs] + H --> I[Repay Borrowed Credit + Costs] I --> J[Fill Complete] click B "borrow-cost-api" "Borrow Cost" @@ -51,7 +51,7 @@ style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ### For Solvers -- Reduce capital requirements by borrowing liquidity on demand. +- Reduce capital requirements by borrowing credit on demand. - Eliminate need to manage inventory across chains. - Improve execution efficiency with shared liquidity access. diff --git a/docs/docs/03-Solve/01-use-solve.md b/docs/docs/03-Solve/01-use-solve.md deleted file mode 100644 index bf72a05..0000000 --- a/docs/docs/03-Solve/01-use-solve.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -id: solvestart -title: How to use Solve -sidebar_position: 1 ---- - -## Getting Started - -1. Request an API key via the [Sprinter Solve Request Form](https://forms.gle/TCAUwcYqguQbWi3bA) -2. Review the Solve APIs ([get quote](solve-get-quote), [get route](solve-get-route-v2)) -3. Call `/v2/route` to get quote + execution data -4. Send transaction using `swap_call_data` - -### Accessing the Solve API - -- **Mainnet:** `https://swaps.sprinter.tech/mainnet` -- **Base:** `https://swaps.sprinter.te`c`h/base` - -### Authentication - -All requests must include: - -```http -X-API-Key: -``` - -## Solve Fees - -When a fixed user fee is applied through Sprinter API, revenue is shared with partners based on usage volume. - -### Fee Discount Tiers - -| Monthly Volume (USD) | Sprinter Fee (X%) | Discount | -| -------------------- | ----------------- | -------- | -| $0 - $1M | X \* 0.20 | 0% | -| $1M - $10M | X \* 0.15 | 25% | -| $10M - $50M | X \* 0.10 | 50% | -| $50M - $100M | X \* 0.075 | 62.5% | -| Over $100M | X \* 0.05 | 75% | - -### Example - -``` -User Fee = 0.875% -Monthly Volume = $150M -Sprinter Fee = 0.875% * 0.05 = 0.04375% (4.375 bps) -``` diff --git a/docs/docs/03-Solve/02-solve-quick-start.md b/docs/docs/03-Solve/02-solve-quick-start.md index feb521c..a9ad7a2 100644 --- a/docs/docs/03-Solve/02-solve-quick-start.md +++ b/docs/docs/03-Solve/02-solve-quick-start.md @@ -4,29 +4,86 @@ title: Solve API Quick Start sidebar_position: 110 --- -# 🚀 Sprinter Solve API Quick Start Guide +:::tip +Request your Solve API key to start your integration via [Sprinter Solve Request](https://forms.gle/TCAUwcYqguQbWi3bA) or contacting support@sprinter.tech +::: -A practical walkthrough of how developers can use the **Sprinter Solve API** to optimize swap execution via intent fulfillment. +Sprinter Solve enables your dApp, aggregator or protocol integration to **optimize swap execution via intent fulfillment**. ---- +This guide covers: -## 📘 Step 1: Detect a User Intent or Trade Request +1. Recap of the [Sprinter Solve Lifecycle](solve-api-quick-start#1-solve-lifecycle) +2. Requesting the estimated price and execution plan +3. Geting the finalized route and call data execution package +4. Send transaction using `swap_call_data` +5. Sprinter Solve Execution Tips -Listen for user swap requests or intent triggers in your dApp, aggregator, or protocol integration. +## 1. Solve Lifecycle ---- +
+ +```mermaid +flowchart TD + A[Intent Detected] --> B[Request estimated price and execution plan] + B --> C{Quote Acceptable/
Profitable?} + C -- No --> D[Abort or Re-query] + C -- Yes --> E[Get the finalized route and call data execution package] + E --> F[Simulate & Execute Transaction] + F --> G[Send Transaction & Finalize Fill] + +click B "solve-get-quote" "Borrow Cost" +style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold + +click E "solve-get-route-v2" "Borrow Quote" +style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold + +click F "solve-api-quick-start#4-send-transaction-using-swap_call_data" "Borrow Quote" +style F fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold +``` + +
+ +## 2. Requesting the estimated price and execution plan -## 📘 Step 2: Fetch a Quote from Solve API +For lighter integration or quote pre-fetching, call the [**Get Quote API**](solve-get-quote) to request the estimated price and execution plan before retrieving call data. -Use the `/v2/route` endpoint to fetch an optimized swap route and quote for execution. +```ts title="Example Fetch Quote Request" +cconst srcToken = "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; // USDC on Base +const dstToken = "0x4200000000000000000000000000000000000006"; // WETH on Base +const amount = "1000000"; // 1 USDC (6 decimals) -```ts title="Fetch Swap Quote" +const url = new URL("https://api.sprinter.tech/v1/solve/quote"); +url.searchParams.append("fromToken", srcToken); +url.searchParams.append("toToken", dstToken); +url.searchParams.append("amount", amount); +url.searchParams.append("fromChainId", "8453"); // Base +url.searchParams.append("toChainId", "1"); // Ethereum Mainnet + +const response = await fetch(url, { + headers: { + "X-API-Key": "", + }, +}); + +const quote = await response.json(); +console.log("Solve Quote:", quote); +``` + +## 3. Geting the finalized route and call data execution package + +Calling the [**Get Route API**](solve-get-route-v2) returns the finalized route, including call data, gas estimates and token out amounts. Use this executable call data `swap_call_data` after verifying a quote. + +- **Mainnet:** `https://swaps.sprinter.tech/mainnet` +- **Base:** `https://swaps.sprinter.tech/base` + +```ts title="Example Fetch Quote Request" const chainId = 1; // 1 = Ethereum, 8453 = Base, etc. -const srcToken = "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; // USDC -const dstToken = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; // WETH -const amount = "1000000"; // USDC with 6 decimals = 1 USDC +const srcToken = "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; // USDC on Base +const dstToken = "0x4200000000000000000000000000000000000006"; // WETH on Base +const amount = "1000000"; // 1 USDC (6 decimals) +const userAddress = "0xYourUserAddress"; // End-user or caller's address -const res = await fetch(`https://swaps.sprinter.tech/base/v2/route`, { +const response = await fetch("https://swaps.sprinter.tech/base/v2/route", { method: "POST", headers: { "Content-Type": "application/json", @@ -41,6 +98,59 @@ const res = await fetch(`https://swaps.sprinter.tech/base/v2/route`, { }), }); -const quoteData = await res.json(); -console.log("Solve API Quote:", quoteData); +const route = await response.json(); +console.log("Route:", route); ``` + +## 4. Send transaction using `swap_call_data` + +Once you've received a valid route from `/v2/route`, you'll use the `swap_call_data` in a transaction to execute the intent on-chain. + +Below is a simplified example using `ethers.js` to send the transaction from a connected signer: + +```ts title="Execute Route" +import { ethers } from "ethers"; + +const provider = new ethers.JsonRpcProvider("https://mainnet.base.org"); // or OP/Arbitrum +const signer = new ethers.Wallet("", provider); + +const routeResponse = await fetch("https://swaps.sprinter.tech/base/v2/route", { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-API-Key": "", + }, + body: JSON.stringify({ + fromToken: "USDC", + toToken: "ETH", + amount: "1000000", + fromChainId: 8453, + toChainId: 1, + intentType: "swap", + }), +}); + +const route = await routeResponse.json(); + +// Send the calldata to the target contract (Sprinter Router or intent receiver) +const tx = await signer.sendTransaction({ + to: route.to, // usually the router or intent execution contract + data: route.swap_call_data, + value: route.value || 0, // only include if route requires native gas + gasLimit: route.gasEstimate + 50000, // add buffer +}); + +console.log("Transaction hash:", tx.hash); +``` + +## 5. Sprinter Solve Execution Tips + +1. Start with `/quote` to quickly evaluate whether a fill is profitable. + +2. Use tools like Tenderly or hardhat to **simulate calldata before execution**. + +3. **Pay attention to slippage** - Quotes expire quickly. Re-query /route before execution if delayed. + +4. Use **gasEstimate for accurate costing** - whilst the Route API provides gas estimates — apply buffer when setting gas limits. + +5. **Handling Rate Limits** - If you hit 429s, give it a moment and retry using retry_after value. You can request higher limits via support@sprinter.tech. diff --git a/docs/docs/03-Solve/get-quote.api.mdx b/docs/docs/03-Solve/get-quote.api.mdx index f4cb51f..ca52f02 100644 --- a/docs/docs/03-Solve/get-quote.api.mdx +++ b/docs/docs/03-Solve/get-quote.api.mdx @@ -1,8 +1,8 @@ --- id: solve-get-quote -title: "Get Quote" +title: "Get Quot API" description: "Get a price estimation quote" -sidebar_label: "Get Quote" +sidebar_label: "Get Quote API" hide_title: true hide_table_of_contents: true api: eJztlt9v2zYQx/+VA7GHdpMb2ZHr2G+K43RGX7okBQoYXkqL54iNRCrkybVn6H8vKPpXYsfZAuxhWP1m8u745eeOp1syXaDhJLUaCtZjd0h/lJqQBUygTYws3BbrsQ9IwKEwMkFASzKvfeBhZVxww3MkNJb1RksmnctDiWbBAqZ4jqzHeK5LRbdS7cW+SRH8LugpkL5HZYE0WMwykAoEJjLnGShN9aksYDZJMeest3wSKt6E4QoGV/1W6OMBt8A3gSwZqe7gjdJgE4mK5FQmm/BvWcBoUTjN3rC+HxEad8Kfo7DRHf/2CwsYznleZM6uGe79XBBJ9e6NU+CVsSpgBh9KaVCwHpkSXwpTBYdx1td6jubqzkIYtBuUR7C1QpgsCGFAKRos840rqkQLFB5finP4LimFr+H8KxQGp3J+nFU4H/HGNG5cOmbLKKweYwvn78+bnXbUiQZn3bAb9aPognfPJt12NECBcT/qtludpggvd2jGXtpxkv8g8nHAuqS/R3hSLv5fgPthi/P4tDtptU4vB2cXYRxiux9dtjoYX3TDs9N+p/2+n7RYNXaBbKGVRevQtMJwn1DddsCWSYLWTsssW0BikBMKFrBEK0JFzosXRSaT+qGefLPOdfks9etNNN+oPFxKEXBeYEIoQJdUlLRqP1vWevINE/e/MK5BkvTKVz3MFcV/sPU8Suho9zLjrUedh6tVulhVOa/oUMLOuQAXDi29PkMDY7SBdXX4/AgkLjN7IBm76tF5OuGPM+SX9875vcy5AoNc8EmGUFtBjtbyOzzAfItXKltOp7JO1ZNicWTW1Op7bGg19wV8VrykVBv5FwpowFDNeCYFxJ+GcI+LnwB3AbYPldtQuVfgXhCaGRqv4Ce3LbcqYDlSqldjnO8cKeuxk/WQZjEpjaRFPaLFhfyIi7h0JqOx69Hr7WuHzF9q12i5FsvrRRb4r2aKXKDZfja/NOJPw4Y3eNIgfa171lNtck5g728zOcPbX+tLSTXV9UGry11/5wVMFnCecZUcjFdaFBsLcPYsYDM01ps034XvwsYEibuvWaEt5bwui5XYOyQ4OO8ut3X10ui7okI4p5Mi41K5o0qTuSA+AyPmbccBS7Ult7BcTrjFzyarKrfsRw+XFiGtKxTBelOeWTwi683VqijfwisG6IOqXSd6PKjPeFY6u3pKerW258bRIyJ2xtt/SYMf2F6U4AfArYax+2OkE1E/nGD9Alz2vGOcJFjseu01Jhdl81g/DG5YVf0AB+2RRg== @@ -19,11 +19,17 @@ import OperationTabs from "@theme/OperationTabs"; import TabItem from "@theme/TabItem"; import Heading from "@theme/Heading"; - + -Get a price estimation quote +Get the **proposed price and execution plan** for filling an intent. It includes information such as input/output amounts, fees, and gas costs and reflects the and reflects the cost, path, and feasibility of executing a swap or cross-chain action at a given moment. + +Users (or integrators) evaluate quotes to determine if they're acceptable before triggering execution. + -:::tip -Networks need to be selected via URI. See [accessing the solve API](/Solve/solvestart/#accessing-the-solve-api) for further details. -::: +Get the **finalized execution package** returned by `/v2/route` which contains all necessary data to execute a transactions. It builds on a quote by includingalldata, selected liquidity paths, slippage tolerances, and chain-specific details. -Get an executable swap route +Routes are consumed directly by solvers or smart contracts to simulate and execute cross-chain swaps or intent fills. Unlike a quote, a route is actionable. B[Request proposed price and execution plan] + B --> C{Quote Acceptable/
Profitable?} + C -- No --> D[Abort or Re-query] + C -- Yes --> E[Get the finalized route and call data execution package] + E --> F[Simulate & Execute Transaction] + F --> G[Send Transaction & Finalize Fill] + +click B "solve-get-quote" "Borrow Cost" +style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold + +click E "solve-get-route-v2" "Borrow Quote" +style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold +``` + ## Key Features & Utility ### For dApps & Wallets @@ -33,3 +55,25 @@ Seamlessly integrate our solver into intent-based protocols for: - Day 1 support for new protocol launches Feel free to contact us at hello@sprinter.tech to see how we can help your intent protocol. + +## Solve Fees + +When a fixed user fee is applied through Sprinter API, revenue is shared with partners based on usage volume. + +### Fee Discount Tiers + +| Monthly Volume (USD) | Sprinter Fee (X%) | Discount | +| -------------------- | ----------------- | -------- | +| $0 - $1M | X \* 0.20 | 0% | +| $1M - $10M | X \* 0.15 | 25% | +| $10M - $50M | X \* 0.10 | 50% | +| $50M - $100M | X \* 0.075 | 62.5% | +| Over $100M | X \* 0.05 | 75% | + +### Example + +``` +User Fee = 0.875% +Monthly Volume = $150M +Sprinter Fee = 0.875% * 0.05 = 0.04375% (4.375 bps) +``` diff --git a/docs/docs/10-glossary.md b/docs/docs/10-glossary.md index 3e19a7f..c15dc0c 100644 --- a/docs/docs/10-glossary.md +++ b/docs/docs/10-glossary.md @@ -186,11 +186,11 @@ Systems that facilitate communication between chains regardless of their underly ### 46. Borrow Cost -A **borrow cost** is the preliminary **estimated fee** a solver would incur to borrow liquidity from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is **not a binding or reserved price**. +A **borrow cost** is the preliminary **estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. ### 47. Borrow Quote -A **borrow quote** is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves liquidity under specific conditions, allowing solvers to confidently execute the cross-chain transaction. +A **borrow quote** is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves credit under specific conditions, allowing solvers to confidently execute the cross-chain transaction. ### 48. Sprinter Solve Quote From c2d81b3a0e5f0f706c28f4b07e2b99c1ac61ea61 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Thu, 8 May 2025 11:19:58 +0100 Subject: [PATCH 22/38] final draft updates with api payloads --- docs/docs/02-Stash/01-utilizing-stash.md | 88 +++++--- docs/docs/{ => 02-Stash}/02-stash-pools.md | 2 +- ...w-cost-for-a-liquidity-transaction.api.mdx | 18 +- ...ransaction-based-on-the-input-data.api.mdx | 17 +- docs/docs/02-Stash/index.md | 14 +- docs/docs/03-Solve/02-solve-quick-start.md | 92 +++----- docs/docs/03-Solve/get-quote.api.mdx | 178 --------------- docs/docs/03-Solve/get-route-v-2.api.mdx | 4 +- docs/docs/03-Solve/index.md | 8 +- .../01-Audits.md} | 6 +- docs/docs/09 -Resources/02-glossary.md | 137 ++++++++++++ .../Sprinter DOCS.code-workspace | 10 + docs/docs/10-glossary.md | 205 ------------------ 13 files changed, 282 insertions(+), 497 deletions(-) rename docs/docs/{ => 02-Stash}/02-stash-pools.md (97%) delete mode 100644 docs/docs/03-Solve/get-quote.api.mdx rename docs/docs/{09-Resources.md => 09 -Resources/01-Audits.md} (85%) create mode 100644 docs/docs/09 -Resources/02-glossary.md create mode 100644 docs/docs/09 -Resources/Sprinter DOCS.code-workspace delete mode 100644 docs/docs/10-glossary.md diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index 239f406..c9971cf 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -10,29 +10,29 @@ Request your Stash API key via [Sprinter Stash Request](https://forms.gle/kgpcQK ## As a Solver -Sprinter Stash enables solvers to **borrow credit crosschain on-demand** to execute user intents without needing pre-funded inventory. +Sprinter Stash enables solvers to **borrow crosschain credit on-demand** to execute user intents without needing pre-funded inventory. This guide covers: -1. Recap of the [Stash Solver Fill Lifecycle](use-stash#1-stash-solver-fill-lifecycle) +1. Recap of the [Stash Fill Lifecycle](use-stash#1-stash-solver-fill-lifecycle) 2. Requesting a [Credit Borrow Cost Estimate](use-stash#2-request-a-borrow-cost-estimate-optional) 3. Requesting a [Final Borrow Quote and Credit Authorization](use-stash#3-request-a-final-borrow-quote) 4. Check out the [Fill Optimization Tips](use-stash#4-fill-optimization-tips) -### 1. Stash Solver Fill Lifecycle +### 1. Stash Fill Lifecycle
```mermaid flowchart TD - A[Detect User Intent] --> B[2 - Preview an estimated borrowing cost of credit🔗] + A[Solver Detects User Intent] --> B[2 - Solver Previews estimated borrowing cost of credit /request] B --> C[Receive Borrow Cost Estimate] - C --> D{Is Cost Acceptable?} - D -- Yes --> E[3 - Reserve credit and authorize the fill🔗] + C --> D{Fill using Stash Credit?} + D -- Yes --> E[3 - Solver Reserves credit and authorize the fill] D -- No --> F[Abort Fill] - E --> G[Borrow Liquidity from Sprinter Stash] - G --> H[Perform Cross-Chain Swap/Bridge Execution] - H --> I[Repay Borrowed Credit + Costs] + E --> G[Solver Borrow Liquidity from Sprinter Stash] + G --> H[Stash Executes Cross-Chain Swap/Bridge Execution /quote] + H --> I[Intent Protocol Repays Borrowed Credit + Costs] I --> J[Fill Complete] click B "use-stash#2-request-a-borrow-cost-estimate-optional" "Borrow Cost" @@ -49,46 +49,80 @@ style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated [borrowing cost](/glossary#46-borrow-cost) for a potential fill before requesting credit. -```ts title="Fetch Borrow Cost Estimate" -const protocol = "across"; // Example: "across", "uniswapx" -const type = "swap"; // Example: "swap", "bridge" - +```ts title="Fetch Borrow Cost Estimate Example Payload" +const baseUrl = "https://api.sprinter.tech"; +const destChainId = "eip155:8453"; // eip155:8453(Base), eip155:10 (Optimism), eip155:42161 (Arbitrum) destChainId must use capid format from our configuration +const protocol = "across"; // "across" or "mayan" +const txHash = "string"; // Source chain deposit TX const response = await fetch( - `https://api.sprinter.tech/v1/liquidity/protocol/${protocol}/type/${type}/quote`, + `${baseUrl}/liquidity/chain/${destChainId}/protocol/${protocol}/deposit/${txHash}/requests`, { method: "GET", headers: { - "Content-Type": "application/json", - "X-API-Key": "", + "X-Auth-Token": "", + }, + body: { + input: callData, // encoded callData of deposit + caller: "address", // the address that will execute the borrow and fill ond destChainId }, }, ); - -const costEstimate = await response.json(); -console.log("Borrow Cost Estimate:", costEstimate); ``` ### 3. Request a Final Borrow Quote -If the estimated cost is acceptable, call the [**Borrow Quote API**](borrow-quote-api) to request a [borrow quote](/glossary#47-borrow-quote) to reserve credit and authorize the fill. +If proceeding to fill with Sprinter Stash, call the [**Borrow Quote API**](borrow-quote-api) to request a [borrow quote](/glossary#47-borrow-quote) to reserve credit and authorize the fill. This can be based on input or output amount. -```ts title="Request Final Borrow Quote" -const protocol = "across"; -const txHash = "0xabc123"; // Related transaction hash +```ts title="Request Final Borrow Quote with type ExactInput (input amount - borrow costs)" +const baseUrl = "https://api.sprinter.tech"; +const sourceChainId = "eip155:8453"; // eip155:8453(Base), eip155:10 (Optimism), eip155:42161 (Arbitrum). ChainId must use capid format from our configuration +const protocol = "across"; // "across" or "mayan" +const type = "ExactInput"; // Request will consider the amount as (input amount - borrow costs) +const amount = 10000000; // This is the ExactInput eg 1 USDC (6 decimals) +const response = await fetch( + `${baseUrl}/liquidity/chain/${sourceChainId}/protocol/${protocol}/type/${type}/quote`, + { + method: "GET", + headers: { + "X-Auth-Token": "", + }, + body: { + amount: amount, + token: "destination_token_address", // Token address + network: "eip155:10", // Destination_Chain_ID + }, + }, +); +const borrowQuote = await response.json(); +console.log("Expected amount:", borrowQuote.expectedOutput); +console.log("Borrow Cost:", borrowQuote.borrowCost); +``` + +```ts title="Request Final Borrow Quote with type ExactOutput (output amount + borrow costs)" +const baseUrl = "https://api.sprinter.tech"; +const sourceChainId = "eip155:8453"; // eip155:8453(Base), eip155:10 (Optimism), eip155:42161 (Arbitrum). ChainId must use capid format from our configuration +const protocol = "across"; // "across" or "mayan" +const type = "ExactOutput"; // Request will consider the amount as (output amount + borrow costs) +const amount = 10000000; // This is the ExactInput eg 1 USDC (6 decimals) const response = await fetch( - `https://api.sprinter.tech/v1/liquidity/protocol/${protocol}/deposit/${txHash}/request`, + `${baseUrl}/liquidity/chain/${sourceChainId}/protocol/${protocol}/type/${type}/quote`, { method: "GET", headers: { - "Content-Type": "application/json", - "X-API-Key": "", + "X-Auth-Token": "", + }, + body: { + amount: amount, + token: "destination_token_address", // Token address + network: "eip155:10", // Destination_Chiain_ID }, }, ); const borrowQuote = await response.json(); -console.log("Borrow Quote:", borrowQuote); +console.log("Expected Input:", borrowQuote.requiredInput); +console.log("Borrow Cost:", borrowQuote.borrowCost); ``` ### 4. Fill Optimization Tips diff --git a/docs/docs/02-stash-pools.md b/docs/docs/02-Stash/02-stash-pools.md similarity index 97% rename from docs/docs/02-stash-pools.md rename to docs/docs/02-Stash/02-stash-pools.md index faa1207..fd3c575 100644 --- a/docs/docs/02-stash-pools.md +++ b/docs/docs/02-Stash/02-stash-pools.md @@ -1,6 +1,6 @@ --- id: liquidity-hub-pools -title: 🅿️ Sprinter Stash Pools +title: Sprinter Stash Pools sidebar_position: 113 --- diff --git a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx index caa4cb5..16b0803 100644 --- a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx +++ b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -26,7 +26,7 @@ import Heading from "@theme/Heading"; @@ -34,6 +34,8 @@ A [borrow cost](/glossary#46-borrow-cost) is the **preliminary estimated fee** a Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. +See the [Request a Credit Borrow Cost Estimate example payload](use-stash#2-request-a-credit-borrow-cost-estimate-optional). + A [borrow quote](/glossary#47-borrow-quote) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves credit under specific conditions, allowing solvers to confidently execute the cross-chain transaction. +See the [Request Final Borrow Quote example payload](use-stash#3-request-a-final-borrow-quote). + -eip155:8453(Base),
-eip155:10 (Optimism),
-eip155:42161 (Arbitrum)", + in: "path", + name: "destChainId", + required: true, + schema: { type: "string" }, + }, + { + description: "Protocol name - across, mayan", in: "path", name: "protocol", required: true, schema: { type: "string" }, }, { - description: "Quote algorithm type (e.g., ExactInput, ExactOutput)", + description: + "Quote algorithm type:

ExactInput - Request will consider the amount as (input amount - borrow costs)

ExactOutput - Request will consider the amount as (output amount + borrow costs) ", in: "path", name: "type", required: true, diff --git a/docs/docs/02-Stash/index.md b/docs/docs/02-Stash/index.md index c805e68..ebb46db 100644 --- a/docs/docs/02-Stash/index.md +++ b/docs/docs/02-Stash/index.md @@ -19,18 +19,18 @@ Sprinter's crosschain credit protocol providing liquidity access to solvers and - **Solvers** request and borrow credit on destination instantly, [without collateral](#how-stash-enables-zero-collateral-loans), enabling seamless crosschain execution. - Once **fills are completed**, Stash receives funds on the source chain, repays the credit, and distributes profits to LPs and solvers. -### Stash Solver Fill Lifecycle +### Stash Fill Lifecycle ```mermaid flowchart TD - A[Detect User Intent] --> B[Preview an estimated borrowing cost of credit🔗] + A[Solver Detects User Intent] --> B[Solver Previews estimated borrowing cost of credit] B --> C[Receive Borrow Cost Estimate] - C --> D{Is Cost Acceptable?} - D -- Yes --> E[Reserve credit and authorize the fill🔗] + C --> D{Fill using Stash Credit?} + D -- Yes --> E[Solver Reserves credit and authorize the fill] D -- No --> F[Abort Fill] - E --> G[Borrow Liquidity from Sprinter Stash] - G --> H[Perform Cross-Chain Swap/Bridge Execution] - H --> I[Repay Borrowed Credit + Costs] + E --> G[Solver Borrow Liquidity from Sprinter Stash] + G --> H[Stash Executes Cross-Chain Swap/Bridge Execution] + H --> I[Intent Protocol Repays Borrowed Credit + Costs] I --> J[Fill Complete] click B "borrow-cost-api" "Borrow Cost" diff --git a/docs/docs/03-Solve/02-solve-quick-start.md b/docs/docs/03-Solve/02-solve-quick-start.md index a9ad7a2..bcf38f5 100644 --- a/docs/docs/03-Solve/02-solve-quick-start.md +++ b/docs/docs/03-Solve/02-solve-quick-start.md @@ -13,10 +13,9 @@ Sprinter Solve enables your dApp, aggregator or protocol integration to **optimi This guide covers: 1. Recap of the [Sprinter Solve Lifecycle](solve-api-quick-start#1-solve-lifecycle) -2. Requesting the estimated price and execution plan -3. Geting the finalized route and call data execution package -4. Send transaction using `swap_call_data` -5. Sprinter Solve Execution Tips +2. Geting the [finalized route and call data execution package](solve-api-quick-start#2-geting-the-finalized-route-and-call-data-execution-package) +3. Send transaction using [`swap_call_data`](solve-api-quick-start#3-send-transaction-using-swap_call_data) +4. Sprinter Solve [Execution Tips](solve-api-quick-start#4-sprinter-solve-execution-tips) ## 1. Solve Lifecycle @@ -31,11 +30,9 @@ flowchart TD E --> F[Simulate & Execute Transaction] F --> G[Send Transaction & Finalize Fill] -click B "solve-get-quote" "Borrow Cost" -style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold -click E "solve-get-route-v2" "Borrow Quote" -style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold +click B "solve-get-route-v2" "Borrow Quote" +style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold click F "solve-api-quick-start#4-send-transaction-using-swap_call_data" "Borrow Quote" style F fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold @@ -43,72 +40,43 @@ style F fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold
-## 2. Requesting the estimated price and execution plan - -For lighter integration or quote pre-fetching, call the [**Get Quote API**](solve-get-quote) to request the estimated price and execution plan before retrieving call data. - -```ts title="Example Fetch Quote Request" -cconst srcToken = "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; // USDC on Base -const dstToken = "0x4200000000000000000000000000000000000006"; // WETH on Base -const amount = "1000000"; // 1 USDC (6 decimals) - -const url = new URL("https://api.sprinter.tech/v1/solve/quote"); -url.searchParams.append("fromToken", srcToken); -url.searchParams.append("toToken", dstToken); -url.searchParams.append("amount", amount); -url.searchParams.append("fromChainId", "8453"); // Base -url.searchParams.append("toChainId", "1"); // Ethereum Mainnet - -const response = await fetch(url, { - headers: { - "X-API-Key": "", - }, -}); - -const quote = await response.json(); -console.log("Solve Quote:", quote); -``` - -## 3. Geting the finalized route and call data execution package +## 2. Geting the finalized route and call data execution package Calling the [**Get Route API**](solve-get-route-v2) returns the finalized route, including call data, gas estimates and token out amounts. Use this executable call data `swap_call_data` after verifying a quote. - **Mainnet:** `https://swaps.sprinter.tech/mainnet` - **Base:** `https://swaps.sprinter.tech/base` -```ts title="Example Fetch Quote Request" -const chainId = 1; // 1 = Ethereum, 8453 = Base, etc. -const srcToken = "0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; // USDC on Base -const dstToken = "0x4200000000000000000000000000000000000006"; // WETH on Base -const amount = "1000000"; // 1 USDC (6 decimals) -const userAddress = "0xYourUserAddress"; // End-user or caller's address - -const response = await fetch("https://swaps.sprinter.tech/base/v2/route", { - method: "POST", - headers: { - "Content-Type": "application/json", - "X-API-Key": "", - }, - body: JSON.stringify({ - fromToken: srcToken, - toToken: dstToken, - amount: amount, - slippage: 0.005, // 0.5% slippage tolerance - user: "", - }), -}); - -const route = await response.json(); -console.log("Route:", route); +```ts title="Example Fetch Quote Request Payload" +const AMOUNT_IN; // the amount of token that you want exchange in their decimals denomination +const TOKEN_IN_ADDRESS; // token_in_address +const TOKEN_OUT_ADDRESS; // token_out_addres - tokens that you want to receieve +const SLIPPAGE; // the slipapge that you want to allow for the swap ( 0.5 - 2%) +const TARGET_DURATION; + +const fetchRoute = async () => { + const response = await fetch( + "https://swaps.sprinter.tech/mainnet/v2/route?amount_in=[AMOUNT_IN]&token_in=[TOKEN_IN_ADDRESS]&token_out=[TOKEN_OUT_ADDRESS]&slippage=[SLIPPAGE]&target_duration_ms=[TARGET_DURATION]", + { + method: "GET", + headers: { + "X-API-Key": "your_api_key_here", + }, + }, + ); + + const data = await response.json(); + return data; +}; ``` -## 4. Send transaction using `swap_call_data` +## 3. Send transaction using `swap_call_data` Once you've received a valid route from `/v2/route`, you'll use the `swap_call_data` in a transaction to execute the intent on-chain. Below is a simplified example using `ethers.js` to send the transaction from a connected signer: -```ts title="Execute Route" +```ts title="Example Execute Route Payload" import { ethers } from "ethers"; const provider = new ethers.JsonRpcProvider("https://mainnet.base.org"); // or OP/Arbitrum @@ -143,7 +111,7 @@ const tx = await signer.sendTransaction({ console.log("Transaction hash:", tx.hash); ``` -## 5. Sprinter Solve Execution Tips +## 4. Sprinter Solve Execution Tips 1. Start with `/quote` to quickly evaluate whether a fill is profitable. diff --git a/docs/docs/03-Solve/get-quote.api.mdx b/docs/docs/03-Solve/get-quote.api.mdx deleted file mode 100644 index ca52f02..0000000 --- a/docs/docs/03-Solve/get-quote.api.mdx +++ /dev/null @@ -1,178 +0,0 @@ ---- -id: solve-get-quote -title: "Get Quot API" -description: "Get a price estimation quote" -sidebar_label: "Get Quote API" -hide_title: true -hide_table_of_contents: true -api: eJztlt9v2zYQx/+VA7GHdpMb2ZHr2G+K43RGX7okBQoYXkqL54iNRCrkybVn6H8vKPpXYsfZAuxhWP1m8u745eeOp1syXaDhJLUaCtZjd0h/lJqQBUygTYws3BbrsQ9IwKEwMkFASzKvfeBhZVxww3MkNJb1RksmnctDiWbBAqZ4jqzHeK5LRbdS7cW+SRH8LugpkL5HZYE0WMwykAoEJjLnGShN9aksYDZJMeest3wSKt6E4QoGV/1W6OMBt8A3gSwZqe7gjdJgE4mK5FQmm/BvWcBoUTjN3rC+HxEad8Kfo7DRHf/2CwsYznleZM6uGe79XBBJ9e6NU+CVsSpgBh9KaVCwHpkSXwpTBYdx1td6jubqzkIYtBuUR7C1QpgsCGFAKRos840rqkQLFB5finP4LimFr+H8KxQGp3J+nFU4H/HGNG5cOmbLKKweYwvn78+bnXbUiQZn3bAb9aPognfPJt12NECBcT/qtludpggvd2jGXtpxkv8g8nHAuqS/R3hSLv5fgPthi/P4tDtptU4vB2cXYRxiux9dtjoYX3TDs9N+p/2+n7RYNXaBbKGVRevQtMJwn1DddsCWSYLWTsssW0BikBMKFrBEK0JFzosXRSaT+qGefLPOdfks9etNNN+oPFxKEXBeYEIoQJdUlLRqP1vWevINE/e/MK5BkvTKVz3MFcV/sPU8Suho9zLjrUedh6tVulhVOa/oUMLOuQAXDi29PkMDY7SBdXX4/AgkLjN7IBm76tF5OuGPM+SX9875vcy5AoNc8EmGUFtBjtbyOzzAfItXKltOp7JO1ZNicWTW1Op7bGg19wV8VrykVBv5FwpowFDNeCYFxJ+GcI+LnwB3AbYPldtQuVfgXhCaGRqv4Ce3LbcqYDlSqldjnO8cKeuxk/WQZjEpjaRFPaLFhfyIi7h0JqOx69Hr7WuHzF9q12i5FsvrRRb4r2aKXKDZfja/NOJPw4Y3eNIgfa171lNtck5g728zOcPbX+tLSTXV9UGry11/5wVMFnCecZUcjFdaFBsLcPYsYDM01ps034XvwsYEibuvWaEt5bwui5XYOyQ4OO8ut3X10ui7okI4p5Mi41K5o0qTuSA+AyPmbccBS7Ult7BcTrjFzyarKrfsRw+XFiGtKxTBelOeWTwi683VqijfwisG6IOqXSd6PKjPeFY6u3pKerW258bRIyJ2xtt/SYMf2F6U4AfArYax+2OkE1E/nGD9Alz2vGOcJFjseu01Jhdl81g/DG5YVf0AB+2RRg== -sidebar_class_name: "get api-method" -info_path: ../src/api/generated/solve/swap-by-blanc -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - -Get the **proposed price and execution plan** for filling an intent. It includes information such as input/output amounts, fees, and gas costs and reflects the and reflects the cost, path, and feasibility of executing a swap or cross-chain action at a given moment. - -Users (or integrators) evaluate quotes to determine if they're acceptable before triggering execution. - - - - - - - - diff --git a/docs/docs/03-Solve/get-route-v-2.api.mdx b/docs/docs/03-Solve/get-route-v-2.api.mdx index 9ad33f5..5658c5e 100644 --- a/docs/docs/03-Solve/get-route-v-2.api.mdx +++ b/docs/docs/03-Solve/get-route-v-2.api.mdx @@ -27,9 +27,9 @@ import Heading from "@theme/Heading"; -Get the **finalized execution package** returned by `/v2/route` which contains all necessary data to execute a transactions. It builds on a quote by includingalldata, selected liquidity paths, slippage tolerances, and chain-specific details. +Get the **finalized execution package** returned by `/v2/route` which contains all necessary data to execute a transaction. It builds on a quote by including calldata, selected liquidity paths, slippage tolerances, and chain-specific details. -Routes are consumed directly by solvers or smart contracts to simulate and execute cross-chain swaps or intent fills. Unlike a quote, a route is actionable. +Routes are consumed directly by solvers or smart contracts to simulate and execute cross-chain swaps or intent fills. B[Request proposed price and execution plan] + A[Intent Detected] --> B[Request estimated price and execution plan] B --> C{Quote Acceptable/
Profitable?} C -- No --> D[Abort or Re-query] C -- Yes --> E[Get the finalized route and call data execution package] E --> F[Simulate & Execute Transaction] F --> G[Send Transaction & Finalize Fill] -click B "solve-get-quote" "Borrow Cost" -style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold -click E "solve-get-route-v2" "Borrow Quote" -style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold +click B "solve-get-route-v2" "Borrow Quote" +style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ``` ## Key Features & Utility diff --git a/docs/docs/09-Resources.md b/docs/docs/09 -Resources/01-Audits.md similarity index 85% rename from docs/docs/09-Resources.md rename to docs/docs/09 -Resources/01-Audits.md index 3fdd565..05770e1 100644 --- a/docs/docs/09-Resources.md +++ b/docs/docs/09 -Resources/01-Audits.md @@ -1,7 +1,7 @@ --- -id: resources -title: Resources -sidebar_position: 9 +id: Audit +title: Sprinter Audits +sidebar_position: 11 --- ## Audits diff --git a/docs/docs/09 -Resources/02-glossary.md b/docs/docs/09 -Resources/02-glossary.md new file mode 100644 index 0000000..a4c226c --- /dev/null +++ b/docs/docs/09 -Resources/02-glossary.md @@ -0,0 +1,137 @@ +--- +id: glossary +title: Sprinter Glossary +sidebar_position: 12 +--- + +### Account Abstraction (AA) + +A design that moves away from traditional externally owned accounts (EOAs) and allows more flexible wallet interactions. + +### Bridges + +Protocols that facilitate asset and data transfer between different blockchain networks. Bridges can be trust-minimized (e.g., ZK-proofs, MPC) or centralized. + +### Crosschain Finality + +Ensuring that transactions on one blockchain are finalized and verifiable on another without rollback risks. + +### Crosschain Governance + +Systems that enable decentralized governance across multiple chains without requiring users to vote on each network separately. + +### Crosschain Messaging + +A communication layer that enables smart contracts and applications on different blockchains to exchange messages and trigger actions. + +### Decentralized Order Flow + +A distributed mechanism where the process is open, permissionless, and avoids reliance on a central entity (such as a centralized exchange) + +### Execution Environments + +Different blockchain execution layers (e.g., EVM, WASM) that need to be abstracted for smooth multi-chain interactions. + +### Executable Intents + +Intents that include conditions and constraints to ensure execution only happens when all state change criteria are met. + +### Fair Ordering Protocols + +Systems that prevent MEV extraction and ensure user transactions are processed fairly in intent-based architectures. + +### Fill + +A fill represents the full lifecycle: Detecting a user intent ➔ Borrowing liquidity ➔ Executing the transaction ➔ Repaying liquidity ➔ Realizing solver and protocol profits. + +### Gas Abstraction + +A mechanism where users don’t need to hold native tokens to pay for gas fees, allowing transactions to be executed with alternative assets. + +### Intent Aggregation + +The process of bundling multiple user intents to optimize execution costs and efficiency. + +### Intent Standardization + +The process of creating common formats for intent expression so that multiple solvers can compete on execution. + +### Intent Systems + +A model where users specify desired outcomes, and solvers or order flow networks execute transactions accordingly. + +### Intent-Based Arbitrage + +Arbitrage that is facilitated through intents, allowing solvers or execution agents to optimize price discrepancies across multiple venues or chains without needing the user to manually define trade paths. + +### Interop + +The ability of multiple blockchain networks to communicate and share information in a seamless, trust-minimized, and permissionless way. This enables assets, smart contracts, and transactions to interact across chains without requiring users to manage complex bridging processes. + +### Liquidity Mining + +Incentivizing users to provide liquidity to decentralized protocols, crucial for ensuring deep liquidity in interoperable ecosystems. + +### MEV (Maximal Extractable Value) + +The value miners, validators, or solvers can extract by reordering transactions, with growing importance in MEV-resistant routing across chains. + +### Order Flow Auctions + +A mechanism where solvers compete to execute user intents by offering the most efficient execution path. + +### Recursive SNARKs + +A cryptographic method for verifying multiple proofs efficiently, often used for crosschain validation. + +### Solver Competition + +A model where multiple solvers bid to execute a user’s intent based on optimal execution parameters. + +### Solver Networks + +Decentralized networks of solvers that execute user intents efficiently while minimizing costs and MEV risks. + +### Solvers + +Automated agents that find and execute the most efficient way to fulfill a user’s intent, optimizing for cost, speed, and security. + +### Sprinter Solve Route + +Gets the finalized execution package returned by `/v2/route` which contains all necessary data to execute a transaction. It builds on a quote by including calldata, selected liquidity paths, slippage tolerances, and chain-specific details. Routes are consumed directly by solvers or smart contracts to simulate and execute cross-chain swaps or intent fills. + +### Stash Borrow Cost + +A borrow cost is the preliminary **estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. + +### Stash Borrow Quote + +A **borrow quote** is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves credit under specific conditions, allowing solvers to confidently execute the crosschain transaction. + +### State Proofs + +Cryptographic proofs that verify the state of one blockchain on another without needing a centralized validator. + +### Swaps + +Asset exchanges that can occur within a single chain or across multiple chains using interoperability protocols. + +### Threshold Signature Scheme (TSS) + +A security mechanism where multiple signatures are required to execute a transaction across chains. + +### Threshold Signatures (TSS) + +A cryptographic scheme used in cross transactions to prevent single points of failure. + +### Trust-Minimized Interoperability + +A security model that ensures crosschain transactions can be verified without relying on a single centralized authority. + +### Unified Liquidity Pools + +Crosschain pools that allow users to access liquidity seamlessly without needing to bridge assets manually. + +### Universal Smart Accounts + +Wallet accounts that function across multiple blockchains and support advanced execution logic. diff --git a/docs/docs/09 -Resources/Sprinter DOCS.code-workspace b/docs/docs/09 -Resources/Sprinter DOCS.code-workspace new file mode 100644 index 0000000..9e0bde5 --- /dev/null +++ b/docs/docs/09 -Resources/Sprinter DOCS.code-workspace @@ -0,0 +1,10 @@ +{ + "folders": [ + { + "path": "../../..", + }, + { + "path": "../../..", + }, + ], +} diff --git a/docs/docs/10-glossary.md b/docs/docs/10-glossary.md deleted file mode 100644 index c15dc0c..0000000 --- a/docs/docs/10-glossary.md +++ /dev/null @@ -1,205 +0,0 @@ ---- -id: glossary -title: Sprinter Glossary -sidebar_position: 10 ---- - -### 1. Solvers - -Automated agents that find and execute the most efficient way to fulfill a user’s intent, optimizing for cost, speed, and security. - -### 2. Intent Systems - -A model where users specify desired outcomes, and solvers or order flow networks execute transactions accordingly. - -### 3. MEV (Maximal Extractable Value) - -The value miners, validators, or solvers can extract by reordering transactions, with growing importance in MEV-resistant routing across chains. - -### 4. Liquidity Mining - -Incentivizing users to provide liquidity to decentralized protocols, crucial for ensuring deep liquidity in interoperable ecosystems. - -### 5. Swaps - -Asset exchanges that can occur within a single chain or across multiple chains using interoperability protocols. - -### 6. Interop - -The ability of multiple blockchain networks to communicate and share information in a seamless, trust-minimized, and permissionless way. - -### 7. Atomic Swaps - -A mechanism that allows users to exchange assets across different blockchains in a trustless manner without intermediaries. - -### 8. Bridges - -Protocols that facilitate asset and data transfer between different blockchain networks. Bridges can be trust-minimized (e.g., ZK-proofs, MPC) or centralized. - -### 9. Cross-Chain Messaging (CCM) - -A communication layer that enables smart contracts and applications on different blockchains to exchange messages and trigger actions. - -### 10. Trust-Minimized Interoperability - -A security model that ensures cross-chain transactions can be verified without relying on a single centralized authority. - -### 11. State Proofs - -Cryptographic proofs that verify the state of one blockchain on another without needing a centralized validator. - -### 12. Order Flow Auctions (OFAs) - -A mechanism where solvers compete to execute user intents by offering the most efficient execution path. - -### 13. Commit-Reveal Schemes - -A cryptographic technique where users commit to an intent before revealing execution details to prevent frontrunning. - -### 14. Solver Competition - -A model where multiple solvers bid to execute a user’s intent based on optimal execution parameters. - -### 15. Fair Ordering Protocols - -Systems that prevent MEV extraction and ensure user transactions are processed fairly in intent-based architectures. - -### 16. Flow Isolation - -A technique used to prevent solver collusion and ensure that intents remain private until execution. - -### 17. Meta-Transactions - -Transactions that are relayed and executed on behalf of a user, abstracting away gas fees and network complexity. - -### 18. Gas Abstraction - -A mechanism where users don’t need to hold native tokens to pay for gas fees, allowing transactions to be executed with alternative assets. - -### 19. Account Abstraction (AA) - -A design that moves away from traditional externally owned accounts (EOAs) and allows more flexible wallet interactions. - -### 20. Unified Liquidity Pools - -Cross-chain pools that allow users to access liquidity seamlessly without needing to bridge assets manually. - -### 21. Execution Environments - -Different blockchain execution layers (e.g., EVM, WASM) that need to be abstracted for smooth multi-chain interactions. - -### 22. Threshold Signatures (TSS) - -A cryptographic scheme used in cross-chain transactions to prevent single points of failure. - -### 23. Rollup Composability - -The ability of rollups to interact with each other and with Layer 1 chains in a seamless way. - -### 24. Hybrid Custodial & Non-Custodial Bridges - -Models that combine elements of centralized and decentralized bridge security to improve trust minimization. - -### 25. Cross-Chain Governance - -Systems that enable decentralized governance across multiple chains without requiring users to vote on each network separately. - -### 26. Cross-Domain MEV - -The study of how maximal extractable value (MEV) can be exploited or mitigated across different blockchain networks. - -### 27. Cross-Chain Finality - -Ensuring that transactions on one blockchain are finalized and verifiable on another without rollback risks. - -### 28. Recursive SNARKs - -A cryptographic method for verifying multiple proofs efficiently, often used for cross-chain validation. - -### 29. Bridgeless Interoperability - -A model where assets do not need to be explicitly bridged but are instead referenced and executed natively across chains. - -### 30. Atomic Composability - -The ability to execute transactions in a single atomic operation, ensuring all steps succeed or fail together. - -### 31. Shared Security Models - -Mechanisms where smaller chains inherit security from a larger, more established network. - -### 32. Intent Standardization - -The process of creating common formats for intent expression so that multiple solvers can compete on execution. - -### 33. Solver Networks - -Decentralized networks of solvers that execute user intents efficiently while minimizing costs and MEV risks. - -### 34. Executable Intents - -Intents that include conditions and constraints to ensure execution only happens when all state change criteria are met. - -### 35. Decentralized Order Flow - -A distributed mechanism where the process is open, permissionless, and avoids reliance on a central entity. - -### 36. Cross-Domain Intent Execution - -The ability for an intent system to execute across different execution environments (EVM, WASM, etc.). - -### 37. Bounded MEV Intents - -Intents that are designed to minimize MEV exploitation by setting strict execution conditions. - -### 38. Intent Aggregation - -The process of bundling multiple user intents to optimize execution costs and efficiency. - -### 39. Universal Smart Accounts - -Wallet accounts that function across multiple blockchains and support advanced execution logic. - -### 40. Multichain Asset Abstraction - -The ability to use a single asset representation across multiple blockchains without explicit bridging. - -### 41. Trustless Relayers - -Intermediaries that facilitate cross-chain transactions without requiring users to trust them with their assets. - -### 42. Intent-Based Arbitrage - -Arbitrage that is facilitated through intents, optimizing price discrepancies across venues without needing specific trade paths. - -### 43. Interoperable Liquidity Aggregation - -The process of dynamically managing liquidity across chains to optimize swap execution and efficiency. - -### 44. Threshold Multi-Signature (TMS) - -A security mechanism where multiple signatures are required to execute a transaction across chains. - -### 45. Consensus-Agnostic Interoperability - -Systems that facilitate communication between chains regardless of their underlying consensus mechanism (PoS, PoW, etc.). - -### 46. Borrow Cost - -A **borrow cost** is the preliminary **estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. - -### 47. Borrow Quote - -A **borrow quote** is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves credit under specific conditions, allowing solvers to confidently execute the cross-chain transaction. - -### 48. Sprinter Solve Quote - -A quote is a solver’s proposed price and execution plan for fulfilling a user's intent. It includes information such as input/output amounts, fees, and gas costs. In Sprinter, a quote is typically returned from the Solve API (/v2/route) and reflects the cost, path, and feasibility of executing a swap or cross-chain action at a given moment. Users (or integrators) evaluate quotes to determine if they're acceptable before triggering execution. - -### 49. Sprinter Solve Fill - -A fill is the successful execution of a user intent by a solver. Once a quote is accepted, the solver "fills" the intent by borrowing liquidity (via Sprinter Stash), performing the necessary transactions (swap, bridge, etc.), and finalizing the settlement on the destination chain. In Sprinter, fills represent the moment where capital moves and the solver earns fees — it's the actual fulfillment of what was quoted. - -### 50. Fill - -A fill represents the full lifecycle: Detecting a user intent ➔ Borrowing liquidity ➔ Executing the transaction ➔ Repaying liquidity ➔ Realizing solver and protocol profits. From 1e7a344ee07b87b06f0f2d1f537f0ac3375ab73d Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Thu, 8 May 2025 11:35:36 +0100 Subject: [PATCH 23/38] fix broken links on glossary --- docs/docs/02-Stash/01-utilizing-stash.md | 4 ++-- ...03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx | 2 +- ...or-a-liquidity-transaction-based-on-the-input-data.api.mdx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index c9971cf..b67a820 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -47,7 +47,7 @@ style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ### 2. Request a Credit Borrow Cost Estimate (Optional) -Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated [borrowing cost](/glossary#46-borrow-cost) for a potential fill before requesting credit. +Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated borrowing cost for a potential fill before requesting credit. ```ts title="Fetch Borrow Cost Estimate Example Payload" const baseUrl = "https://api.sprinter.tech"; @@ -71,7 +71,7 @@ const response = await fetch( ### 3. Request a Final Borrow Quote -If proceeding to fill with Sprinter Stash, call the [**Borrow Quote API**](borrow-quote-api) to request a [borrow quote](/glossary#47-borrow-quote) to reserve credit and authorize the fill. This can be based on input or output amount. +If proceeding to fill with Sprinter Stash, call the [**Borrow Quote API**](borrow-quote-api) to request a borrow quote to reserve credit and authorize the fill. This can be based on input or output amount. ```ts title="Request Final Borrow Quote with type ExactInput (input amount - borrow costs)" const baseUrl = "https://api.sprinter.tech"; diff --git a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx index 16b0803..23ba253 100644 --- a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx +++ b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -30,7 +30,7 @@ import Heading from "@theme/Heading"; context={"endpoint"} > -A [borrow cost](/glossary#46-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. +A [borrow cost](/Resources/glossary#stash-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. diff --git a/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx index c372834..bde59b9 100644 --- a/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx +++ b/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -30,10 +30,10 @@ import Heading from "@theme/Heading"; context={"endpoint"} > -A [borrow quote](/glossary#47-borrow-quote) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. +A [borrow quote](/Resources/glossary#stash-borrow-quote) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves credit under specific conditions, allowing solvers to confidently execute the cross-chain transaction. -See the [Request Final Borrow Quote example payload](use-stash#3-request-a-final-borrow-quote). +See the [Request Final Borrow Quote example payload](/Stash/use-stash#3-request-a-final-borrow-quote). Date: Fri, 9 May 2025 11:09:17 +0100 Subject: [PATCH 24/38] minor updates to example payloads --- docs/docs/02-Stash/01-utilizing-stash.md | 68 +++++++++---------- ...ansaction-based-on-the-input-data.api.mdx} | 8 ++- ...-cost-for-a-liquidity-transaction.api.mdx} | 9 ++- docs/docs/02-Stash/index.md | 4 +- docs/docs/09 -Resources/02-glossary.md | 8 +-- 5 files changed, 51 insertions(+), 46 deletions(-) rename docs/docs/02-Stash/{04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx => 03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx} (90%) rename docs/docs/02-Stash/{03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx => 04-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx} (87%) diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index b67a820..6890d07 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -15,8 +15,8 @@ Sprinter Stash enables solvers to **borrow crosschain credit on-demand** to exec This guide covers: 1. Recap of the [Stash Fill Lifecycle](use-stash#1-stash-solver-fill-lifecycle) -2. Requesting a [Credit Borrow Cost Estimate](use-stash#2-request-a-borrow-cost-estimate-optional) -3. Requesting a [Final Borrow Quote and Credit Authorization](use-stash#3-request-a-final-borrow-quote) +2. Requesting a [Credit Borrow Quote Estimate](use-stash#2-request-a-credit-borrow-quote-estimate-optional) +3. Requesting a [Final Borrow Cost and Credit Authorization](use-stash#3-request-the-final-credit-borrow-cost) 4. Check out the [Fill Optimization Tips](use-stash#4-fill-optimization-tips) ### 1. Stash Fill Lifecycle @@ -25,13 +25,13 @@ This guide covers: ```mermaid flowchart TD - A[Solver Detects User Intent] --> B[2 - Solver Previews estimated borrowing cost of credit /request] - B --> C[Receive Borrow Cost Estimate] + A[Solver Detects User Intent] --> B[2 - Solver Previews estimated borrowing /quote of credit] + B --> C[Receive Borrow Quote Estimate] C --> D{Fill using Stash Credit?} - D -- Yes --> E[3 - Solver Reserves credit and authorize the fill] + D -- Yes --> E[3 - Solver Reserves credit and authorize the fill /cost] D -- No --> F[Abort Fill] E --> G[Solver Borrow Liquidity from Sprinter Stash] - G --> H[Stash Executes Cross-Chain Swap/Bridge Execution /quote] + G --> H[Stash Executes Cross-Chain Swap/Bridge Execution /request] H --> I[Intent Protocol Repays Borrowed Credit + Costs] I --> J[Fill Complete] @@ -45,35 +45,11 @@ style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold
-### 2. Request a Credit Borrow Cost Estimate (Optional) +### 2. Request a Credit Borrow Quote Estimate (Optional) -Call the [**Borrow Cost API**](borrow-cost-api) to preview an estimated borrowing cost for a potential fill before requesting credit. +Call the [**Borrow Quote API**](borrow-quote-api) to preview an estimated borrowing cost for a potential fill before requesting credit. This can be based on input or output amount. -```ts title="Fetch Borrow Cost Estimate Example Payload" -const baseUrl = "https://api.sprinter.tech"; -const destChainId = "eip155:8453"; // eip155:8453(Base), eip155:10 (Optimism), eip155:42161 (Arbitrum) destChainId must use capid format from our configuration -const protocol = "across"; // "across" or "mayan" -const txHash = "string"; // Source chain deposit TX -const response = await fetch( - `${baseUrl}/liquidity/chain/${destChainId}/protocol/${protocol}/deposit/${txHash}/requests`, - { - method: "GET", - headers: { - "X-Auth-Token": "", - }, - body: { - input: callData, // encoded callData of deposit - caller: "address", // the address that will execute the borrow and fill ond destChainId - }, - }, -); -``` - -### 3. Request a Final Borrow Quote - -If proceeding to fill with Sprinter Stash, call the [**Borrow Quote API**](borrow-quote-api) to request a borrow quote to reserve credit and authorize the fill. This can be based on input or output amount. - -```ts title="Request Final Borrow Quote with type ExactInput (input amount - borrow costs)" +```ts title="Request Borrow Quote Estimate with type ExactInput (input amount - borrow costs)" const baseUrl = "https://api.sprinter.tech"; const sourceChainId = "eip155:8453"; // eip155:8453(Base), eip155:10 (Optimism), eip155:42161 (Arbitrum). ChainId must use capid format from our configuration const protocol = "across"; // "across" or "mayan" @@ -99,7 +75,7 @@ console.log("Expected amount:", borrowQuote.expectedOutput); console.log("Borrow Cost:", borrowQuote.borrowCost); ``` -```ts title="Request Final Borrow Quote with type ExactOutput (output amount + borrow costs)" +```ts title="Request Final Borrow Quote Estimate with type ExactOutput (output amount + borrow costs)" const baseUrl = "https://api.sprinter.tech"; const sourceChainId = "eip155:8453"; // eip155:8453(Base), eip155:10 (Optimism), eip155:42161 (Arbitrum). ChainId must use capid format from our configuration const protocol = "across"; // "across" or "mayan" @@ -125,6 +101,30 @@ console.log("Expected Input:", borrowQuote.requiredInput); console.log("Borrow Cost:", borrowQuote.borrowCost); ``` +### 3. Request the final Credit Borrow Cost + +If proceeding to fill with Sprinter Stash, call the [**Borrow Cost API**](borrow-cost-api) to request the final borrow cost to reserve credit and authorize the fill. + +```ts title="Fetch Borrow Cost Example Payload" +const baseUrl = "https://api.sprinter.tech"; +const destChainId = "eip155:8453"; // eip155:8453(Base), eip155:10 (Optimism), eip155:42161 (Arbitrum) destChainId must use capid format from our configuration +const protocol = "across"; // "across" or "mayan" +const txHash = "string"; // Source chain deposit TX +const response = await fetch( + `${baseUrl}/liquidity/chain/${destChainId}/protocol/${protocol}/deposit/${txHash}/requests`, + { + method: "GET", + headers: { + "X-Auth-Token": "", + }, + body: { + input: "callData", // encoded callData for destination ( Borrow & Fill) it also contains depositData prams for MPC validation + caller: "address", // the address that will execute the borrow and fill ond destChainId + }, + }, +); +``` + ### 4. Fill Optimization Tips Here are some tips on getting the best performance and profit from your Sprinter Stash integration: diff --git a/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx similarity index 90% rename from docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx rename to docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx index bde59b9..3c5f357 100644 --- a/docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx +++ b/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -21,7 +21,7 @@ import Heading from "@theme/Heading"; +A [borrow quote](/Resources/glossary#stash-borrow-quote) is the **preliminary estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. + +Borrow quote includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. + +See the [Request a Credit Borrow Quote Estimate example payload](use-stash#2-request-a-credit-borrow-quote-estimate-optional). + A [borrow quote](/Resources/glossary#stash-borrow-quote) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves credit under specific conditions, allowing solvers to confidently execute the cross-chain transaction. diff --git a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/04-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx similarity index 87% rename from docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx rename to docs/docs/02-Stash/04-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx index 23ba253..711a1a7 100644 --- a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx +++ b/docs/docs/02-Stash/04-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx @@ -21,7 +21,7 @@ import Heading from "@theme/Heading"; -A [borrow cost](/Resources/glossary#stash-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. +A [borrow cost](/Resources/glossary#stash-borrow-cost) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. +It reserves credit under specific conditions, allowing solvers to confidently execute the cross-chain transaction. -Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. - -See the [Request a Credit Borrow Cost Estimate example payload](use-stash#2-request-a-credit-borrow-cost-estimate-optional). +See the [Request Final Borrow Cost example payload](use-stash#3-request-the-final-credit-borrow-cost). B[Solver Previews estimated borrowing cost of credit] - B --> C[Receive Borrow Cost Estimate] + A[Solver Detects User Intent] --> B[Solver Previews Estimated Borrowing Quote of Credit] + B --> C[Receive Borrow Quote Estimate] C --> D{Fill using Stash Credit?} D -- Yes --> E[Solver Reserves credit and authorize the fill] D -- No --> F[Abort Fill] diff --git a/docs/docs/09 -Resources/02-glossary.md b/docs/docs/09 -Resources/02-glossary.md index a4c226c..e27c936 100644 --- a/docs/docs/09 -Resources/02-glossary.md +++ b/docs/docs/09 -Resources/02-glossary.md @@ -100,13 +100,13 @@ Automated agents that find and execute the most efficient way to fulfill a user Gets the finalized execution package returned by `/v2/route` which contains all necessary data to execute a transaction. It builds on a quote by including calldata, selected liquidity paths, slippage tolerances, and chain-specific details. Routes are consumed directly by solvers or smart contracts to simulate and execute cross-chain swaps or intent fills. -### Stash Borrow Cost +### Stash Borrow Quote -A borrow cost is the preliminary **estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. +A borrow quote is the preliminary **estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. Borrow quote includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. -### Stash Borrow Quote +### Stash Borrow Cost -A **borrow quote** is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves credit under specific conditions, allowing solvers to confidently execute the crosschain transaction. +A borrow cost is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. It reserves credit under specific conditions, allowing solvers to confidently execute the crosschain transaction. ### State Proofs From 29f24190a36609bfc3a913cbe8145d24c875f826 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 9 May 2025 11:51:56 +0100 Subject: [PATCH 25/38] lint --- docs/CHANGELOG.md | 4 +--- docs/docs/02-Stash/01-utilizing-stash.md | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index b21395e..c6623db 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,11 +2,9 @@ ## [0.2.0](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.1.3...docs-v0.2.0) (2025-05-08) - ### Features -* staging changes to docs ([#146](https://github.com/sprintertech/sprinter-sdk/issues/146)) ([217be20](https://github.com/sprintertech/sprinter-sdk/commit/217be201118073cf5e01afedd5e6c213d10a5b5e)) - +- staging changes to docs ([#146](https://github.com/sprintertech/sprinter-sdk/issues/146)) ([217be20](https://github.com/sprintertech/sprinter-sdk/commit/217be201118073cf5e01afedd5e6c213d10a5b5e)) ### Bug Fixes diff --git a/docs/docs/02-Stash/01-utilizing-stash.md b/docs/docs/02-Stash/01-utilizing-stash.md index 9b39618..6a35059 100644 --- a/docs/docs/02-Stash/01-utilizing-stash.md +++ b/docs/docs/02-Stash/01-utilizing-stash.md @@ -45,7 +45,6 @@ style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold
- ### 2. Request a Credit Borrow Quote Estimate (Optional) Call the [**Borrow Quote API**](borrow-quote-api) to preview an estimated borrowing cost for a potential fill before requesting credit. This can be based on input or output amount. From 4db02ebe673bfd56e8dac7a37746076afea818ea Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 9 May 2025 15:38:32 +0100 Subject: [PATCH 26/38] type fixes --- ...w-cost-for-a-liquidity-transaction.api.mdx | 136 ---------------- ...ransaction-based-on-the-input-data.api.mdx | 2 +- ...ransaction-based-on-the-input-data.api.mdx | 148 ------------------ 3 files changed, 1 insertion(+), 285 deletions(-) delete mode 100644 docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx delete mode 100644 docs/docs/02-Stash/04-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx diff --git a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx deleted file mode 100644 index 23ba253..0000000 --- a/docs/docs/02-Stash/03-get-the-borrow-cost-for-a-liquidity-transaction.api.mdx +++ /dev/null @@ -1,136 +0,0 @@ ---- -id: borrow-cost-api -title: "Get the borrow cost for a credit transaction" -description: "Get the borrow cost for a credit transaction" -sidebar_label: "Borrow Cost API " -hide_title: true -hide_table_of_contents: true -api: eJzNVk2P00AM/Ssjn0CapQjBJTcWIUAggdByqnpwE28ykMxkPc62VZT/jpyPbVrCwu4B0UsnE4/9bL95TgsZxZRdLS54SOAdiZGCzDYwh51JQxRzHdigKd1N4zInByOMPmLan7BQI2NFQhwhWbdn7r5wkJCGEiw4fa5RCrDgsSJ9Or5lumkcUwaJcEMWYlpQhZC0IIdabaOw8zl0nT2PcXWEYwqMRY9Xc8ioDtHJcmzZv8dYPCjyZjCmKJchO6hFGryQF11iXZcuRUWx+h4VWHuPq86eJeF83YjJUNA8YSrx0K+fLuDbX8QX4SLcEpcBs2m/U8NYBx8pasAXz5/r32mQzx/B/j3m07OXM0JE4SaVhsnsnBQGzdblzz54MUw1UyQvlBmMZkzXaqNrYnEDtoFbb0KUhdJYuCPalxDKRQsffEqLb6LLPSqyRebMarmeoziPOUWY+9vYyV/YfqdUtImdhZdLdb7EzIxMMVlDRoJx/hZLl5mhz4FN5WJ0Pjez6/OA3pwWNKNtky/Wg5gD/7kWg4PJ/DepvlpK9YMXYo+licS3xGbw8F9n0lkQzFWt4NPUdrUcLtYO2avjBD7XxD1qk5MkqzuKrCbZWrXTqluNWrNqB13pVlP/C4ymakpxdUnmKB+arwXaC/nogh+08wcdIDnDYeEWy4b+BR4VuIqkCBkkkJP04i4FJPDIYGBBG/71KJpv91jV5ax/qs3XYdJSTJUx2iAnvZWmTxwHrikN6hClwp5Do5A/fGKdMHgm4o9wNbJLaC+rukTnFWPDvWwNtVsftWUQwmniJbP1cVIlJ3NJa7ixUPRSuYa23WKkb1x2nW7fNMQHSNYb5Qg73GrJdAS7qOsMkmssI92T8JOv49V5amaTejGpcRP9YUZJsCNn73Lpx/Nj4v/FFH8ErrGa3aazUBBmxLOL9mbAcXGlLo6Hf9ErzWk48TpNqZZ7bed36N3bK7CwHT8WqpDpEcaddhd3A87Ql6UXv36vhRJ93mCutoNL/f0EE19l6w== -sidebar_class_name: "get api-method" -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - -A [borrow cost](/Resources/glossary#stash-borrow-cost) is the **preliminary estimated fee** a solver would incur to borrow credit from Sprinter Stash. It is returned off-chain via the Stash API and helps solvers determine if pursuing a fill is profitable. - -Borrow cost includes expected gas, risk premiums, protocol fees, and capital access costs — but it is not a binding or reserved price. - -See the [Request a Credit Borrow Cost Estimate example payload](use-stash#2-request-a-credit-borrow-cost-estimate-optional). - - - - - - - - diff --git a/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx index 3c5f357..1585472 100644 --- a/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx +++ b/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -21,7 +21,7 @@ import Heading from "@theme/Heading"; - - - -A [borrow quote](/Resources/glossary#stash-borrow-quote) is the final, **authorized borrowing offer** issued by Sprinter Stash when a solver decides to proceed with a fill. -It reserves credit under specific conditions, allowing solvers to confidently execute the cross-chain transaction. - -See the [Request Final Borrow Quote example payload](/Stash/use-stash#3-request-a-final-borrow-quote). - - - --eip155:8453(Base),
-eip155:10 (Optimism),
-eip155:42161 (Arbitrum)", - in: "path", - name: "destChainId", - required: true, - schema: { type: "string" }, - }, - { - description: "Protocol name - across, mayan", - in: "path", - name: "protocol", - required: true, - schema: { type: "string" }, - }, - { - description: - "Quote algorithm type:

ExactInput - Request will consider the amount as (input amount - borrow costs)

ExactOutput - Request will consider the amount as (output amount + borrow costs) ", - in: "path", - name: "type", - required: true, - schema: { type: "string" }, - }, - { - description: - "Destination Network ID (optional, defaults to the network from the request body)", - in: "query", - name: "network", - schema: { type: "integer" }, - }, - ]} ->
- - - - From 53cea03deaaab3eed791096c8cc70920c64a2a7c Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 9 May 2025 15:55:30 +0100 Subject: [PATCH 27/38] fix to types --- ...-for-a-liquidity-transaction-based-on-the-input-data.api.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx b/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx index 1585472..f31a69a 100644 --- a/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx +++ b/docs/docs/02-Stash/03-get-the-borrow-quote-for-a-liquidity-transaction-based-on-the-input-data.api.mdx @@ -21,7 +21,7 @@ import Heading from "@theme/Heading"; Date: Fri, 9 May 2025 16:23:19 +0100 Subject: [PATCH 28/38] . --- docs/src/css/custom.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 5861ef0..579d70b 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -22,6 +22,8 @@ --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); } + + /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme="dark"] { --ifm-color-primary: #ff9b43; From f20300f73f88f90b7d9e6cd6e710eb8f088aa930 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 9 May 2025 16:30:20 +0100 Subject: [PATCH 29/38] lint --- docs/src/css/custom.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 579d70b..5861ef0 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -22,8 +22,6 @@ --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); } - - /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme="dark"] { --ifm-color-primary: #ff9b43; From 98405053d3a417f247e17254203986bdb58da429 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 16 May 2025 10:52:30 +0200 Subject: [PATCH 30/38] update to standard usdcpool address --- docs/docs/02-Stash/02-stash-pools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/02-Stash/02-stash-pools.md b/docs/docs/02-Stash/02-stash-pools.md index fd3c575..1dae723 100644 --- a/docs/docs/02-Stash/02-stash-pools.md +++ b/docs/docs/02-Stash/02-stash-pools.md @@ -30,7 +30,7 @@ Deployed across multiple chains, these on-chain vaults serve solver requests. `0x7C255279c098fdF6c3116D2BecD9978002c09f4b` - **Standard USDC Pool** (Base, OP, Arbitrum): - `0xB58Bb9643884abbbad64FA7eBcD9978002c09f4b` + `0xB58Bb9643884abbbad64FA7eBc874c5481E5c032` ### Functionality From af2dafa0f2962d9d1ae1e112a081ab47aa257100 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 16 May 2025 16:39:47 +0200 Subject: [PATCH 31/38] fix: add MPC details to sprinter pools --- docs/docs/02-Stash/02-stash-pools.md | 31 ++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/docs/docs/02-Stash/02-stash-pools.md b/docs/docs/02-Stash/02-stash-pools.md index 1dae723..a78a929 100644 --- a/docs/docs/02-Stash/02-stash-pools.md +++ b/docs/docs/02-Stash/02-stash-pools.md @@ -4,9 +4,9 @@ title: Sprinter Stash Pools sidebar_position: 113 --- -# Sprinter Stash Pools +# Sprinter Stash -Central to both Sprinter Stash is the **Sprinter Stash Pools and Liquidity Hub**—the smart contract that manages and distributes liquidity. +Central to both Sprinter Stash is the **Sprinter Liquidity Hub and Stash Pools**—the smart contracts that manages and distributes liquidity. ## Liquidity Hub @@ -38,3 +38,30 @@ Deployed across multiple chains, these on-chain vaults serve solver requests. - **Collateral-Free Borrowing:** Solvers access liquidity backed by hub-signed approvals. - **Rebalancing:** Liquidity is auto-optimized across chains. - **Risk Management:** Protocol maintains loan-to-value ratios to ensure solvency. + +## Liquidity Authorization via MPC + +Sprinter Stash relies on a secure **Multi-Party Computation (MPC)** network to authorize the release of credit and liquidity during cross-chain operations. + +### What the MPC Does + +- **Signs liquidity quotes**: When a solver calls the Stash API and is approved for a fill, the MPC co-signs the authorization. +- **Authorizes cross-chain releases**: The MPC signs messages that unlock liquidity from remote vaults (e.g., on Base, Arbitrum). +- **Enforces protocol limits**: MPC logic verifies borrowing caps, rate limits, and repayment preconditions before authorizing transactions. + +### Why MPC Matters + +- **Trust-Minimized Security**: No single signer can approve a transfer — it requires a quorum (e.g. 3-of-5 or 4-of-7 threshold). +- **Decentralized Control**: The MPC signer set is governed on-chain and can evolve over time as governance decentralizes. +- **Programmable Logic**: Validators inside the MPC check for vault solvency, repayment windows, and risk heuristics before signing. + +### Governance & Oversight + +The [**Super Admin Multisig**](/governance#2-super-admin-multisig) manages: +- Rotation or upgrade of MPC key shares +- Approval and removal of validator nodes +- Emergency pauses or overrides to protect protocol funds + +The [**Operations Multisig**](/governance#1-operations-admin-multisig) may interact with MPC flows for day-to-day liquidity tuning, such as temporarily adjusting caps or triggering manual resets if required. + +> Note: MPC signing happens off-chain but is fully verifiable and auditable via Sprinter’s on-chain replay logs and relay receipts. From 6da8e7bb94862b91ad53ed787a50a10c5a9e853d Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Fri, 16 May 2025 16:50:36 +0200 Subject: [PATCH 32/38] lint / prettier --- docs/CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 23c5a45..d65938d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -18,8 +18,7 @@ ### Features - -* **docs:** add improved Stash API Quick Start ([#153](https://github.com/sprintertech/sprinter-sdk/issues/153)) ([f19c411](https://github.com/sprintertech/sprinter-sdk/commit/f19c411311d60f0f8af76590d0435e9d7716bad8)) +- **docs:** add improved Stash API Quick Start ([#153](https://github.com/sprintertech/sprinter-sdk/issues/153)) ([f19c411](https://github.com/sprintertech/sprinter-sdk/commit/f19c411311d60f0f8af76590d0435e9d7716bad8)) ## [0.2.0](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.1.3...docs-v0.2.0) (2025-05-08) From a52b5adfc2d267569eb42f18c7e290160309b2bf Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Mon, 19 May 2025 10:42:59 +0200 Subject: [PATCH 33/38] run lint --- docs/CHANGELOG.md | 6 ++---- docs/docs/02-Stash/02-stash-pools.md | 3 ++- docs/src/css/custom.css | 2 ++ packages/react/CHANGELOG.md | 7 ++----- packages/sdk/CHANGELOG.md | 7 ++----- 5 files changed, 10 insertions(+), 15 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d65938d..30dedae 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,17 +2,15 @@ ## [0.3.2](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.3.1...docs-v0.3.2) (2025-05-16) - ### Bug Fixes -* updated standard usdc pool address ([#157](https://github.com/sprintertech/sprinter-sdk/issues/157)) ([1d7f805](https://github.com/sprintertech/sprinter-sdk/commit/1d7f805851280185ef7f9627645935e4dc2cc962)) +- updated standard usdc pool address ([#157](https://github.com/sprintertech/sprinter-sdk/issues/157)) ([1d7f805](https://github.com/sprintertech/sprinter-sdk/commit/1d7f805851280185ef7f9627645935e4dc2cc962)) ## [0.3.1](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.3.0...docs-v0.3.1) (2025-05-09) - ### Bug Fixes -* **docs:** typos ([#155](https://github.com/sprintertech/sprinter-sdk/issues/155)) ([84e26e5](https://github.com/sprintertech/sprinter-sdk/commit/84e26e5f0439d8d4429f7936fd53d7d08804430e)) +- **docs:** typos ([#155](https://github.com/sprintertech/sprinter-sdk/issues/155)) ([84e26e5](https://github.com/sprintertech/sprinter-sdk/commit/84e26e5f0439d8d4429f7936fd53d7d08804430e)) ## [0.3.0](https://github.com/sprintertech/sprinter-sdk/compare/docs-v0.2.0...docs-v0.3.0) (2025-05-09) diff --git a/docs/docs/02-Stash/02-stash-pools.md b/docs/docs/02-Stash/02-stash-pools.md index a78a929..e9dd7e9 100644 --- a/docs/docs/02-Stash/02-stash-pools.md +++ b/docs/docs/02-Stash/02-stash-pools.md @@ -4,7 +4,7 @@ title: Sprinter Stash Pools sidebar_position: 113 --- -# Sprinter Stash +# Sprinter Stash Central to both Sprinter Stash is the **Sprinter Liquidity Hub and Stash Pools**—the smart contracts that manages and distributes liquidity. @@ -58,6 +58,7 @@ Sprinter Stash relies on a secure **Multi-Party Computation (MPC)** network to a ### Governance & Oversight The [**Super Admin Multisig**](/governance#2-super-admin-multisig) manages: + - Rotation or upgrade of MPC key shares - Approval and removal of validator nodes - Emergency pauses or overrides to protect protocol funds diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 5861ef0..2d79dc6 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -109,3 +109,5 @@ body { color: #ff9b43; /* Your link color inside tip */ text-decoration: underline; } + +/* For navbar search box (top right) */ diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 6019e9e..c879a44 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -2,18 +2,15 @@ ## [1.4.0](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-react-v1.3.0...sprinter-react-v1.4.0) (2025-05-09) - ### Features -* **docs:** add improved Stash API Quick Start ([#153](https://github.com/sprintertech/sprinter-sdk/issues/153)) ([f19c411](https://github.com/sprintertech/sprinter-sdk/commit/f19c411311d60f0f8af76590d0435e9d7716bad8)) +- **docs:** add improved Stash API Quick Start ([#153](https://github.com/sprintertech/sprinter-sdk/issues/153)) ([f19c411](https://github.com/sprintertech/sprinter-sdk/commit/f19c411311d60f0f8af76590d0435e9d7716bad8)) ## [1.3.0](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-react-v1.2.3...sprinter-react-v1.3.0) (2025-05-08) - ### Features -* staging changes to docs ([#146](https://github.com/sprintertech/sprinter-sdk/issues/146)) ([217be20](https://github.com/sprintertech/sprinter-sdk/commit/217be201118073cf5e01afedd5e6c213d10a5b5e)) - +- staging changes to docs ([#146](https://github.com/sprintertech/sprinter-sdk/issues/146)) ([217be20](https://github.com/sprintertech/sprinter-sdk/commit/217be201118073cf5e01afedd5e6c213d10a5b5e)) ### Bug Fixes diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index e543ca4..b70f0e7 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -2,18 +2,15 @@ ## [1.4.0](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-sdk-v1.3.0...sprinter-sdk-v1.4.0) (2025-05-09) - ### Features -* **docs:** add improved Stash API Quick Start ([#153](https://github.com/sprintertech/sprinter-sdk/issues/153)) ([f19c411](https://github.com/sprintertech/sprinter-sdk/commit/f19c411311d60f0f8af76590d0435e9d7716bad8)) +- **docs:** add improved Stash API Quick Start ([#153](https://github.com/sprintertech/sprinter-sdk/issues/153)) ([f19c411](https://github.com/sprintertech/sprinter-sdk/commit/f19c411311d60f0f8af76590d0435e9d7716bad8)) ## [1.3.0](https://github.com/sprintertech/sprinter-sdk/compare/sprinter-sdk-v1.2.4...sprinter-sdk-v1.3.0) (2025-05-08) - ### Features -* staging changes to docs ([#146](https://github.com/sprintertech/sprinter-sdk/issues/146)) ([217be20](https://github.com/sprintertech/sprinter-sdk/commit/217be201118073cf5e01afedd5e6c213d10a5b5e)) - +- staging changes to docs ([#146](https://github.com/sprintertech/sprinter-sdk/issues/146)) ([217be20](https://github.com/sprintertech/sprinter-sdk/commit/217be201118073cf5e01afedd5e6c213d10a5b5e)) ### Bug Fixes From 4309864baa5274784206e7d5569acca904d59417 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Wed, 21 May 2025 15:21:04 +0300 Subject: [PATCH 34/38] added liq mining contract --- ...2-stash-pools.md => 02-stash-contracts.md} | 25 ++++++++++++++----- docs/src/css/custom.css | 4 --- 2 files changed, 19 insertions(+), 10 deletions(-) rename docs/docs/02-Stash/{02-stash-pools.md => 02-stash-contracts.md} (62%) diff --git a/docs/docs/02-Stash/02-stash-pools.md b/docs/docs/02-Stash/02-stash-contracts.md similarity index 62% rename from docs/docs/02-Stash/02-stash-pools.md rename to docs/docs/02-Stash/02-stash-contracts.md index e9dd7e9..a954dbd 100644 --- a/docs/docs/02-Stash/02-stash-pools.md +++ b/docs/docs/02-Stash/02-stash-contracts.md @@ -1,25 +1,38 @@ --- id: liquidity-hub-pools -title: Sprinter Stash Pools +title: Sprinter Stash Contracts sidebar_position: 113 --- # Sprinter Stash -Central to both Sprinter Stash is the **Sprinter Liquidity Hub and Stash Pools**—the smart contracts that manages and distributes liquidity. +Central to Sprinter Stash are the [**Sprinter Liquidity Hub**](liquidity-hub-pools#liquidity-hub), [**Liquidity Mining**](liquidity-hub-pools#liquidity-mining-contract) and [**Stash Pools**](liquidity-hub-pools#liquidity-pools) smart contracts which manages and distributes liquidity. + +Liquidity authorization is managed and controlled by Sprinter's [**Multi-Party Computation (MPC)**](liquidity-hub-pools#liquidity-authorization-via-mpc) network. ## Liquidity Hub **Contract Address (Base):** `0xa593A9bBBc65be342FF610a01e96da2EB8539FF2` -### Responsibilities: +### Functionality: -- **Depositing Liquidity:** LPs deposit USDC → receive `spUSDC-LP` tokens. - **Allocation:** Hub allocates liquidity across supported chains based on solver demand. - **Yield:** Idle liquidity is deployed into lending protocols like Aave. - **Withdrawals:** LPs redeem their LP tokens for USDC when available. +## Liquidity Mining Contract + +**Contract Address (Base):** +`0x479D158959B59328E89f0fbF7DfeBb198c313C21` + +### Functionality: + +- **Incentive Layer** Bootstraps solver access to credit while ensuring LPs are fairly rewarded. Reward parameters can be updated through governance, and all emissions are transparently distributed on-chain. +- **Depositing Liquidity:** LPs deposit USDC → receive `spUSDC-LP` tokens. +- **Stashing** When LPs receive their `spUSDC-LP` tokens, they can stake them in this contract to participate in ongoing emissions programs. + **Multiplier incentives** — Longer lockups (e.g., 3, 6, or 9 months) offer higher SPRNT yield rates to encourage deeper liquidity commitments. + ## Liquidity Pools Deployed across multiple chains, these on-chain vaults serve solver requests. @@ -45,8 +58,8 @@ Sprinter Stash relies on a secure **Multi-Party Computation (MPC)** network to a ### What the MPC Does -- **Signs liquidity quotes**: When a solver calls the Stash API and is approved for a fill, the MPC co-signs the authorization. -- **Authorizes cross-chain releases**: The MPC signs messages that unlock liquidity from remote vaults (e.g., on Base, Arbitrum). +- **Validates and Signs liquidity quotes**: When a solver calls the Stash API and is approved for a fill, the MPC validates the intent, user deposit and then co-signs the authorization. +- **Authorizes cross-chain releases**: The MPC authorizes any transfers required for inventory management across Stash Liquidity Pools and the Liquidity Hub (e.g., on Base, Arbitrum). - **Enforces protocol limits**: MPC logic verifies borrowing caps, rate limits, and repayment preconditions before authorizing transactions. ### Why MPC Matters diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 2d79dc6..4997856 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -4,8 +4,6 @@ * work well for content-centric websites. */ -/* You can override the default Infima variables here. */ - @import url("https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500;700&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap"); @@ -109,5 +107,3 @@ body { color: #ff9b43; /* Your link color inside tip */ text-decoration: underline; } - -/* For navbar search box (top right) */ From 3c0356cbd6e5bef225cabe4db070014dafa2144d Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Tue, 27 May 2025 14:09:29 +0100 Subject: [PATCH 35/38] spelling fix --- docs/docs/01-introduction/01-introduction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/01-introduction/01-introduction.md b/docs/docs/01-introduction/01-introduction.md index 5c27a70..0130d1f 100644 --- a/docs/docs/01-introduction/01-introduction.md +++ b/docs/docs/01-introduction/01-introduction.md @@ -12,11 +12,11 @@ sidebar_position: 1 # -Sprinter envisions a decentralized, open and equitable financial system that provides opportunities for everyone. Our mission is to build the infrastructure that democratizes access to cross-chain liquidity and optimizes liquidity flows across DeFi. +Sprinter envisions a decentralized, open and equitable financial system that provides opportunities for everyone. Our mission is to build the infrastructure that democratizes access to crosschain liquidity and optimizes liquidity flows across DeFi. # What is Sprinter? -Sprinter combines solving-as-a-service infrastructure with credit-based cross-chain liquidity. It enables solvers to borrow and execute on-chain actions without pre-funded inventory, while giving dApps and protocols access to best-in-class execution routes, powered by the Project Blanc advanced solving technology. +Sprinter combines solving-as-a-service infrastructure with credit-based crosschain liquidity. It enables solvers to borrow and execute onchain actions without pre-funded inventory, while giving dApps and protocols access to best-in-class execution routes, powered by the Project Blanc advanced solving technology. ## Sprinter’s Core Products From 2b85ee6fa92ee19930e09c62a987be5e88913983 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Wed, 28 May 2025 16:03:27 +0100 Subject: [PATCH 36/38] adding sprinter solve router address --- docs/docs/03-Solve/02-solve-quick-start.md | 24 ++++++++-------------- docs/docs/03-Solve/index.md | 13 ++++++------ 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/docs/docs/03-Solve/02-solve-quick-start.md b/docs/docs/03-Solve/02-solve-quick-start.md index bcf38f5..ed0633f 100644 --- a/docs/docs/03-Solve/02-solve-quick-start.md +++ b/docs/docs/03-Solve/02-solve-quick-start.md @@ -23,19 +23,15 @@ This guide covers: ```mermaid flowchart TD - A[Intent Detected] --> B[Request estimated price and execution plan] - B --> C{Quote Acceptable/
Profitable?} - C -- No --> D[Abort or Re-query] - C -- Yes --> E[Get the finalized route and call data execution package] + A[Intent Detected] --> + E[Get the finalized route and call data execution package] E --> F[Simulate & Execute Transaction] F --> G[Send Transaction & Finalize Fill] -click B "solve-get-route-v2" "Borrow Quote" -style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold +click E "solve-get-route-v2" "Borrow Quote" +style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold -click F "solve-api-quick-start#4-send-transaction-using-swap_call_data" "Borrow Quote" -style F fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ```
@@ -102,7 +98,7 @@ const route = await routeResponse.json(); // Send the calldata to the target contract (Sprinter Router or intent receiver) const tx = await signer.sendTransaction({ - to: route.to, // usually the router or intent execution contract + to: route.to, // the router or intent execution contract eg. 0xbfc4b3546416c5a7fa857bdb31b7701bfc7a42f7 for Sprinter Solve (Mainnet, Base) data: route.swap_call_data, value: route.value || 0, // only include if route requires native gas gasLimit: route.gasEstimate + 50000, // add buffer @@ -113,12 +109,10 @@ console.log("Transaction hash:", tx.hash); ## 4. Sprinter Solve Execution Tips -1. Start with `/quote` to quickly evaluate whether a fill is profitable. +1. Use tools like Tenderly or hardhat to **simulate calldata before execution**. -2. Use tools like Tenderly or hardhat to **simulate calldata before execution**. +2. **Pay attention to slippage** - Quotes expire quickly. Re-query /route before execution if delayed. -3. **Pay attention to slippage** - Quotes expire quickly. Re-query /route before execution if delayed. +3. Use **gasEstimate for accurate costing** - whilst the Route API provides gas estimates — apply buffer when setting gas limits. -4. Use **gasEstimate for accurate costing** - whilst the Route API provides gas estimates — apply buffer when setting gas limits. - -5. **Handling Rate Limits** - If you hit 429s, give it a moment and retry using retry_after value. You can request higher limits via support@sprinter.tech. +4. **Handling Rate Limits** - If you hit 429s, give it a moment and retry using retry_after value. You can request higher limits via support@sprinter.tech. diff --git a/docs/docs/03-Solve/index.md b/docs/docs/03-Solve/index.md index 3e2adff..4b6347f 100644 --- a/docs/docs/03-Solve/index.md +++ b/docs/docs/03-Solve/index.md @@ -21,16 +21,17 @@ Sprinter Solve enables the efficient execution of intent-based Swaps through its ```mermaid flowchart TD - A[Intent Detected] --> B[Request estimated price and execution plan] - B --> C{Quote Acceptable/
Profitable?} - C -- No --> D[Abort or Re-query] - C -- Yes --> E[Get the finalized route and call data execution package] + A[Intent Detected] --> + E[Get the finalized route and call data execution package] E --> F[Simulate & Execute Transaction] F --> G[Send Transaction & Finalize Fill] -click B "solve-get-route-v2" "Borrow Quote" -style B fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold +click E "solve-get-route-v2" "Borrow Quote" +style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold + +click F "solve-api-quick-start#4-send-transaction-using-swap_call_data" "Borrow Quote" +style F fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ``` ## Key Features & Utility From f8b0963f1487084621ad0d73fc29af0c76ce4375 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Wed, 28 May 2025 16:04:03 +0100 Subject: [PATCH 37/38] adding router execution address --- docs/docs/03-Solve/index.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/docs/03-Solve/index.md b/docs/docs/03-Solve/index.md index 4b6347f..b70474f 100644 --- a/docs/docs/03-Solve/index.md +++ b/docs/docs/03-Solve/index.md @@ -21,7 +21,7 @@ Sprinter Solve enables the efficient execution of intent-based Swaps through its ```mermaid flowchart TD - A[Intent Detected] --> + A[Intent Detected] --> E[Get the finalized route and call data execution package] E --> F[Simulate & Execute Transaction] F --> G[Send Transaction & Finalize Fill] @@ -30,8 +30,6 @@ flowchart TD click E "solve-get-route-v2" "Borrow Quote" style E fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold -click F "solve-api-quick-start#4-send-transaction-using-swap_call_data" "Borrow Quote" -style F fill:#FF9B43,stroke:#333,stroke-width:2px,color:#000,font-weight:bold ``` ## Key Features & Utility From da253bc5462da6c716c20866ebf6b96fd7926641 Mon Sep 17 00:00:00 2001 From: itsbobbyz Date: Wed, 28 May 2025 16:17:38 +0100 Subject: [PATCH 38/38] lint --- docs/docs/03-Solve/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/03-Solve/index.md b/docs/docs/03-Solve/index.md index b70474f..3edb460 100644 --- a/docs/docs/03-Solve/index.md +++ b/docs/docs/03-Solve/index.md @@ -21,7 +21,7 @@ Sprinter Solve enables the efficient execution of intent-based Swaps through its ```mermaid flowchart TD - A[Intent Detected] --> + A[Intent Detected] --> E[Get the finalized route and call data execution package] E --> F[Simulate & Execute Transaction] F --> G[Send Transaction & Finalize Fill]