From 7e3e42916829e0929c4f45dff55e3a89fc0a4ea8 Mon Sep 17 00:00:00 2001 From: Seth Date: Thu, 14 Mar 2024 21:26:59 -0400 Subject: [PATCH 01/17] add: initial aave docs --- docs/Protocol/data-sources.md | 5 +- .../snapshotter-node/architecture.md | 5 + .../aavev3-dashboard/_category_.json | 8 + .../aavev3-dashboard/data-points.md | 203 ++++++++++++++++++ .../aavev3-dashboard/index.md | 24 +++ .../activity-tracking/_category_.json | 2 +- static/images/aavev3-dashboard.png | Bin 0 -> 86862 bytes 7 files changed, 244 insertions(+), 3 deletions(-) create mode 100644 docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/_category_.json create mode 100644 docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md create mode 100644 docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md create mode 100644 static/images/aavev3-dashboard.png diff --git a/docs/Protocol/data-sources.md b/docs/Protocol/data-sources.md index 18bec0b..967c268 100644 --- a/docs/Protocol/data-sources.md +++ b/docs/Protocol/data-sources.md @@ -11,11 +11,12 @@ The data sources defined by a market can be static or dynamic, depending on the ## Static Data Sources -Our implementation of a data market serves datasets to render a live Uniswap V2 dashboard. Further details about the data source configuration and snapshot schema can be found in the following section of our documentation: +Our implementation of a data market serves datasets to render live Uniswap V2 and Aave V3 dashboards. Further details about the data source configurations and snapshot schemas can be found in the following sections of our documentation: * [Building with Powerloom -- Uniswap V2 Dashboard](/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/) +* [Building with Powerloom -- Aave V3 Dashboard](/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/) -Continuing with this example, you can explore the data sources list defined as part of the Uniswap v2 specific configuration in the [`snapshotter-configs`](https://github.com/Powerloom/snapshotter-configs/blob/fcf9b852bac9694258d7afcd8beeaa4cf961c65f/projects.example.json#L1-L11) repository. +Continuing with the Uniswap V2 example, you can explore the data sources list defined as part of the Uniswap v2 specific configuration in the [`snapshotter-configs`](https://github.com/Powerloom/snapshotter-configs/blob/fcf9b852bac9694258d7afcd8beeaa4cf961c65f/projects.example.json#L1-L11) repository. ```json reference https://github.com/Powerloom/snapshotter-configs/blob/fcf9b852bac9694258d7afcd8beeaa4cf961c65f/projects.example.json#L1-L11 diff --git a/docs/build-with-powerloom/snapshotter-node/architecture.md b/docs/build-with-powerloom/snapshotter-node/architecture.md index a753302..a8e1720 100644 --- a/docs/build-with-powerloom/snapshotter-node/architecture.md +++ b/docs/build-with-powerloom/snapshotter-node/architecture.md @@ -17,6 +17,7 @@ Use case-specific logic for generating snapshots and other configurations are av * DEXs like Uniswap v2, Quickswap * Bridges like bungee.exchange, Owlto finance +* Lending markets like Aave and Compound The architecture has been designed to facilitate the seamless interchange of configuration and modules. Adapting the system to different use cases is as straightforward as changing a Git branch. @@ -25,11 +26,15 @@ You can observe the corresponding branches within [snapshotter-configs](https:// #### Snapshotter Computes * `eth_uniswapv2`: Pooler implementation for the Uniswap v2 dashboard * `eth_uniswapv2_lite`: Pooler implementation for the Uniswap v2 dashboard but without the calculation of complex aggregate data points from scratch. +* `aave`: Pooler implementation for the Aave v3 dashboard +* `aave-lite`: Pooler implementation for the Aave v3 dashboard but without the calculation of complex aggregate data points from scratch. * `zkevm_quests`: Implementation for Quests on Polygon zkEVM #### Snapshotter Configs * `eth_uniswapv2_5_pairs`: Pooler lite mode config with only 5 chosen Uniswap v2 pair contracts * `eth_uniswapv2`: Pooler config with only 180 Uniswap v2 pair contracts +* `aave`: Pooler config with all Aave v3 asset contracts +* `aave-lite`: Pooler config to be used with the aave-lite compute branch * `zkevm_quests`: Config for Quests on Polygon zkEVM ### Configuration Files diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/_category_.json b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/_category_.json new file mode 100644 index 0000000..d9552c7 --- /dev/null +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "AaveV3 Dashboard", + "position": 1, + "link": { + "type": "generated-index", + "description": "AaveV3 Dashboard Implementation using Powerloom protocol" + } + } \ No newline at end of file diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md new file mode 100644 index 0000000..3aaaaf8 --- /dev/null +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md @@ -0,0 +1,203 @@ +--- +sidebar_position: 1 +--- + +# Datapoints + +![AaveV3 Dashboard Powerloom](/images/aavev3-dashboard.png) + +In AaveV3-Pooler, data points are specific, quantifiable elements derived from Aave V3 lending activities. +Each snapshot inherits `Snapshot Base` which looks something like this +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L9-L17 +``` + +The following type of Base Snapshots are generated for the Aave V3 Dashboard + +**1. Asset Metrics Snapshot:** + +The total supplied and borrowed amounts, supply and borrow interest rates, and the indices used to compute future rate changes. +The asset snapshot looks something like this: +```python reference +class AavePoolTotalAssetSnapshot(SnapshotBase): + totalAToken: Dict[ + str, + AaveSupplyData, + ] # block number to corresponding total supply + liquidityRate: Dict[str, int] + liquidityIndex: Dict[str, int] + totalVariableDebt: Dict[str, AaveDebtData] + totalStableDebt: Dict[str, AaveDebtData] + variableBorrowRate: Dict[str, int] + stableBorrowRate: Dict[str, int] + variableBorrowIndex: Dict[str, int] + lastUpdateTimestamp: Dict[str, int] + isolationModeTotalDebt: Dict[str, int] + assetDetails: Dict[str, AssetDetailsData] + rateDetails: Dict[str, RateDetailsData] + availableLiquidity: Dict[str, AaveSupplyData] +``` +* **1a. AaveSupplyData and AaveDebtData** + + The nominal token amount and the token amount in terms of USD at the time of snapshotting: + ```python reference + class AaveSupplyData(BaseModel): + token_supply: int = 0 + usd_supply: float = 0 + + + class AaveDebtData(BaseModel): + token_debt: int = 0 + usd_debt: float = 0 + ``` +* **1b. AssetDetailsData** + + Additional asset details including the maximum loan to value ratio, liquidation information, the asset's reserve factor, borrow/supply caps, and available eMode options. + + Please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/asset-risk/risk-parameters) for further information. + ```python reference + class AssetDetailsData(BaseModel): + ltv: float + liqThreshold: float + liqBonus: float + resFactor: float + borrowCap: int + supplyCap: int + eLtv: float + eliqThreshold: float + eliqBonus: float + ``` + +* **1c. RateDetailsData** + + Additional rate details describing the interest rate strategy for the asset. + + Please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/liquidity-risk/borrow-interest-rate) for further information. + ```python reference + class RateDetailsData(BaseModel): + varRateSlope1: float + varRateSlope2: float + stableRateSlope1: float + stableRateSlope2: float + baseStableRate: float + baseVarRate: float + optimalRate: float + utilRate: float = 0 + ``` + +**2. Volume by Action Snapshot** + +The asset's total volume by action for the Epoch, and the corresponding events for each action emitted by the blockchain. +The volume by action snapshot looks something like this: + ```python reference +class AaveSupplyVolumeSnapshot(SnapshotBase): + borrow: volumeData + repay: volumeData + supply: volumeData + withdraw: volumeData + liquidation: volumeData + events: List[Dict] + liquidationList: List[liquidationData] +``` + +* **2a. volumeData** + + The total nominal token volume and the volume in terms of USD at the time of snapshotting: + ```python reference + class volumeData(BaseModel): + totalUSD: float = 0.0 + totalToken: int = 0 + ``` + +* **3a. liquidationData** + + Additional details describing a liquidation action: + ```python reference + class liquidationData(BaseModel): + collateralAsset: str + debtAsset: str + debtToCover: volumeData + liquidatedCollateral: volumeData + blockNumber: int + ``` + +These base snapshots are used as the data source for higher order aggregates. These aggregates are then used to generate the data points present in the Aave V3 Dashboard. Refer to [data-composition](/docs/protocol/data-composition) for more details on how data points are composed. + +Following aggregate snapshots are generated by AaveV3-Pooler using base snapshots. + +**1. Top Assets by Marketshare Snapshot:** All assets organized by total market share on the protocol. The top assets by marketshare snapshot looks something like this: +```python reference +class AaveTopAssetSnapshot(BaseModel): + name: str + symbol: str + decimals: int + address: str + totalAToken: AaveTopSupplyData + liquidityApy: float + totalVariableDebt: AaveTopDebtData + variableApy: float + isIsolated: bool + + +class AaveTopAssetsSnapshot(AggregateBase): + assets: List[AaveTopAssetSnapshot] = [] + complete: bool = True +``` + +**2. 24 Hour Volume by Action Snapshot:** 24 hour volume by action for each asset per Epoch. The 24 hour volume by action snapshot looks something like this: +```python reference +class AaveVolumeAggregateSnapshot(AggregateBase): + totalBorrow: volumeData + totalRepay: volumeData + totalSupply: volumeData + totalWithdraw: volumeData + totalLiquidatedCollateral: volumeData + complete: bool = True +``` + +**3. Top Assets by 24 Hour Volume Snapshot:** All assets organized by total 24 hour total volume by action. The top assets by volume snapshot looks something like this: +```python reference +class AaveTopAssetVolumeSnapshot(BaseModel): + name: str + symbol: str + address: str + totalBorrow: volumeData + totalRepay: volumeData + totalSupply: volumeData + totalWithdraw: volumeData + totalLiquidatedCollateral: volumeData + borrowChange24h: float + repayChange24h: float + supplyChange24h: float + withdrawChange24h: float + liquidationChange24h: float + + +class AaveTopAssetsVolumeSnapshot(AggregateBase): + assets: List[AaveTopAssetVolumeSnapshot] = [] + complete: bool = True +``` + +**4. 6 Hour Average Rate Snapshot:** Average supply and borrow rates over the previous 6 hours per Epoch. The 6 hour rate snapshot looks something like this: +```python reference +class AaveAprAggregateSnapshot(AggregateBase): + avgLiquidityRate: float = 0 + avgVariableRate: float = 0 + avgStableRate: float = 0 + avgUtilizationRate: float = 0 + timestamp: int = 0 + complete: bool = True +``` + +**5. 24 hours Total Market Stats Snapshot:** 24 hour stats for the entire Aave lending market. The 24 hours stats snapshot looks something like this +```python reference +class AaveMarketStatsSnapshot(AggregateBase): + totalMarketSize: float + totalAvailable: float + totalBorrows: float + marketChange24h: float + availableChange24h: float + borrowChange24h: float + complete: bool = True +``` + diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md new file mode 100644 index 0000000..effdc87 --- /dev/null +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 0 +--- + +# Introduction + +## Pooler - AaveV3 Data Market + +Powerloom's AaveV3 dashboard is an [extension](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) of the Pooler framework and follows a similar design to that of the [UniswapV2](/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/) dasboard use case. [Snapshotters](/docs/build-with-powerloom/snapshotter-node/introduction) participating in this data network capture key data points from Aave's on-chain Smart Contracts, which are then processed, aggregated, and displayed on the dashboard in order to provide actionable metrics to users of the Aave protocol. This implementation offers an example of the composable nature of Pooler, and the flexibility of the Powerloom data network to capture a diverse range of data points. + +Dashboard is hosted at [aave.powerloom.io/](https://aave.powerloom.io/) + +### Data Points and Aggregated Metrics + +Data points serve as the foundational units that base snapshots are built upon. This use case captures fundamental loan metrics for each asset offered by the Aave protocol, including (but not limited to) total amounts supplied and borrowed by users, interest rates for lending and borrowing, and asset prices at the time of lending. These base data points are snapshotted and then aggregated by AaveV3-Pooler to provide broader loan market statistics, such as 24 hour lending/borrowing volumes and historical apr rates. Due to their inherent complexity, participants may find lending markets challenging to navigate. Access to actionable metrics is important for users seeking to deploy their capital efficiently and at the appropriate risk levels. + +--- + +### Development and Extension + +Snapshotter Node's design enables extensions and custom use case implementations. A developer can extend the pooler compute files found in [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/eth_uniswapv2) and config files found in [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/eth_uniswapv2) to build their own custom use case implementations. + +We have a dedicated section in the documentation which walkthrough the details on further implementation and usecases extensions. +Check out our guide on [Extending Pooler](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) --> diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/_category_.json b/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/_category_.json index e21ce57..85c840c 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/_category_.json +++ b/docs/build-with-powerloom/use-cases/existing-implementations/activity-tracking/_category_.json @@ -1,6 +1,6 @@ { "label": "On-Chain Activity Tracking", - "position": 1, + "position": 2, "link": { "type": "generated-index", "description": "Monitor Events and Transactions over various chains and protocols" diff --git a/static/images/aavev3-dashboard.png b/static/images/aavev3-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..102bfca6df055227fa0aef65f7ee2b12b78d72c0 GIT binary patch literal 86862 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 J8fApcf3GihU6Tc>+`>(io~@~O8| z2I|WZ_{)mto)9_|x{0P3yD+=%D)3W+v=!Za3q%SqYt_#9n>8yy8fT5G9~bYkrKsDY z&4F8>mEC@sOzt0^v~#67zPtR8e#ATMN}Ket$68!r*0W4ca?>Dd2SaIWyMwu#0Qz@X z<4M*@f@#>zPYM|BX0N#E>cH^oHCWr$K08f?QAlO3dxmg460)>|-pvH6kwL-wz!l?6 z3^+A2llN!*AL!CZfiX^2NXehr4Ap!ahb9?u1k%dZ6{5O6#tn0-7 z)ALJip11F|$5S+j1u`7>u{3`tes@}(^Ppm$l;7e3B4BXQlHWyK$Eho!RgAj= zZE-TZ^MaQze^XZA4%qv9qbUO1p!gig1g ztrp%Ko~!|y=EdfJ80CiT79SN!$l_WYxPmHec%q#xfi1Kw%{3@W{n!vkvDH@iW9Ab} z2cE!;eCombfMwRfh9JLXxnonOIh0(*Z2ZO$W}xMfN^L^*=qPfO2?OXxVjT1?O?NG= z&&Yg{Pt0*-^K~KtMOwsnN9SWIljb}eOK70+C*PHiP#XN=70?vh__61y_3`ObspWr& zD1_^;$k%KE#~U7CPScNiold-z#|qqBnyxZhIc#K^FquO?uGgbi{)de5?<(hZ^w%7> zjiV}&?w$j1d;WXw>PWblp04>FKvDoG$Z07 zA{MoAzC(En%$@R^ubr|P;x8)$;f~w$YwvHJXgfOo$>Bc-q3pZ!Nw3=;I1_$#r>9e4 zA;fb>|1Izxpt`U-qM46EBSPmt|7laFyC+1LDtvu95j-*VRqnT%5m7a~)4?;Zr1vP4 z&G*~ce-r`b|E37&mTgB&-p@JuvvdorfXwj!fad-ao+~6RsCj`%uU%e z`<21h{j0z@bAHIdz9pZ*_f78`>KYLIm(QT91x*7g zKcVz(uP4TdT%AmCTKj_Jx0m)Jh=6Mc@#VC-Kvloe+%0Nk3*=W2g?k2j259G}z4Prl&{G7zK`Rp&{P~ z#CvreN=y&*V8}k2q4k_OHAE1W8EpNWJRY?s^LQSbw|+w>h}gV6#3xwVQ1;B3X~T8C z_Of8NO_k{pKG-Q4H;U=1Z|io;i(+E0sfAZ4DsA3@PZ+qJUM?%MvvwyXLr0fzI93KV z|DNK)`BF}P530uYZkKgoVCVi&b`MWkd1%ygJ+88c5cP ztsL6zo|t#*E&H)2B)+$N?AdV1_Mz)$N3guuaG}QjqSd}noWn^hX)uty@3248b<2i! z|A){G@%#3y6YA387-foAHfKjBvoag4!XS3K7pW%q-cZ1hX(QC-hNMOl-Zq^bTsAW+ zzYJWf!?0e_brg@1>)2Kj?WxrS6)W=5qnzYV6D)S#46MqnURG{9-`RD5v$Y5nF=U0A z*)G(V^lwKQQEU2BWPxy{(kT%g`>LCpQ&-d!Q5#!8ULkPdR>DTDi<%|APm~E*9Vn_? zoxVh?Zp!<-RDdut>Fx3F)*w0PMBww&mU>6M53wZ&b601eOyd?1_0oo%CrfX(QO@aZnLw@!j? zysTfjJ4@NHWFoWhg?)$vYdA0UTQN-3X2T6jpmlMZO`iL(;UBQNyi1cMnd0hSDA$@I zt)wy@m6)umf~_ivnbo_t>uURCNfkRDUsbwdGKpxw3Q%l6!$2K8VvmE66<4XUuMF=u zN~~=Zc4W>-@eMf4meffNlT2YbHaErER#s~aP^AlHHmlqcYFt}Hv+Q06vo=I-e{aH2 zSM1ro(4U^+h+wRxdIjxXc%Z!b!-e8_$}3TUz;?xn3D;4l>hcAJ!&F*szJFtztXi-6 z93*9F)oF+_(Q2_B)LW0L@%uEly}}*ccozYp2x(NeY|GtW+M(2(%J^`~me#AYNHQ?D zXD4V3)lSX>Y(+AN1rMt7#;*CZ9d2Eu_<fN`U$n`9=9N?zY*6QEOxNTKlFw#H;rQn`j~JJR*}T+r4oI z8q9!i-|`!;+$?t#u?jX;817tsU%6SmkX->Db!zOQjYND8OHXm2U)ACc&oo^Pw>t!@ zY74Gr&^k-(Ys+5r^s`{!@E>rS*&D|A>CLIdd7Gd#LOQxW7w2u>DBi96+C^fU3hUxK z(Qam4n9+-UAKjFbAC2mkakRKQIjJUdn&FX}qvahUm9iVmSGH3&*`s z`p~tuVeyM}1i1n2TK}9qZl)4;s~2c`T~kdH3xB>4IJ7O-$7${r@rdQ`zEOS?0ai}) zB_F}$umv0?y&T)K!+q|miNisBv3fXkpQ>cv-<>ej9s98J`-Bt`A419q>c5a0{+PX> zP}O`ynd1rN0h7t_LCbwi$Bfn1gy$ZzLbSJlR;{xYSiZOc@vGX%u_&wWyxf(gXO_F* zf`@zCe_Hjpl~#Jnme8wXeY2DFupgWIZsn{%;rm=L%*d7XI_1!Ht>c#l$*%U4#q|dc zo$PzRYJ#)Pw=0_7-f*?zf`jyS?#S$t^0SxXI5l_8n~Gj^GTq+%q0}9Fdhe`=&VlOJ z?{_yHZyszmy&={?<`#zBt}w{h_+77C#FyTzz@xvcur^o08(kHYbHdw-0GvkVjxx18 zX8Q^<^x;8#c(wk_K=+|_p@luD&?hzi(mlhVQt)VUcpcYCtK2tp#fFV+?V%5;L!AYx zHkD2K6-}{bis6~c9U%da3pKmF-$>vo$p`j1J)mc{Ad=kX&1p5Zg4(I8w51`HEi8*D zJ)Z1mOeDpNqeN1+_D?|LjE*u?BA$OaG4gREmU6E7T>J+wzHjh9cEp*~?qj}Xaq+T8 z5q?1ZdnClCi7KkzND)5zUUT=$FT~Q@i@z6PN6kT(j(+;TeifV>9H=KSsXscx)&Wes z=8tt?hDl8q{VmF;0|t$?{_!Ne?-Dr@dymGaR0x)ji5!q%d-E~LgIgWz()sK zN6^0V$66Sr{yCt;WowKlQUPpW9BVFNr~4KC$6Bz;Zd2V->+I<8(Hn`TyFvdN=GeG0 zDEC|TcX|y+{8C{=xb(zv(@H3k(j6Gemv8W`Q6+GeKbFsaF8NCE*t=R;7WvID^>R{5 ztL7Fqoz8hm3CaU@ioL(p!ofG`w#IR$lpH(cmFkNq%k5~p5W9xzj;mR{{WKH1`on|Q zQdOHeJ!o~&i=_l_?svyk9DwXbe)|IbaTdXv9+tAzkc ztY_eXu>BV3t8+cjA=%$p`k9~LltSteW-cizHl#dhsY|LHw*LspIm#u2VO_N`ab4-s zkMvv@o1<+wHgupH$g^ooUwh;qHvMQg`L1;o-D|Nq+l?M*IeFCYmakxY)bA$F@qOiY zQIJ+YINCJ}L_XmzO-3arU6yDu03YG{k9dS z;E0HIzFKi?5@aGjDuH8HsJUDmnJOH(+_sdZF93Nub&lhF2r4|h{Q1~=jrYn=bCHYt z5zO&=1wn-IYOi-Ip_5M41?r2%Bz-OOf;Cm@$^yKxpk6qEZMx;D>V?vvKASoHq%Y+X zbPhv3=gaJNWeM`X3c3a-2%<@c+>Z(pm$0qp7%=*jU9&8ktR4K@z3;&k?4oj9eA-gj zz7)&(t*IT_3lx1kayob5?SZrYW80Ov?h#?g>xAhzGpU^*0hx>jNBViHf|5Z7*R88v zhei*n!dPIeT)lp{MNL&mWTO4rPN$E48XSpp66VY ztM;N#j%DNm^)2h6{nrvT=?2a0STy=ctWNTspN$kfUp{}Mj=Yq_J(ce25wIY-*xxPD zR-Q{tkfZrDMSpE*%Qe>-bF0Y_b%(H2Cw-}`@_1NoPT{*K@qO!vf1V-iMZc?f6uh>g z**yRN*!cmA7tK!wpw{C{v^MMoE5Ham>etvW@^W$Gj5yghFU@nvSK{wplNXa1fP>!I z1M8MvBdP8w>o*0yWehUi~58yl6&5FJ7{! z&lHn-eh+>amj|#mN4JhwrKgQw==`J>?+xFUd|2+XuY-bEz1v5YiYUh<=H&+5!cP==Z@@ z2-6fF;$HUW-Krz6<&&OaDe_d~IQ=bKrwd|3!Hn^TpV?+@XF>2V{&Ur=k|Jd#JwYv4 z?Ii05P0y>^_t;im7hKYr=sn?GUpw(ij#M(Wea$r44|5##6Ps?N(<8oAd7j*F$E|cA zO}%5(b?{)ym1Cs0Oc(uEzsnfSi%I<}n{EhHj)4+rK|SUvmi>ZVF8UWGSf$j|0b{h(qYO>rr73{h|y1f96M&fu>*#&^O^b(<=8Rb zyHD=Krs>?V+ovm;d#Tmm|4mrH3J8qNXT4iPE)y0L9l6MA%EF{uc}3q_f6cE=69sY4 zyHv`UzT6{ z=Z>E@xi?7XJ*nE7cjyLtJ@~z=;YKy@lkno!2{3Bzf_?_Mih0^AW%ge9Bx2mKjq&5k zTbRRoU1+b@8V|EOeF|66i|oorTbJtOf_rYQygboR+|%`vb}b)(W~Y9E-tfo(5T5w; z5C%`1cNCUUSo7BR5)sfYHh{%L*dx-03wEj8Y?CjiSmNuL&vS4r#rZyE zSF~3G-SYX}=9;v!U-!n3gRD$*q`vR?=knA=KkKk%sKKf#()#lEbkPkbq2kT(I%qd!!z>XW{`%UW*;*iFckXf)Nf10X=?ebray)nb zvyPNR>MP{bHLS+Dy@n5${M2Je6PN4C+OFF@uq?f^@)i^>udT<*oIRGz!S5Kex~m0we;G-jl#` z<*Qp3WVkf}_S}rD)fo6ebf=dbKSdF0RIC8U;02)`gUcL(4I5_!fql>G`yA4Xk*ypzNqDqVaVw4cJ! zuNGNQnuaGU84oB4JzCCVYv5pFjD6|ARr>8U??6d+851IqPhmb=n0U4}r$xA(8SzBp z#oK2YetGM75e2Mz&Z^ZHw<`uaK~&@Axy>kNz@bNgGI-wHO9T}#aq04IRC~mNeKUr8 zhg0&JoVddhr*_XVRqJo?z83w>Y(&N=DoYe6fg^F}C4IcIpCD+fF|E76>~&qyInh2rjvu3+ zPefc#g@c${P$$%uCS`h#EPfm}K_$3F9}D_r{e;r%k@TsN-@N1ko;#`5v;yC*LV6}9e)5wt$UjMWue+usQvy?(H+ z*Q&P2AO7@4g1b=31Xu9A)HYOW(D0lH!7<=@6H=olt)5RRLM}4fYEHi1U~2z$1!2)s z?I&A~S^BEgCmsL2>1^j;Hwxb@HW+U{wN**9nGR#kiLyJ?e0&13d83iYKi}=`H#g}- zOt0t#EIgK3Ak4Ul@nPrzi+(N%_S~BCv_Q&ZZpbM}{*>a32P{wOAp&~$usj8tDgG>k zo?Z=mlUo_^;~PgF{eB1>$T!ew2|GR}+!gkGm5}DoFYA&&s_?DO5$QgnkUBG0{4rhK zQn1_YF9Ks&Os~l-7Eb#BtSYAF;>LyFo}Ok4k3fD}ISD)`zJN@V+EV_K!limnmzyTw zHa3is+h&s5DsJ`7?9ME;k!>C8!V+!LzkDiB7bkn98O@QlMif0Q^MeMNZrB;95Ealp z_byzxFp33&&=5j2(3%=DeYEDd^e&d49--G;TAM*6&C^Ev~ST_G0`ov%*{6j|q?_6T`dOGWst6X~4&= z>#>D=mnwR)_tARE*b^~|Prn&!j(n4nGL=@r3bfXGp!yg<^3;_KkGSKkbm+cXNDd}% zea}Up7RY3OwFhr6siP%`%V^!g;JlIw6U%C}LHVJ!d_mV#{;}lAG%{Pgym{qbS9wyE zj&k*YyM8?-wEA*UWPpbbD2|DEk*JUj_q@z|qTOQz5yTqRjiQ^JAE{bnV4TxJf~|L+ zO%(Q%VhQ#iQGD-YY+i2fwz*mi*lnEeKg%m1F?tyW?)-gK29EstOB~AZa43&a4SaDqIY*pk}>cE`pR3#?=j#SI5K{cfa%<1z>%aHXCw&{?r(pIqTB^ zM>;i4@?ZO8aaN9w%|d>|QVXFC8i}mwe{yuKDj7UqtlN=NE~-pn_jKsym%0)g=w&+dOA#uRjW_0pfYIBeEJfC4&Az4z1$2r?1KFswmD! zIj9w&)x3X~x*LT8a``R%~i7<$y7Glhxaq3>f@;rikb5#_BV>)*YC2rgt5i9N8`V zDcNp_u&GR8?}6j^mg{MJdU~drVUgFHdrfEdlHTSbwyjua6UZC4De5%HHWH>@Qo14k zyztmaEcZ0|ksljCpx|mP2V4XDUaw1PHrmv6_0*$NGnO5AKHT}u-rWh%IPUU!)eYx{ z6qb^S^oZ=Z^R@M!ArlL#jNf|ZOWoO#z_RWz=ICMfL$qbn4b+1ihb7E5>xdgFo*gkT z(#rawZEKL=N54OBob8r1*{E>Qu*SZN4>YXMlxzQZ9Jw{*>LBoJzu{_EY=GTO7y{?k zz09AZaXjb>(pi|g)W&>S7P-t87@t}uEzQ>Md!l^-$d};$1oSX%nZ|9+0%LhpsLr}g zyvzAmfY?D($K}9p*jx(T@BJJK{uLRERihic2|Qvcd>=_zBS(zq_}9prUd@g~SJw94 z(m-ZrbL<&5mnka4UPoZ>;8Wl9={KnmKflJOPq(}!3lQMl1o`OYJCQd-%;qkgX@cY^ zzdg(i8gS8X!rw2@gdF+D74o2cusL!Fv8M_p<4#1clCZf4S*TFZ&Bw>CCdo+&cNi|f zaENyPW>uq-UYMpb^_u;#yl_(j9i6eDruP~SbkKj(&gH2?9QTJ0#>KH=?(l4fI?F;f ziNPfuLHV^WN$~Rb^|M5EeLcNg95iXvf#+I1-DvKW=70-86W5ZgL*VIv1x*D}n*yfQ zoU*_TCifPzg0IjSZC8uF0~~;rK4%lsq}ODtPX?qSdram z7ujs^2JC}a^+HHSYnNI~OUglz`Diu7kkUO-MxEUi$@B=OYI0@0t4X`FZ0d@HWHms#uy)LSEV@^Bs^A3f9B)_^oQ|I`czr}#} zXTZsd<_hKJ5>Hys+vEN5&wefs1?^~3%mU-8 zqgPAnN*w2J6J7himS&N-Lft&>_k%+*=HDl922$zOehXT~)e94a*__v6F2GCta$eDb z3|o)bkWPUNn7GZM@Px?GvZ|f|lc0%~&24yk8koYmh7H+82V%BLLNgUY zY))Jq!N(|^RqSd`r#FtFEwybpiJ67rjOP*(_e{HbVbG0B5%3YT-;1rKk&jPL^9~{O zdH$P#lAu*5bGvs{wM-;t)_rmr^@QG4|5~k)b2xfDGeItV>+U;P$CgRXhrfV;V0#bG z_P=pLetThIr}`Q4&MAIbf^&&)i(?qZp3amx5>48;WCvYnNz`>_}rXo`sRUoILrmzN1$bgTl@Z|2>wfy~UW!3M)YL z7Ha3-)NJzkMo|9y%N$CK{XMZAiMbJ_j!w_+vqUsp z$HYgCTw_l(>{_GC=vh3{P7{yfs$9Vl_xW9ZOR4|CQ2%dVU)$2oO#fGj_0j(fIQe(d zs$gLe!6V>P*=th(7vB%r{s$K~g9FJ}zP`R=#sTmD3HkbuzaXecUTDvdJMzTo`nfnQ z9(COQC(Y|WSn>bAug{qiZ{@^i8U41V1;PM&IRK!Se|zGN)90bfuD53X93FtU|CXdj zzB8%=8~HsTDTovUz%9s}fjg*8seE{|hvZb%{}<-oZ6H*P?KTAl+5S@gEMQ|aVe z`uIfto6jCcE%!dai;u=;%a@%RRWGxkTUrJRJEQt@#7=O&iMAW4t$d!ZZ^+3 zh5V5qRi_>9qh~a(UO3P zWZ8ARd2OL?z2gP6xnk#CEv!gPv+T;S{@8Q6OKta>N*W7&sAU367rg38M925&ZRN1T zjC(z=b!r`+`eP`Vg$oWf+x>FAA^Ve|LJ#M{qQB5b!^`O7F?m$v3*m8j>zEVp@wqBH zxtjYbxt2N(U+Mm9Ho;pA*7w5g3bEo$VdP5p%Tni zIK#Y~gkTT%kwTE71`Bq|X4<){e0~&Vq`3<8@5fz61#7Tx3)cI#mhV*nt$kh(KCw%F zkc))Or{0rTT6B^a^HiU(zW|osc$K7Th&O^6Ld&4ZhLKCInPvp|)P3f7i4fkc;3Xh- z>eljE0k@|V95elh40EA668XAH6tA%y*EnjM9sxAdv6T@}-93ADMDP zb@aH1Q%rq;NP4AysenJBs`xoF=pfsB&)hN0nsm)ZcBx+w#c?(i%g-M0O8%k!SI|>6 zO$}R@9wA?>`J_DG>jsUSt8*8&8tFRDPZw(v&_Z&bx@DtBmxBZK??v92fiWY-6bwH; z*Y(TMcMndgaR62{(VPY1Bss4L(L5Ahg&DO_$i%XGtQdDp+aYETvwJ5@V{~vthEP|~ zGt?y_YX7lpBLv~6{~#rl#YKfMH>^<7^JY@%3osFv-JdtH<3A(d_Ka%XU@N9Pv>HC> zyrbzc;)EQa1w%9Zn;)mcJl~tvNspegiKfpR`6$-{dhT_+mH*U_irnExvimO4a`SM_ zPeBz26z+w#0OFkiwAT-pZmM}+lSu_s;YrT5T4&gP@y-3U4xPoH%N&Qn4pO3~i)Tg{ zo01|Ft_L;mgc7&9-OLs#+NTxz6lk_J*Mile!p|^2G09FpyWL19Iz1;EULtyiz1~~{ zO9~m6D^IYQW5KxDFBBe<%RusC#`6Ziy)K4XmRssl_S5$v4xS$=$erD(wlA^-TbSnb ztPl-K(ytcS0OQkkGiERC-Rvfg52pr84TNk_u$daYW z;k(^M`29-L=%^P#&AIvxTh@;smnEQmqB7B110Fnw}!W;~#<^>0JzLh8}pGQ`n)XO*&h%Z}~Kl>E;sRJq;Ps5#FI!)u7)G>7mX*mj{?^Cc|`}KE;Yk)*rMrYvM_{S&1v6Lob@mGcZ9u zRRICMo!oXjPr5>|oxku5AeeI-*|RdC?ineT17_c7N;}4kX*|pNz=Xm@J^}X@CP>{+ z2Gi{1t(Cdu@B9_UqXNLOd)v5ZoN1x;3$Z8Y$W;2;Cjlp>?{!aa%RREp(NnYqJLOyJ zePy(KFP{d)I?0NH zhlG-~&Etst(9BK(pupJNw}Ecy)ggIzv={xN#cP5RqHowuU131CG`<;HV7m0d8CIVc z#gT9Q!Zg_3X{}sShg|RZ^f`%5%>~33zW?0+XZlBplS>DWda39%c5H!WoD;j<5`$$~ ztFL?M=Ltv=QKX*naSX0in6Vt1Wq8wUQ$2}nJD_R*`eiSV8E%x|y0+Twhdy*=85|9v zqQ)E)=hXZXuwusYntb#!7moS1K5^hr%PD1T)!yaT-q}yAw|$~}Gx(`@VbS#me!&X~ z;&=geK7NwMUL5FGCg??3rB;Z?(+L-;x3OW~ z>Q)U`%s*Z{MSgnBx>++!RD+)Bu`cD30)7vjhc1V{F zd!QuJ`c)q7(pE-svujl`Mt=tBHtPXJ^^L>EWs~W9-Qq&x#CnFrpHwR{H2=6KIi!5m ztno|9SwN|Z0os~Q8k%AZR=w5i-0r{wg0-}+{>?i0x=!nZLZ%hURh$DDo%KswPwhAD zPaR@x<_hkm3@dktK;KN5Pkupx*}uzsip{X_{O<<4yuHZ5~j=cwY=vTz>@aoFlsiTq~9b_=h533lwy zb6(d~?($E-3UjXc=%l^{!*Eu9hx-Y-kna}%RVxG%Gj|<{*43seB66UDtgOq`Z|vNi zvQN|WTqe0@02rBgnQjnkfZePTB3qTT>x$l$&V7PEkzMPWR=x5U$L$Gj_ouXuUm_p% z*WAh!BFU*`u3aDmPf^Bg0dmkS(rXup@TM!Vo(ab;gL1FI z%15I%1)_v_j*W;9H=!(ubv5ekue_S@8$q-6T_=Vtsy3N8fxQyMYOY{41#FVIcoa00 z%ADlZDiGS5hO9x?Kwf`CHPCMzw>Z0hT$qBa6}%wpOBLDe{WyiCcBtx?qkHb8lVau- zOelLD&i>$}rjWM}=K}jTt7&bSv?Tt=Q^SIqWsHO><>5i)kYV-u4)}vYYbLs))X7N= z`Lsf#Tl$g2({ksROfr<7$|h=kkZ+T}$fhc`Y}C`?Jd*dPbBJ;dRWROQuUhfk_c`@d2GHVGPVqCKJR$5%=LiJO-dABo=8 z42bf-gM)G_Xoh`ZS+(!Rv1r^o$vK?DxfRJ+CNR`K!`v|YqvI}>LJ2j?26o&GizRMt1@#BbnM?oRicib> zVj>%wShkPm&+EcnP9V*2W^LeIJ-DL+=;%BJT@oc}*_-(rlYy`IlW=S;k6PIJXOX_qEtarY#i%pjwYraqzQn^kKJC^ZR>6q&s_0?BF*OZ3Sz?T$7ynm=>zPQ`9s+(2Q zb0tCksyufdDY6d$^^uDFwOZ_N=|(E{V<9*2xz&46O!)fMY*41v;mtbvxKT6J*ORROy{DV8$!X!>c!=XAB+KmI4cbA*8O^B)@6Y-8F$4Fc|ZQ_AAhMy|8eQF zVbHg26SkaN6^*_NOFT9fM3A8`@${6MfL(L1bN8kbbmPTx$mp$b)S!qw#qCCRD91sq zAxz@u_Uo6^a~?tj#gUNXaxQY^2K-@(vZessuGUCV37g8DSUYYGX)H3mBNYClW}-pL z&NpE;%X60N^d|ib$n9^c(%4b$*K8fyr?wlbw|?B~xQjp*@5^uMyWm%%HM5yn^5m}m z$^wB5Aefs$Uxfu0`g4>sfVkEC)NT6hD;i?aIhcXCci|`PG;x-zV0k@iv(H&r^tOmM ze+FuW%7ju|kdFGkj#_*ln4@!_>E>3c?4)ug2=jSu*^*ub#M7@3#+-~mmebT4{ z59H{TU9vVN@*tFZP1{Ok5{|P0F~+;|QLh=nKm~NcPN_dr19@+Br$r|96rXEjkN)+L zhrs5f?#Ca|L3`CdV({+zOJFVly4JRPA4rMqJ6?#c4Xw{)?KEN9Jd_0hM}PyB%{X2) zB-)g1o;gO!&+y2ar7{q!;ynyHvP>Rm!Eyq>Z^)DOzAP_7t$BmWyuV0)y-HNAeeJzwyxhL2~PVs26L&5i(AO!#i=Y!tOmh zzV@v++%iUY@0v)5V)2G|(P#A4CO6Zt9Gz`Izf4vodiJ*A_$=0MasPO*G>+CgLae;K zU5Cz&{#Nf$D@T*2G+<_*odx+6GryF&RQlmjY_|mwD2=S%Key{Qv(rug2G>hhFF`rT z>E8Na@=g>g)>X)~bt#|UVl%@_vmgZEcCB}^L~Y9!%1~^vL%UBHNSd49lrRc^|CnA+ z*;uxZOF~|-#tLJ?uBu&`kp@TZ7&W~E69)6g_)ZF>JGm!# zb6el{;B0ZPEQR`q4t^k@O&R)IiW}X*Uu?R2O{80~W7GRX3#fQ8CrP&=44eX4m0zN& ziia(iNiWV}j&WD?28I>@ZTBTWx5_1stH5TW|L{@?bT@8=J}@o)tI{GHpXhJdqF<6%8f~_TijHj(g^gmpk9>A5e2$3JsqB z#hM?8-)Z}<2viG$UTioVcyy_|E%(-2|7~PXkg!@o;ftP52UK8@+Fj`26)Bu>cpm45 zl|dThSC2+o;8e7O-bTpXA>(Bp@P-{m-$mOc#;!iV1BeMY>aIbKR{0dOWnxc(f`?=Nnin!vAc@JOqSoZQyD<=@i6Bw>RwJ(9+vsnzc*yAj~- za<+Is(&Gn64!A=1tP!yD_OW;7_qCpw!piLt6?7R7BFZ?}X5N05*0ev7$jBq;0B{!b=^si6W>JNcj81^!*{&j0Pt+mY7~yQY7K*(WvvO~y6_StbU{o_`jUqt$K+ z|G}C9Ej<4)oWi)@8tH$AG1tClL&XdT>)_e0@VsV}~1n0LdkF_0eGKwRR4;#VltDl=rhwvP|w(-DJqG4XxMJ zjb0Bnps#`?hkP2qCezz5KZUZqGx%>I9nV4AJ$9qzfVv8xwtB@p-3F>gzjLeV0hK4> zH`{c|s*KdCQGh;D7`ciqZ&k^iIT3IavN6Pr*hp;!3dM#WC|={3yt$2RSvl+uSioR4bIOP5S}>j*L=;rKL{fTc`j1kT6YEyK*)6 zcoE0)=v+zA=Ip4)@lM`c*rG8{8L*cCB9(b(8xTyFZMy6{mmmEO0s3tp{eyKzb^i{! z9{|5g!r^_oAlkGf4Wt#6qg*3adJtAuQW~1slxS?2O$^E8ytcvGF3yE~V6~dF2;nkr zd`?*Pu*kH*+-D!pR#jR#A~zMISDwm~E>!FMf|cMrQ%8%P(I|Q)14Mi5dVjZ~@I5S| z-dv4?^IZXO&OU_mRN_6j;juwD@&=~a2T)i?Yn@-{frpp=yMF{WeZ{!=!N|K-o9jYq z+Tw3DGLp`B@C=)%T^TiLwzaYl*cO5+1_LAbZxgI>_@#%@w%UsPG$J zpgDqQW+oSiVHqs}^vN5>+>!)OmR3nkK%RL;Gs`cv901HmCa(O`0V?eL?oZ<=!2}g= z`7(MXd*j(}Cp>0(H26ui333AVYnTtwIe*6MB61q zk5qYr1tLy9%!I?8@ADxnmq(52PEWe)Uiw^+3K<3Vj}Nj&D_!*0&a+N0QYP#oz8BJY ze&4!*=|;#3Da9X6yW$+Xrg$cxyVGer`3T&m%o>U--x1l2^sO-w?vmbuT~z<+$q`?>Et-0+-PDug9?@%tVnSVZo#LAj(66vIF_ z$a!>K(?_bzLA3#JJ zX-Sb1=@<|JX@&;rMnFJfh#5jaK)R$;kRG~ol#phSMq;F!kr-ge_eP)Z`#bMiXPvXw zIluMZ|IDnJyRLo3-q&Y;_TE9(vag0!rqNYY0X{KXC!+6j*=;2hv}D^h{xT8?K(C4+ zp~cl)H?n;JSeJB*d<#M_(xV=G*-cbN?~-?TXMP46?uhq5{S*;G84*;e=D9qImyl_XV{^n2VKZ9-ed92 z+YNBhyZ5&Ja%SDC15(RFk5+gY41gs%0`pVNC5$`y;f5d0!m;%3^RYXn&KtN*WW`U^ za>Y;m`viKVSvyY&!Bi9|Lov4uf}cu(fg#gWc0y`Ny460ltc?&5g0C!0q9?)YOy(}F zQm@kyXgR9;_F(13<&SUH^Dk;sUJie-tkpiMATGKDxdeL+m4HQ>j@g+e`uR00)zSV=#nCv^i zHc!*;7H&U6V9yR&!UQ6Pwz&5sgvxODD)c_1eB1g)sC*i4DkK0SCdFy{tD7|+Nsmq< zAQH=&d_W|88*99h^tQdqlJqGKZ1?IgQMqLEUv1;*Uq2?GUGn|dR|QZoi2%aDB1T%! z`Q4&L`df#cm~XdpFXE(I`IV|wo>ALA099J1zK(KgYpMC725!h70jSdv7+t~k$0%x}Jkr+c9*|9Vw%N zrTX62$cJ%6hx$U>Eo_KQn2G?|bwRROH6&NrjKdsSQ@iy{>ut@P;kMotI?wei>~8hO zVmBh&W@EGxz)#oem$BdJlO5CQK3x9u$=hhjv21zFVFv^G=VqmP5+#b8@JLieOO+o zwRMBp3Qv9V*r=qN>4G5^G=RDkJd^I2i_L}?lp#F+(EIp>SL*6E)?^@h+imf09j<`# z0=pOQiKfaJ66b$-CuOvX&a`#h-#2hCDiP1`gh(w{1{VVGoBr`URsE;nYdG@Wt8Rg2 zzk^un!>=y&F`WP>vBYwhKB0x;*LCh43N7(Vb*`wi@(eo@6TJVjQq%&|A84*q(m&eS z-=)YaS=YUl?JjyeI7*($6`>EX@d%MX7L&5?{8Tgs_L!>4<)7m*KfCXz0N|KCP|Z=k zZ;NE!$fkMX?mScb+a1ItG1EBHw;qevOM`znc#f%$=iIW&xLmegW|aG{HBNt-AHEHF z_;6{xr*^zMMSMIIs4?+;Fzd$HXMi9h4~luH#$pgCpl(x!dzf+mkOEcn8~3=QtaQ+> z{D&@~S_)Su?4pkZ|12f)Ja~Cxb5BmE@YhpGu(Dbu`KM-WoiMoofSvh+I`u5TZT`iT zEoX-#0IUoi6_`Xteo+}|%y?!0vvjR_Wl9j)$d9;-eMR7^q#o!P;RripNODjAgW0MF z8WPl{U=Cs3g{HmxG5LZiZvkd(791B+47u?>mlck-tde^-?O)hu!XM;Gq6LKC(ChW! zbGpdI!(KC*6U ze+n$I+h>JjpcIg(U3#ZoIp4357S|blbcQfanbrKPt^Q6x*uPdr_qmqM%$J|`htD)k z>u-~H5paHb_m)9(j1|?n66;2v2XGNt|4+Dxjh``nDg5I>ZAnBAfwF1x5W0hS^BJI& zLcRD=10w=$DgW@-_*=3wm54x`BPyJk7t(3~L9zL1XR1o~S|$IV2Q&Vsn3G9-%SKSq z51_=*-1GV|hqbN$f(ctnyjA<|jMYy$IAyVAc$D2Dj2AfqqGUKzTvWOHw$&y6ih#5P9w}MZq2P)oec*H#@bj zx7PVBYtOY#Z^NG6u95@TjSS!^*73@3yPSSCCq&pwjTLceI(zv|D5?Dn;v~`a!mHoJ z=8OV7(g^f5&liK-GpC6(r&PcBhEWGiFH(D)sHCAc)1jL#q+9ueRUV}Ff3qJxD(Al4 zbNUg$1(&~%v)L^FS3U+>l0dgVyCl=)bi=W(;J!z_PUfvhE~~O1gyLn6(I({~lPN)T zLT`2>q@X?;rdY>~GFV;_UzyH3OKhBokll9qgwi#uE~-y@g{u_>YU>rVev4Z7y|MV6 z?TG>LwvgR)n=J^VT7fJa^*Vv1it{76u;&*lnGX&<@agy*vtlYA+PNs3>>orFwW!Qa z-S@vN*Ul(Nc#AR>^*L6f1;UZ{E)*?hx(jr7qwTa?BL{Dj9Gb85a%36ox7cT;5@i-x zoOL5~k}J+LR5R~ACscutPS(7xe!Cl}{C;*Ab3U|`dbofwezrA8kx*P{sl$JgF*82E zL%DjdZ;3wML~Exk%?9;&ZtIpU@;XZJAy?CH?m<^}Um#vE;?C^6FF<$Z%=EeMdAkzu z1@wk1-)#803^%j*QZV;|>xYy+@m*~^t0VduO(&!g>vVvNuQPvPP0(evZrTg=-CE+& z_`5N-G^4v|Ltep-7WfzbTah1I*w~SL89wY^bEz1!GWZX2C}Jk~v$QdfJjy9>E#upC zsJ!YmOf!=+f9ofFFoeCKieUlJ@T9?;&sE@jUw`8CYx5tPJ6+Z=+Ab|AX+O72W;a&M z4I$se;3(L^loIWI`Gp@$0&zQ9{A-sl9<~B$a@mCMiXS~nY3*KzIwg;lrXIgz{&j%A z5s%I+!dY<_sRiQb%zV}1!v;ESgM(N+zto)K-2?k7RsrS0rV8e~<(>>)RmijHiZ!g&Y|W!7-W@dNogg z^jjc4aFoeAWG*Koao-tl7P|RDknzQz2(vGR;p}n7@bIv=!)Kobi`5E>nw!WH?4+3+ zxLWkVErKRp^M{4s3F~IGN|&WmHE)0JOWgPdL}z83-=uO*z&&)N+ooGF#aqW8y?=OW zY#ktfe6DOU+D>t;SAX0%c#FlBTli+4_L09WfQ=sR`*TzN6T8YgDu!g9xsI^I&Im{@ zc#nu8na^HLQPpi6N2z~{TN!hF3>qH@?>&%t-z!(QDl|^0zBltPQSznhR*f+S<74zI zZAC)AQctr<<471ujK4d2HV@c>J{1zGe#!73%n9%~w{z%gnFq|NOKa7*RkEj+O`hik zHNDXScAl@P?759jYs#A6eYxAT(PnjfP|(qc*j|!TTU~dClq0*li)yZ8@b++@EJw|+ zM}vzlHBPaN=RSWwpq3(_^_?G z882AXEemycV6xJ(rKAkL)W4wtq{QK?wHw!uOyloOW|%e(X{Cc19i6JdfIZ3LZ4w4> zx*BEaPVHcsfLVH&qQqgM{dQj7(?=d5j!}0z=O71jn*7c(FNg12=C%P)=soJXqZ%j> zuL$f2#PkeEJq9wHEDH~Ji%X3kPS=CCYu{?FR#jC#b5rn5oyT}zHsgG zWxg_2PGtiW%Aha(!tyug6G4CpNkkC9CRr^p!6Uq3&w|(6oY}XbV1oZbvDtlhI1>cZ z8vdNCUu(OhK`r=SEFNBY-TdFLQn|+l)^8Z#2HLYk$n3lpRJjchuetQh0^J@(m=iEt z*~jMO^6FAmPLqGRPWu!4b0o9ra`gx*GQv4>^tk0s37ztjkN2V<(e#Q4k2t_z7&cp+ z77K&Hi-LRI_sNGxMUa+f`M#3=%Nl;}8h*Y^UW~hxQCHZ3a9>|B);ZRP*+1!Fc!?pt zWfoYT)|NDW5aVv`NPqK!?F;vcJt-hL-7$3#)vpva&%y?$!0gKPaEJEkFtTOGNCg{o%|CzW(+7 z;h&JOAOHHTmDOKgMF?}j2~F^}xe>;MRi8X7IpG#NACE~*lbY;q0=uCG5p+pA91 z6-C7l*?Z0aMDY4TfQ9y1E*uk@0oJQOZOpP?wX2UAYGlC!Ws!E{w)y^UY46O~a_2h7 z#6yb)44ws)KTbdhDvgpm9Z+Z(Nj^8|L+UnVrF0_oa}Fh8&RC9>Mi%*6hb-RH4YGpf zAm+8r9g_^0df1k{_r(W$X1~vmtNg*?7l8foo!)?f4~I&A=W)J;roT3Ct!gBZL(^lS?|xX4<>AHgG|DOYFG*{H!(nCW!N3=_lvf7f9drIC!_JGi)Y^{Q z`i%4&=tN5<-MI`GDL7I3`@wxMjGClVFK-YM;3{@R1EF^>fV>_hEwkfya4;L6B@9r* z9I;fT<6ZgOoRkdfD9Imo@Tu|)(mAHeR>zq)7q8zz%{4-2 z`qE44OJR{VMy1+7))N)T&A`|{vhi)x@V3_Q1!M!@is#ya*RsLQf|LSTkPJtgz*-l+ z%wpG~5jAjq`#+D12mCzt-TIfyd=L z%_ZmAeF1ot(TNT_hdD_#V`;t=`01^Ou=8ItgQ$~IRO62ENV=13YTQkX78Vc0k6B9v z7%ne!b$`#6amBVf093^;GRFgcyF&i8Y59Cy#aiwsNYbAAtvP|mYXGChN3x9l%k+dm zIs9~%m_;PZj-D;F3Ig@m+7K;?HaH5127o2~_k=C4(n%+yw-Yw`;y0@kpNuJ5e!M!BOKgg-MzP;TDSjBoqip=c_cPqug92)j-c?YeY&ApIj9{PFHf8J& z9EelwjKmRYzN-nSQ82n{w05CZE7+vr!I-DE^ywPOFP#3$7o9L4YH>L+zPk>iO3_0j ziJx~xgB`;$t^-KTOC8M@$9B6H7!sy$DgtHnk66doI96;}yKK1B`<6Px`%T8N+XdC7 z4#YqitqFXx5*)#ip`@ZRrj@OD#4u3srn~MnB>zq~(KUC~>SfmE>H8ZZB?FTVg1-;* zUsR;KXB$e-H5We7>rXF!rBA(`g=(4uri@xe6M!k}EC z#^+*(itfT&m(PT?HHx$xe0l5I9Ij5pPei1snkbU;S%a-mX*wcWpZ&>02Wh*Lta~0d|ECcZ;RK2HtXr+o3745iMB=d!?Xh7N znzaI<2U=|PPcMa0qo2&YxaY1oWk!~aXT*%}j^W*vG=X4JiWY?x4s>%iy^ltJ)}ILdip3M3qnL>jg)~}TeP82c2n1Nq*A(D$%Zsgy_<>2w50Xu88&zHV-{XC- zgs13{o2Lu$-y8-eH|rfI5kS^3Zs(ZNCm!hqmob(M<=E3XO?vy^gtu-xrSPm$XQjix zU(M~s~#mRTo8lRCF)o#{1kymL+iPz9nxMD;>!zB=Y!1CE7PJ73IF)J5gxS(@Vq zd!9KEOhnj8NXhW-CZ7Sv?;Y{h)Zfa#coNQ#B$(;;0w3e5gk_Pu$K9cdO9JQmaQAud z-vZ}0xu-=^B}_;M6=%nU@(x_kBK(rcC`^Y2TEZlN6kW8ADmqh3@7$r@=wJn6|My5QIFrHXaC|QSu6i^ zsb*E72F^S2&O06Wathb>_3Mb%w7M)FvXShnv-N3{mf+hk4k@TBH=+MBU{SQMVijx8 z?T7qSFn|(1ZOey7?%yA@c=W4=4ph6_D&WX|a2*{?4>#CKv|~%l0yg)CDo3xd0v95s zX;0sC+Tcl(z{*Dla=j2epC)_kE~D|Pq!cSmX^oPYhcS4|CW)D)jQ_YR@cLVnJrPX&1Tj7&(rf|ov+BW7#>>mc6UxVzfakibkhU?q4`htFNr$sp(QiWqZOp3a558xwKI)wWfPbMsg0?`ozu&jebdC`(& zhLE`EqW!AW)AX+oiHNWjs>LdV?s$*qk-KAeub9<8c*|=J+HF-0@6EyQ;e(j`@axSK zZmYW<%ylpB2;t(@(!0_tvBQep1R3I{=^y`WJ{NY>RoMC7O|j^7Psd_n$*D-Grdw_` zC0x?v8F$5T<4K?K$$^iKPyex37M_d^KFRV!c!9pYWC{aMLNASA7smCGjEqd^$3x-q zGq(E0e=am79#QfcrdK#U^(gOerj_A}aHhAHS(y0d!#RF9xDj-rt-WdDZ2|q#?Qux} zip^M3u;aM;(0v>|dNA<4e(^kW>bthnQkWe4beDT1$ZdjG>cKa!l!zAP($&a!Ur#wP zcNOTdDe}XspDU#>kPxZ2c3vnjT=366lWerYn5Ou;%Sn_@{??QTTT*B~QfN}9I|QG1 z4uQv>cg}PN98oWUU-a7i5Y9BG^^;6&h-OLq?i*Iyf;f>wRRpuxr?wzGMcW?pR9{Md zor_%|Ty*jyxoW{=XR;l!PrMtWShbxt_6~zAnFc5W(v^{6k46O2(D|)~e*AMh8LYe~ zLbj~ZU1e}=K62Y0a`W9>hrQbQcgoqbr!iN7sD)!8lk9>UX?|u2B`dx#ru1l%kIM1l zqb0`4{tAc%q#==r2v2pmkA#0q3pf3ho6!*!nbFa+2{E2;qsvzBQC%FoNvA1&8M6ls zJhcg6Azwqu1Qeubp}E8v+2>*}++G83R6WiMxkL}H`ta=4hxBA!wXH{Ku1VO1)q0-g zk@9@+*!5GrgrwG^L=YPqMx)|pi7bk;+fomrK|PG;-Iw|jKmp_^k!+JFE zfx)P%7fJn-w|=o5)%@^0te5pXI9hjcdf;^{+PEZAT7WH>tfdgI^wf zJ_N@wP@YL>(7Q}4JLkaZE&hjb$MG#leR=q^Z@jymopjT?sAF9-Kx zpVzXUsw%%qt)Yp`;B2Q(*OEhhbzFqWQ3%=gT^d~wUj`4qZJ%8{>J z$-0I6lP5u#myTpI->0h=F_gWdi`GpjzkBY>-NO$~whH|?LP@gh7NhyW=_f9)`%;lX zTXezG!@_?3^Ie=@o3Tj@SNDXNj)UZA4tiH;TKi=zFFp#GDmw;4*V7sZ|igI3ND)Mb;``(X@;5;PSEIF z^*Kz1ddK!$>9sB^xGIC=%wAhGivOUvYTXXe$%s~|$ox*zVIwB(0JLkV?FnnBt?KKP zN2_}A7`^J(ou1p$Hn+{i{V$M%h6Si2*w&#{D%(JnjErpru1j%=-bV!{;}=<|GO6CX z7f{cdOv;k;!1bjK4#|InaoHF#nxY45mv~nLEyPUS;qgDkcIH`~1KM~mao<3eJL?~W zFowEGY78@)Z(H(MO%pUJ4OelMlRpj9&(D6Bebv86ZB^?II%{-TNg z`<6fC)XAoOM%t2ZJN%wtTfk0`CS&ODNmJU%2%sOPKlwMWoIn48QDTnd&78ViGcO#i zxe)X!s%g<+*^1Oa%?LC98ElM-at@*%JExkU^thpPiP8`az3&XOo>(@$THk2y8~d*! zUz8B=ER=7CZ-P91_UM1ZE<~SgvJdpnglVHqD60)Gg$jNx5@vSnN8ejGquA{zMu@d- z3{gjJJwGz7MN6z$N|zx}40#xVZ%TJh+r(FD1sv1U~5qR$k1vRrk^oeqiH3X<_P zKkgFUzTDCwik~PE-Fg~pnQF0ffzM`o6g2Y=Ia+SIGfy+id*I@|`q8HA;nLob`l!Sg z%46z|qb*Uw-KxG7chrI%EJyj^!)st;neIB&_+~C&Ks7_WC{z2>Q~i3!Nba?a5S>Lo zxoDanc?3*b%b=by7wv7?m0yn=RHOUOLc;IqF8FwP9o9<9_8yEbwD$Z!czE)+`MHt_ z_VpK<%tiF2p~L4(B9z{(1@bxf%Wu`6eUx7p8iKHY*-pUQdNF8bNxo_T8mc-jtW(XP zp`SYO{-V2;sol&(xWbztma-O0c#7q1t5fDc=E zdA`r&!-CI8hzK=EY8^`3Y55|xe)Lc%)S>>P#-wd5bvlacHm#`J*I1^k#rSB65l#KF zvbC)8xTU4;=%w5a$eTI&*0zmvQhU}O85x2E?GL<*mY$KvZS9o7%#~95iWxFCQtLjv z>a)m?8bQi&Vvx-b+(t-gxjiQ(kL`8!aaV7x^BKL~%Fa6?vb<8PjMqnjR@2qg#8fXQ z$ueozos_>SiFYHN;oz~+A9W=obBo0C=z{OuqKWn?I?mhygy9}j^1je(euJitpkD^D0sE5>K+1h7|HPxmsE28epPb9F* z7Bry!B5qrn9i+&;QvKQyi;W;$7o{XW>O`Iv+(zh_1AU@uRxn#1=FLNG@B?zfw8-(M zLiOa$NOojLL>}18C5o!@ZDw@NnQ?V60lL~{IwSeSEr^auwEqGJst;ndB>2|qVP(3Lp7gtpJ8VH8OgjO>(&*@Jsi)OvW;?i+q4Er0@iR7=OF|CJYV$m;qgBQ9yy0(Li4xHkz{AV7yUX}KI$%| z(!XaAZ>45Pw7`sLCO1%kt^P2KLD3v2c#tC<@<5o8xDPCGDxXwmXoQrc&ya2RJ3n!z zDJumQnr>j=fhJje8ftTFzmWt$? z%a1NYv&?>Ghw||@4##jRZhqh=oY{#tLP7DK?R<7#cTyD1%XWxgKJ>LpZfsGe@Whr& zJNV^Gs2@3&grrjNlt6?-a+T3coo7rg`<=}qNARikJ{-N8+dXt%9M%scx9M#@AIWw| z(0W`|bxqS*fN)y~+26nx;Y>8xgo|bzlabE=}c`fM^xvSzWif)0$Yi=b-2b;sWLorm= z7cHcX@%eWKq}}R1#&_d-O;wJdKa4$7N&l!i1P?5Vmn)i&kXsWb9-_6H@^@S>YW7%G z*u3R6(p18j4Rl@g{mrD1%~Vm)spU-W|3gc3t9C1|*G~bcA%`D1$r9#G zIlC0D%kU(Y?qjOdQ4ix``E-~r2Ddo=s%Dqc;6A5O?9@1+juF{Oh|gVPqc9v-@?Sp) zR^!n?``zTg&Kd}xkcE*qqoQND2WB+);~SxCrDbFaAC~US*F-%8TFuTnA820QbbrQv z|5-Ld0QUla_DuJEvd@nOaQ8GK{Z>6&cIJn9x#1(`ic%S_n3gp?W1Wnry_G80YC>Zn zbJOzc9g)1={!cbHCFvt`%yON#s%XR;4h2bjGAB1U)Iv1|s8?I$UNaALD2=tqO7e6K zpY42@)QV2jyu%qgx(V}g$H`0Wkg( zgRDf53k~;7ZP!#TwY2d(c363UChAReX@#HM>vY(Sz`DUif4Y>fRzicFw<@D>2`*Y8)Y1`m^1>dT!U%Po_#&S%(Fo`!Y_Yr!oL4cwPLwZT3=TEO?v zCXWA^s)d>FZ8yV%-Vm3yF~l5DqwtB;`vFyuutKr4nXd6x&muAr)Ow#qB#`&#)XZkX zfEPGHKD)L7v)wTdf>zASjBt~WmE&t|5SgC2cX9$D z#B1%=fT0&;5<*f4yFz_XKD?$`s&B6FrZT@mi9PA1Fn7vw?}um3hQV=l z_Qi4X^d>!#w;34~fnB|3W=n+rabFuRzBHr=@pPM4Vo$U%GkaxInytSo3D(1W%<_wu z`(;-8clqJaO`c{yx+?bs?9tsb6>5HGnukpx{T=AG?i*4w>r3sL62v8&=+8^~weNs^t-Se}h+A zwrYL~S5(~`YHdwP?@1!2BJu2>^>UaQd101vZ-*r>Q0yo^@Q#B)p!Vcv{V|kg^xge= zSGelB^gJTHZ)~M0GgHC`w;U2$;yFke@D|kjLhEH)Stnl0j(YS+S~SZVK_UWLFcFai54Mw9lket)714Z2#xX%wXSNzf6XI zxubM(f@E3X?bIxF{F?CY>qNryCd5ApEYzPf*_*6!6T?o8js@^>JZ7VN_56cQM|Sm^ zGOd(0z0iE>7BPgiL~FkmnZ*-PHP1OmK+iTY%R0{c+ADJ0rGuu9Cy|*1grPcPr znmso9CssIiod!?GEfTcL#~=;demq}m_b;c}AYRUgUyOaZ$8Ungz>fKzgdaf{?>NMQ zOV8{G6tbKpL#x4TRem@QU^P(WzC`D{Uv+)`4Y|FR{Zk=JXli`H$G__mq(}TfB9E(dm;Q1^_r zEK55mCq25W!WX}z@+HZSyjp;N^i>(hBbf7lWxbghGl1; z6#Y=2govOGS{iHF^e`ViIo1sHZF_nMzJ>c8I;I&x3wCigzT}Rl6Z3L0#)%QQlgk&F z>7Kbgu;&=nst-4Q98bp)JRVq|$=~_T=Qv)tzwtQ!{SGd?Aa-8vmuO#w{G5k_iYCG@ zv-7ON8Kt&If5FIeQg!+(s|x>80j@RMJ)*W-zqgf#G*4K9piDtrFZMc}m`<>jx{Gaj z9y!9+$#GI8+v&4>P~nwy5!btH;Phb&g2z1NkM6;L&nHRCjNR!}7^}Hlv>ZeGOGd7| zg$G7d$=>2Xo6Yg?)PGXwp%F__*!Hw2>sC6t42A0U8LNmGevk%-K`iGUdM!GGV`T`Y zY#ZVp8#$Z2tqeG>ELyMp@uR~Dy6N%Dm#n7Tgg+K7GqZvM=2eV|`!m)AXl z4~voReL=W~>OZW{$7j_~vLzxC2-?1UBs|uMkcJ9QNLjA}277C^nIG|!LOP)>A=pl4 z$@7+CZVoa`zp)?o9eeCQ6*e5?$6bm2El$k8+;uR_QC5tcV@_WcLkn zzntx-)#zTNu?6qdE(fL|_nv;zBUt1;)T0z3Ww3w%0c($0kJ9*aLW|P2Zc8bZ*j#^R zMmxi^NyON)Zb^D1L=9A^#J7cwH@Lg6F`CjrXi>z3JB7Gx?D2^YcX#WaN-KL=D;}zQ zoDC)MKkV}1CF`A^yW{(_|4`H2`AB=$qR1XRe$)O1bG2mq%ZM!RG$<%)Mq8tKZ!hR% z#(zAS1(xB8h}?_yT3tj^M09X9PAvL{m2U@0qHM-y=b6U`< zENPY0)7Iz1nfJek8#@`L1k0e*y5i>J9v-pWU#g>UT_`V{-htk*ij^3g7qk-teU&SZ zbRJM>(e#MmB4^vC?sHo-mDKAw7?qdVcoLgc#kVMts9)CEN&O((Eqpw_D54u7$03*L^d5v%QKHj#vRPpQ#CA7JJTJ?ssLs^rI>O1PvwhGI(wKJ&WnXL{jl9%gT9*N{GL0{MhDxBJy7AUVHMd?16NKk z4YBR~WZT&P;`cI>$_=SB_7b~op_6iP)&tR7o4RLy%!{qrEMnxX`<{L#JKScsAd&c% z>VO^D`w?8}Nb~Qe?#T*(=SE8&{JXFFv^o`-j<@gBv2P3G-D{h4yZP)WwwAKemfyPc zCf=^zhc#ANC(kF?M(wgh15c84a9Xr7H6KOZakqp7&-09rq-%Nb@ich<{%q3R>*X32 z$~A-C7DF9wjx5(-tsj6~E9pE<1Vc(Vb4fVRNs9v$!M;||-j=erSSXbo5tl4Kn{pV|uh~qn@9?Z1#QR z%s(W50oOCB`R)NK`9teySB;C&m%d>0j*4l$Ql*db@yBr(j*bC>MN0vtZL_YW_hj=V zcDxSeH!my2PpNCjvs`?fQa3Dx`YPdu`3(>7mz`!sgCBzz`ILBF8*A74NfvL4f!NxE ztyE@mi32?$O`Ry!W7LPjOiN{!DxTCu-UVUIbaX;z-_ovuivjUGMOTyc$vLg1(Y{k& zV#09`xv9ZGYqd;KD6WfVOJ}Nv!H{Xh&}2v9SCaS)+=@|qy@vY@&`+4(|1gG0U*3^l z5LVve0U}^dL#O8RrAWGPH-o20wv%13!<1gn+p1ntBsV4|%w#Lprv8-A7#Dy*dx#It zc5e2k*0DKeJQ&*1l8mk|87TIXd*sf4QlR;fhIp1Da*whGeDY7LpMAbdZ-dh~%w*ut zBDh=S>u=#NKafDnBTH-#p!r>QM8*>&!$Ug~KO@^~pZG{4=o(*vBeaj&&W>k3K6!z$ z78kX-S!ZP&q)yU_yB_hlXCnU7rI6|KLnKVN>l1}(s&}7VGMzTM%7t3c+B9GMW+K~< z(@u}8Q=k&ev(p2&+rQ#HsS^bpz=fg?5@^ur*&ak#EB9U~l{Dx`7UjvmOCs?SjY=&t ze1d;nPutz*P*UV9K^jQ?a@0&`a!_Ini1T z2CVP$SsXf=3RpS%eulKh(t}|H)xnXkVtofYI5`m=h@^&JIW$^r^zTNLWO(Q2E6BEV z!bpaVypqkYjPsurnh3#X9>M~4xaxgF_z2@ydUrpFTM}f2!DunUUEHt|NaGiAT;rR{ zq37HM+p^WF5i48csgA{Cy)|$z*y5z^0Sx_vuI&Ed@UbefKt3>r5uW^LaAo^0N>H=0 z%MWEY-1Y<(Mw_IHE|=KewDN^D*1}ulevZvQ%u5AJU@0@iJfvpacQjZP68{VJvIt1W z1FTP%9<_+^-2Ju%BI)7^IpbGc^mVm|g6sGtjOX#c?4S8)kO}^NY$&sEhm(jX~4ZEE6y_mB)5>aCgI{_STyvyZ%A=87Qx$n*C|YsxxcbW|hmd z{VqG3BAZ;acK`r%F_p-H-FAO!C)K^(_vtxiLM3_ojlJ`h*Dd}n4*7|#u|;dbIg;i= zL&4#9MAq3Sh`i+~)E|1Km@l(eHXBFH&#kP?(3yIw#lJuPHz8~P7l7A)AMTek?DDRkC#%aR5L4*zJ3|lC@080^*6E{! zmZ{`+q#A;xM`8fvFpuyLT=-dg0ej_r57n@*2y$d^b78nV%JOTcYYCELy|&KM0ccR4 z{Lh)8Q~Q262t;>AS3F!|L**Ms zFS*YO>2c5C%kC5Jd^3?dy7?<$9y(#y!zg`u_muIT zbh+?*?f#O(PlatFt?!+bqYrN&5ue$rTwTVhrge?k^TS(CB}*3;IbaLrd6}Y5|N2n- zk>BfOAlG-S`Flr2=JFB=nh&2zu5eJNztL^SH0UDH_y4aW)RNH%D|C(taBdJgyP;V3 z(af7x){~kg0V-Ac*K&zGVxS);0h(Lb`vQ?f8pzyToB*2jVT; zm=9P}Bzwi58rAj<^@4IkG)GhTVw@@wPF+$Eo? z6i&B1YLfZAmxS&2N|JKaUu^#EbICZbxPc_g`A@qV5>knv?gG_}F^j)u-Ll-O%5y(O z8=!ys`-}fx@TBd!E5xKETwl$({$03a_KMEgBVn=c(3%M`4vs4byP;SX<386$$lZZnR1<{ z>6pH~e-Ouu7K3j|ReZ^#WI_vE|A@xVd6QH%OQKXs zGv3>8->2`G10^JIpJe$9gdiV$3jp1@ON?8KNE@ZY)w91d$5Iw6eUQt2lk9oXf)~Fw zn_qBGB_6jBQdF7l{s+|6QUwgW{PGtp%PU>0XBjK*U&qsY2wvTv4iTEvE;LKA)ZJ_v zhf>^SF1;E20LQvtGpN^$5}*sqaP#q zE8^c>xXkwdnH#;b^RApcC90U^Db{PT7I~KgT(>(SuZxrd>P<^C3j6xgTpiopCRYZd zls;HMKJtR?;z-FS6 z>gw{YQh>GR%=_33O$YkP+>S_+M^@U?d4&phqU6}7W6vsDO`Za5DM@F8ahKP0qjiP(1XcGZ`MNitia`9nVliAKAgpu!bn z4V$|U9~zqd5l<1%s4>eBdYUQ@lBxRO?+RlTaW zF@tfM6xX`UsNTL+wcKo>$|u%%rg18O7{tPR6Wt~4vvFgqwa5z--r9LRAvd<-qaWl# z(k6tDIcUB8j&&1zZC&U@c=FnGrbQarVT12mXcn&>xbOwK3#_>JnTZ7~s$ljM)PlLX z4Bj`o8e>V!693I`c>wmC_^WK(1eZYZ17fF$VD$M_mT)7&${}=Tb_;Br)btV zj=nPTb@+7VaDEzF*)x$lg34?mi0;Ia{a6e|y;|9q{LH(nc>kv$k}1%F%@`J=#w0B?`YW215tNo-B#%WILy z^cG8ZN3FZeV}&7`%$s(_<4O`0TjH^l{h2GLUVmwVed-on9+KhON|>!(4#>2dckZO# zKy*a+khBd2$?~grSFOjUy{?D@pFjFieLo)5wZAd$FjJ>p9+e>~aPoW!qsSfzzc|{9m8{<< zm(EQdo`P-TO2}WN)^tEzYm9Up;ex2k@<%%SH4KLO@OqvQ5wWBJhQ&+5uA~$6W0TNO zA(|H(?2=^E+}$gv?*7O}#1>Tp)3=k^~)4 zo{v6Xp(r@i1MJ^P(ARwdTF-s{w?>gNvOL4tDmcb zB@aH`z%p-1iXV%4V@hzEI=8`B7@JwxRp7t8fT2Vg-`yTxm)eWbSKZOHnoIlNjGkwm zY@awoz*Xs)+b4YBYp=7ES={n>`KW5S`LL7@zC+3ii}RHPMJ<-H2oQ77F^py<7Lsvk=|c$^rq=g1&@Tjb#H=KZd9=w_cg6 zemQSX6SB~f6!-|@2sZ6-x7QmIYMX*SXK=r~kAN-k*gX^VBb)bKv~F>gCkuI!G&@SA zdov%T_1?kNxP7LHnFw=scD>=tOOhdxO%Vd(g7{)d>%J#7$u+8^3Fe&h1Jj;^i}kf- z!0fx0PEn~W-&1zSlX~2f-rIzWh^v{5vEDzksx|nS#)jbAr*=Hff+#1fq8HB&E^qr_3f<-lL!K4tGglKnP%p3N^NS`*+6ax)V~smhH1{Um z#`@izJ$%AFwz9-WA-DND4!NuDO{t?TS~{&< zSS)Nd$S>_5I4UMQ_BA4U)9vvfuXUbRD=2q|RW19J9-GB=sl;D%^5F7YWlQ7=2);?nvOf^QIdR3I_L+!`-)lLppf}5`tu(sZ+?(wC&157Vf7Iw{z*^DNslYl?C3JcoiKr)bh#fu(l6Qd+?iZ&P0Zir3YGYqn~ zxRi)Pu30}kJdXB`QVn((q7!+Lw4)F2r_F*CB0pV^k0%gbDOLS_4MPs~%J>ABoI6FY z>!Ugwa?^)+?{DS~Wbp3#ch zISzY%cDeor#66x?`6XZeYHoX8mwplLU?gD_^8YaR)+EOTm0!5017N@v7 zlmex=ySo$IrIb<}iWPTv4;G|21T9YR;K3od?C_P}o;`E+JLjEw=ge6%{6lQ5m8|tV z&wYKa>lWq28yo5EI&gX^a(8la9rceWcX-;$bMxGxN;9e>cLm&(REz&YW^ zHBFH*xjw6bW24!tk$J1wQn`~&?ke7|jsm<*UeUF#r(dNZX4dj{lv7)(&?svVF|)dU zc6aBbkhZp^%`KC;jQ~!U$S!UzzW^a+4;qGI1Ao;*V?54wj;eWj&BFfWnXoA z{fvz}r<>aMl3DjD73VQo%CTuMSCw;`R`$dU&K|=bj~5F@`P?`tiZ52BZjnWNoBu$ z>7ZzC2k1SmI@Qv#dQc;J*0k?Ed~4z`z4`9ogfu)rUIS|_#t+$$&0$2auQelO8?f@V zt?l(mt`m&w1n{u@ma;|SS-(BV4NHZbU+bsx1&$ZU!|947sC$v5pr~3@`o%>~l>KR6 zfv42%k$Jk3inQEMl>V+wYJ(8ZEnG#T-E>p`tp1l{iSJBo-XYjBn+jM$Ki?YF#pnrcYi-!pA8susm!Nuk~SyUSEjWB880|O z&Im?ZkOkk}2{hZe+A-X}3k-i!2BS>UDNm@9xchG;Hx##v|EV-352yNj2b6UO&1Wf_ zr$SfgEubJ$vPJQ~W?z#Xq>I9wOUr!MeE6TTR zcJ-w7$h#43dbkxKw~qh%H2e>r)&KJC{we3om$ve_NMUhi`N9rokgWKf3LWOwQIY%G zFt^Z^Qu4toL*(#zA~2-_3Hg@lCs1j#4{?{kGcg!UQyw)QuQ=4&U~KTx;8y)G39fp2 z!acRkn(b`9M^DiVSKMBhY%n+F^~B>pBUM#1Pn~YoA26*b@>rZR7t}$lB5eb|94h1| z=!U&G z^Yx_#mizqhL}O6}lH}E$OnHo($J6`+*{sA)0*-(ZFoNAKCXx3!)eXKH*1I6ee4h!fvR#7w>oMsI-jzN|D)l! zCuQ?uZ!xL^=@$oPdRjxv(*RO>|M21Sr4QACpkxI#A*QxU?$#*>GLZLS5@)2NO$j#t zIUdE>$%WzRo`$(>&F09?54qm@B9EUgyg%N!K034O^dd#gge>_6=(jfDS##S)Fo}wF zn9tm*Hv&~MWv4bTDhl+wGF&xjq-&Vxe|V+)itlmP-R3XPsS#IN)s29^xwY+juRPMR zIfw!{YMEq|4*mWaX|yzati7bxBD_g)y@32XoSXC3Num0MjViU|*cfhjT_60*r2WWo zx3%&`Lj4oZTAY)5oV~!AA2=-wtb2jxx8=4upMQSA7-(z0zwzz;k;%i+9lyldiAQkY z+Fl>z){fui!WXF;p7N{fb$}8sD6j>IrFTbzSjd#GLQEq!#f-l=cE#zF+?}`smuA8> zE6RJ_<+|Ku$<3Q(Z!mhhJe)?W#zHe}dm7w&imd0IQX_4gMvt`ZfnK@|d+ckkRQ$@I zwPT|F^m|NI<%_52AOgK8R?Vi5{q0{nIxjW{990N5auS$ST~!}t%j~Eo`inMWmKYW- zU68@5W{+LM3WUgy*()oFr+}en0C3GVqsjIyy;{4kF zQP~Hz>vy$8z6C`W{AViDbac|=iLC(e>x!12E=8t=lAJCWQb({4TZz##d~dlKm6dx| z9y=_?ziLb60*?;|6Q8lcMN2ljF7o+paDzNec!<#f}myKk1V2r)H4tqzez_T$umySIAkm zX^8}Ke^&?IqD05?ddy}Bh?H#d(FIZw;ZEiyGQ)P?I+UMuk{PQx+IE?;`-*zDXTrTN9K(zQq3s z#-b1f1+Vv96+^oHImraO{7=8S_d_aLsqbZ%DHW&U`|5X8gw5HX%Q~#T5xlI42^E{} zZ?H^CX2V34yI{>9i1kaN70&UR5)0>PL1df!v$@gb{3}|E;Qqgr7NHum>|6qm#{^)-mZvx69k! z?>rGtu|s^eO$GFvR888FzE9p^HTNAaF}HnqPH~+!B1Euv)YmS&ZW?Gf9pnf;`^+s9 zS~RX~S6YD?#MX^gAXLPo5bN)obo`ZgeOiwPG6?+~QS8rZK}P&-m1Tfb*q3z~$2^Uz zM;6_p12igyamq1<-`c8Fi^Q$&UBV;UT3^e+IlH-Goc)}ZDTMbk8u~}Dfw4QHdcm7B z@#E)GFSikI{t*YP@EKR=rjUC5--F!$7mWOWd%XJeH-FWji2!HT|2ufAI30HSAV)$f z*>B#fCnJcz7yHR43FdJja&!}dP|_W!qc`hWWb{xd4ddEYextoV${G{aC? z$;8iF@}W$%X!ZQG}#?gu(m03uyA!PGaTLd z!`9aB7TEp`&BHSn6Q1skSyF;1l$?4!@1_2HYS;q}2q*8Z(23U#WZ>1Q!F!oL6Mk#; zEy$WbyO^7?CkJjlgy_f^H2U^6!iepB) z^$&(mQr@oA=5f2@P%d0Zn!koaP5r4}_ER?NHj+E_9T$KvRXIM!-y5Zfn|LS-3dVu| z6r*0Y4ETJsBYU&uV7Yrp9%sWOZnrPqBsL(bADyM5)>_f4oq24|T9t*SY&@|-h1<@( zVN?o`#bj$FiO5b&@I5fMO%W$&j)6%-7BO&If!>d2U4|Ku? zc&`x&Qc3m&OnhQ zQJ9*(vz~^G5r$G`tr(e%24BDlITR^-Ij8u3g}T~1%6RS6m#JwMx+ca*%_jy=`*N{R zw|oQ9xF&m%R?F@Quc(Db5Uh#4&r|)T1G0PhS78{CfYu-UK5xceA5H29h709Kf-L!A zA#fwpT#n4dS`S9|Xfd9K#W`Vx=C?f6ma&2gfLnA`GnO=graDil9unj)CzN|KnR2v6 z(p%rdKTwIXFgkAk2!iwy;0tibk=WBO-(=6KM3(Naetj#ec3#2U9odon8ug2VLE6tC zQhEgUSQh+G1pSN*mgHeSl(hr?!FHCJd8P??_CW({It{d50Z zX1Fx0Ch`deZE0uID^si8zX|`>l2+kRtpnG@WYxsP;Bj9r+J{5$1!~Scb{k<~h@`LECCYH!VJ$Z@SsCjCT zDdPsDEx=7^v%yV^9J+EvJlm3~hGkiPfdL4QL+fcP2ucTDlAf&#MciS79RR z!&z(+^ci@|k|MJEM>_Zfqt^&HJx8T`n2IZVTTOJjK@>k?6_DlthmR%g!ZH$TJ4z3A ztth)g5_{Qogo$kster^7Cn0BTY>QPRY9^dOqTIHWsq-vZ0AmX%TO)^#0?LR{4uBQ# zdxkzWyvEF+S6}V&&kD-tI;%eViS*%zTsud|I@ierb=m<(B=u=k5 z477}iQ5C$yPF^^sGsaChQJBC`XashdE@aM`|AFZk9nD z510Qy4RmwY^p?uvdA|rO)a;Dtx)#(8r8u7Yl!SaS;a>yuYVa*2*KcjACJIQjW=ykK zU!h0$^-Cx3UHijs1v!(#clgS@x`|JK)Uo>fSuS9e?EU(o7!5ObNt2YIMIa4W1WMIl zM5pnaG zF(6~TaNQ!CkfSGG@gvEloiU@Da1~)tsJW4UA}F&V^4tyd@l_NVeC@tE#hFB44IIb8 z^SN3gveUE~#Botf00T{xkmhg1*~?sjWD!vhrxvZbOzn7>xw7aecR{&S9T>U@^mecV zs9!f)7fDUd(?l4ID|_}jL?q+v zJ8$j}Lc;7i9pg#(aV9?Bro7!3!Sw#9eR^!RTZDsFi(ji7%KmHcUkxq&=wRwwA*6Oq z@RQ;Gy^Ppfe8EOMP2AFe!#78~R7d6XwL4Y<_8@pLI~5svHW)GRl24jjv`P87st|1=wTZ%<=5{ zt`Ai?NIXTKOSgx9V7|}bywvrKqbV)7Y@^e*}B$_!52_NO~`JJ6NnG6{mb zh|Hgz$qjTtuMJpIypn4O*tH6FhUA`v*apdXZlat+4|=`OswGm}HWd^r-QTi!B%l9* zZ``DK74lNW@sG@A#E z+9D#Aqa1jxG?U4n%8b@j=9;7dr|RJ?;W%{5=D}53O=tj(fY4$HQ z>aZ2dvz9D5-&_mST~io&~Qr+xcYF)n^Iu~D_k6@+x15f4vrISzSPR+YnIagf~ujNM?g|oGbD>T(z;DdM#r(!pfP&A@dXA z(?>3HdKVtM>p{YoOY5j#&Fpe-cZxGt6n|pu8(NUdhB~qhv0e|TB0rx-zZ?Hcex&Lz zmf-ZPsP_J%Ql8F5puIXT5AQ8*bNr*McB|awD#oW-=9LxHQzq=c_p>d7A$B%!3OvZGy|Qo>yVi^_j9{x%bbMTQ?`W zfYiI-6SPJ0$b%ZdDfOm@{TI58XN&9$7_Q*&&r+I-fZk=muk4jm4pE~>f1yK#(ATLb zp0CAT*`-%B=62oR*2gM9M(_kIyrbq*<_5rtW87)7!1JL`z52^sQ$~o;vi8FwDJfT>$mboV=Cfr(RtYqiWVUUAS8`JGp~-TXF$S zs*>WrGxD^H8z;eun0^{U;Xom260Ee)7s;+5s&SCQ+yD_drrGM+hhY?+;A9NrpD}pG zvB@Z~$l-5)&(JGskw)0;jf4eZl%N}5(daD(Lky*ABO4_rgL!OCBr>L0gXI0Ggfs$@ z@&5O#`#Pjc|E{tX_8&b!yANA7{9_bu`zE>#?l?+@5vjp0Y5ht|L58^IovlXe zA@$mhqjvv@gfad`_URqDE>2$l9yUZ48W!>}ofl6-GC9GrMsq~EALBZn%ch3(2Ts{P z_*^2XC5foON9^&exoxGm7o)0^E}G_{ZHPr+CE-&H$P8M!}JD{BeSo88d05>)Q0)W$Qz^UiDa5Z)k-2lb6 zaNEzrBUwepqZ>MEm?I?VSp^zK^_`^FRpUcQm#m!@u)1eCLeuBSz}&iFZ5c4{GDxH* zP-PiWzf0)+OG5aiQ!~uu3M0+ss!lfF-Qjo`R$rcZ5z5x>a^s$0;>dst1L>C1ECQHI zL}qRMdJ;0y6<~^*4JLb7ilY)yc3OezcF-b;Y)>J6Vtul535Brgl#C9$#uK^JukcM> zD?BI!^Fz-hGlnQZuXh@t0T<9F=_VCIvT1T)-OtTpXkP(FwXO!+lq{s*NL!k}}m>#65H(D6zp3&pMG_J`W zM^2nEZxMxIi5r5!jTemc)A4k2l$#9ggYiMEJNfVX)Nq?}%<~0`aMvB@NHR<^?+wC> zv7trz%F6iSOQ?KTr$V|n;fWH%1+m6SFGe75Br9o~ zFJF1{dGjz~`_;-#hm^_<(mPU}Hp%%K-2UXQdydB_z#G~1rH_ks&>XKwc?ib4ILQrI zuN_osDV@PWW&z1!;6~+pd}`^vim_E6Ia6y^^B{~*8|f9SZp4uUE}cyg1gb$Tq#})> z%IezNg*Dx^A&g=~RDB+aRnAO3#Vgh<_YvZWS*=fTI;DZ4zY`m2eT>UIhsY?rJk1R) zhGpINqpc@!#Nsk{_*B9IDqJ#)x_4-H*J_)2-X&Ba8bK( z;=j9#VHR_`D-wtoKFy_A6rjZfHT6+hXs#Te3`^K8^tO&CPtJym&<$4yP)DM0b)7wz znsoKH)YM!+e9anefWBS->)NbJ?vq?y-|I@sVbrs+Vq|{)$~LxW!J%(>=f{q&>C`4D z2ZNuDeN_1sYOSo{YBwiV{rkpb&Kp5!)2{m{26#g;=j~xUIP@T?NZHi@b^)FuB}|a37aT7333SAxXmr zhSo&lX98@Ez#{{MZm)tR-op454EBgusc`qc95|(#2CR;4q|xkql~$bX{S1qpp>Uc| zCWGmdhuHI5Yh>0f6=oCZ_1S4dFR1Ing@Q5Yg z<~8jMxjPR(v4McmbEty@<}sQJq)6hXuSq$O_vLboQbc1a%RptR&U6pPU>vHl$8s&! z!0pRX;S-jr9pDdwi8s&u*h|~$&h(yds53E>#x8-(k=mzINExFUVBD2Y<{&zd^A=qf z>+$w<7K$qdn1tH}i_fCIQ&6xe>)7BG*H#QI>)y?9dvw%ITOJ5&o(9n%y<2_H<0_N7 zv}xe*{BWbnb*g@%V7LbJlz`v!E*Ux-{@WcAN|+q3n51Y&;)HDj4$l zI&BIzbdfjbOf%ic2n!tB;30gn0K++IWiLtRxoMOtEGXtKO%~&5xpGurkm|E~N7(y}(`#obs1X;V(me(f)q8T20wWapAa8g6!<0 zWNe1#`(zHkUIq8Q7!fdBH1>gt!6B`~?h19%kzx(T5*VrppCF5{0NU+&TzS`8YVo&o z%Cpn}fsp>j>{cD#1*s-&nUtANxzmDu$9k(sQ&zJh?dLZAz>=VYZX=mbOXA~)PqWY8 zsxvj?;%2nII7vAB-O+yqSmSNC;kB7u6Frl{>i%I^Q>B$K1BW4#o~EjQ7}y}$JPL?c zg`!({8Y>}cM&-T>x)YXS+(`AYBZJ2=b(`)lRD}#L(RKf$#Ztyrmw|wWCXzv?Cl(*- zc@F~Esx~#hIXKiS1HLBsan6k|h=)U_TVrWhkJ=!I{R#Rzbgpa;krp4ZVCEA1tHN`B zx%=Wu=QQs<+hQhP(qQGLU-Px>F7j=*C^-CzhZ8y2U~xG+-xD{a*X-GJ8?+;@^2N|} z;@!n$gL3zyqH&ddvgv(9@t({Ep$gw}f0#J>YU(sISKTktfaC&ObSt;ri^>f=G|^PA zmCmj(I$v0wCL+Z8z>7N`ijIF*a;1LuE(Ouqetfi5dy(||{Dt;8!}%QTM!e*K!16&c z>Rd4j*02lJ%<kVhztC^hZ`~4r-W@VG8TFo#X0{M8mq@2L%&}k&LD$a6o|H0~+?R zv@{I`R=7iS$W?WTTPPI(DiWXD7E}|cKYQxg9Dg@JQa5klE@|OJ1A;DB=!v~<{G@CC zY5;qx%U3SLyqgz*?|FSKY1fe}*>bC2=Nk*IKpKKzQOt88tb{NT51J;jL!cjyO(;4`tX5oO&gYYVrIF6mK$4fi5_9byQaQOuEn ztP5}ZvW}@yWH=6$M$N^ zqn1r!T{)}l^11 z!F?l<2@?UF`17W^15{q3H}b16y7t;WQ-iztgf9^&YCFKTZmvF5yO{*Jeqdl3FgM2q zGucA0rMe9~FEc`ewUh4%OsjV5_SBEu;}|ram&3X?0H0hqAddN8G^ceKU$5n9O-T#B zkQAC#0%VrG{fb*qsg3oaT4I0oLF9fg1axbimyo-tlRkbx76`RJGpPeO*Mo8 z{?$zs^c#z^Zs5Yb@GkKNK%++b-l^uplvG%#yyp+@l~UKd-HsuoL~ z-yN2>@c~}FiMCK_7uY&Kp=@4j%N9a5?SG`S)W8)_?Cr5eDMxbHT(t1#WcJ9)C;B?9 zTUszzTIg%ZjT~Z>kwHJC4Oq>b2a2(rM7cTp46fl}SK4n8Xx=34w0Bms_#cI zd$JZ=xzz3dE13oAcU@_leN^Mw33nuCe*_@;7MiCYobv8*?sJl1tQ}*EdNt z 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

I9x&RR$DV@wBo_A_)v)&+kIX) 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 ATL1t6 From 6bcefc8ec512d40df5d5b2b77b38955c9081e263 Mon Sep 17 00:00:00 2001 From: Seth Date: Fri, 29 Mar 2024 17:27:54 -0400 Subject: [PATCH 06/17] chore: update data point references for powerloom aave branch --- .../aavev3-dashboard/data-points.md | 165 ++++-------------- 1 file changed, 36 insertions(+), 129 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md index fbf6215..02b7d51 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md @@ -4,7 +4,7 @@ sidebar_position: 1 # Datapoints -![AaveV3 Dashboard Powerloom](/images/aavev3-dashboard.png) +![AaveV3 Dashboard Powerloom](/images/aavev3-dashboard-powerloom.png) In AaveV3-Pooler, data points are specific, quantifiable elements derived from Aave V3 lending activities. Each snapshot inherits `Snapshot Base` which looks something like this @@ -18,54 +18,25 @@ The following type of Base Snapshots are generated for the Aave V3 Dashboard The total supplied and borrowed amounts, supply and borrow interest rates, and the indices used to compute future rate changes. The asset snapshot looks something like this: -``` -class AavePoolTotalAssetSnapshot(SnapshotBase): - totalAToken: Dict[ - str, - AaveSupplyData, - ] # block number to corresponding total supply - liquidityRate: Dict[str, int] - liquidityIndex: Dict[str, int] - totalVariableDebt: Dict[str, AaveDebtData] - totalStableDebt: Dict[str, AaveDebtData] - variableBorrowRate: Dict[str, int] - stableBorrowRate: Dict[str, int] - variableBorrowIndex: Dict[str, int] - lastUpdateTimestamp: Dict[str, int] - isolationModeTotalDebt: Dict[str, int] - assetDetails: Dict[str, AssetDetailsData] - rateDetails: Dict[str, RateDetailsData] - availableLiquidity: Dict[str, AaveSupplyData] + +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L26-L42 ``` * **1a. AaveSupplyData and AaveDebtData** The nominal token amount and the token amount in terms of USD at the time of snapshotting: - ``` - class AaveSupplyData(BaseModel): - token_supply: int = 0 - usd_supply: float = 0 - - class AaveDebtData(BaseModel): - token_debt: int = 0 - usd_debt: float = 0 + ```python reference + https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L65-L72 ``` * **1b. AssetDetailsData** Additional asset details including the maximum loan to value ratio, liquidation information, the asset's reserve factor, borrow/supply caps, and available eMode options. Please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/asset-risk/risk-parameters) for further information. - ``` - class AssetDetailsData(BaseModel): - ltv: float - liqThreshold: float - liqBonus: float - resFactor: float - borrowCap: int - supplyCap: int - eLtv: float - eliqThreshold: float - eliqBonus: float + + ```python reference + https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L25-L34 ``` * **1c. RateDetailsData** @@ -73,52 +44,34 @@ class AavePoolTotalAssetSnapshot(SnapshotBase): Additional rate details describing the interest rate strategy for the asset. Please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/liquidity-risk/borrow-interest-rate) for further information. - ``` - class RateDetailsData(BaseModel): - varRateSlope1: float - varRateSlope2: float - stableRateSlope1: float - stableRateSlope2: float - baseStableRate: float - baseVarRate: float - optimalRate: float - utilRate: float = 0 + + ```python reference + https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L37-L45 ``` **2. Volume by Action Snapshot** The asset's total volume by action for the Epoch, and the corresponding events for each action emitted by the blockchain. The volume by action snapshot looks something like this: - ``` -class AaveSupplyVolumeSnapshot(SnapshotBase): - borrow: volumeData - repay: volumeData - supply: volumeData - withdraw: volumeData - liquidation: volumeData - events: List[Dict] - liquidationList: List[liquidationData] + +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L91-L98 ``` * **2a. volumeData** The total nominal token volume and the volume in terms of USD at the time of snapshotting: - ``` - class volumeData(BaseModel): - totalUSD: float = 0.0 - totalToken: int = 0 + + ```python reference + https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L92-L94 ``` * **3a. liquidationData** Additional details describing a liquidation action: - ``` - class liquidationData(BaseModel): - collateralAsset: str - debtAsset: str - debtToCover: volumeData - liquidatedCollateral: volumeData - blockNumber: int + + ```python reference + https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L117-L122 ``` These base snapshots are used as the data source for higher order aggregates. These aggregates are then used to generate the data points present in the Aave V3 Dashboard. Refer to [data-composition](/docs/protocol/data-composition) for more details on how data points are composed. @@ -126,78 +79,32 @@ These base snapshots are used as the data source for higher order aggregates. Th Following aggregate snapshots are generated by AaveV3-Pooler using base snapshots. **1. Top Assets by Marketshare Snapshot:** All assets organized by total market share on the protocol. The top assets by marketshare snapshot looks something like this: -``` -class AaveTopAssetSnapshot(BaseModel): - name: str - symbol: str - decimals: int - address: str - totalAToken: AaveTopSupplyData - liquidityApy: float - totalVariableDebt: AaveTopDebtData - variableApy: float - isIsolated: bool - - -class AaveTopAssetsSnapshot(AggregateBase): - assets: List[AaveTopAssetSnapshot] = [] - complete: bool = True + +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L55-L69 ``` **2. 24 Hour Volume by Action Snapshot:** 24 hour volume by action for each asset per Epoch. The 24 hour volume by action snapshot looks something like this: -``` -class AaveVolumeAggregateSnapshot(AggregateBase): - totalBorrow: volumeData - totalRepay: volumeData - totalSupply: volumeData - totalWithdraw: volumeData - totalLiquidatedCollateral: volumeData - complete: bool = True + +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L101-L107 ``` **3. Top Assets by 24 Hour Volume Snapshot:** All assets organized by total 24 hour total volume by action. The top assets by volume snapshot looks something like this: -``` -class AaveTopAssetVolumeSnapshot(BaseModel): - name: str - symbol: str - address: str - totalBorrow: volumeData - totalRepay: volumeData - totalSupply: volumeData - totalWithdraw: volumeData - totalLiquidatedCollateral: volumeData - borrowChange24h: float - repayChange24h: float - supplyChange24h: float - withdrawChange24h: float - liquidationChange24h: float - - -class AaveTopAssetsVolumeSnapshot(AggregateBase): - assets: List[AaveTopAssetVolumeSnapshot] = [] - complete: bool = True + +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L110-L128 ``` **4. 6 Hour Average Rate Snapshot:** Average supply and borrow rates over the previous 6 hours per Epoch. The 6 hour rate snapshot looks something like this: -``` -class AaveAprAggregateSnapshot(AggregateBase): - avgLiquidityRate: float = 0 - avgVariableRate: float = 0 - avgStableRate: float = 0 - avgUtilizationRate: float = 0 - timestamp: int = 0 - complete: bool = True + +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L82-L88 ``` **5. 24 hours Total Market Stats Snapshot:** 24 hour stats for the entire Aave lending market. The 24 hours stats snapshot looks something like this -``` -class AaveMarketStatsSnapshot(AggregateBase): - totalMarketSize: float - totalAvailable: float - totalBorrows: float - marketChange24h: float - availableChange24h: float - borrowChange24h: float - complete: bool = True + +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L72-L79 ``` From 257c1d7e9d256732d628197d1b09a1fcde39e521 Mon Sep 17 00:00:00 2001 From: Seth-Schmidt Date: Wed, 3 Apr 2024 14:12:39 -0400 Subject: [PATCH 07/17] fix: data points numbering typo --- .../existing-implementations/aavev3-dashboard/data-points.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md index 02b7d51..7b531db 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md @@ -66,7 +66,7 @@ https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L92-L94 ``` -* **3a. liquidationData** +* **2b. liquidationData** Additional details describing a liquidation action: From 4b9c7d9b8792481c2139d543fc62e6927c82d287 Mon Sep 17 00:00:00 2001 From: Seth-Schmidt Date: Fri, 5 Apr 2024 20:13:19 -0400 Subject: [PATCH 08/17] chore: update dashboard url --- .../existing-implementations/aavev3-dashboard/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md index effdc87..6dda167 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md @@ -8,7 +8,7 @@ sidebar_position: 0 Powerloom's AaveV3 dashboard is an [extension](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) of the Pooler framework and follows a similar design to that of the [UniswapV2](/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/) dasboard use case. [Snapshotters](/docs/build-with-powerloom/snapshotter-node/introduction) participating in this data network capture key data points from Aave's on-chain Smart Contracts, which are then processed, aggregated, and displayed on the dashboard in order to provide actionable metrics to users of the Aave protocol. This implementation offers an example of the composable nature of Pooler, and the flexibility of the Powerloom data network to capture a diverse range of data points. -Dashboard is hosted at [aave.powerloom.io/](https://aave.powerloom.io/) +Dashboard is hosted at [aave-v3.powerloom.io/](https://aave-v3.powerloom.io/) ### Data Points and Aggregated Metrics From 304e3d2c41bb69d1463c4439fe849539c6dae0f0 Mon Sep 17 00:00:00 2001 From: Seth-Schmidt Date: Mon, 8 Apr 2024 22:30:35 -0400 Subject: [PATCH 09/17] add: deployment and extension instructions for aave v3 --- .../aavev3-dashboard/setup-and-extension.md | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md new file mode 100644 index 0000000..121099a --- /dev/null +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md @@ -0,0 +1,141 @@ +--- +sidebar_position: 1 +--- + +# Setup and Extension + +This section will walk you through how to setup a full node in order to participate in the Powerloom Aave V3 data market and run your own dashboard. A guide on how to extend the current Aave V3 implementation with additional data points will be located at the end. + +## Full Node Setup + +:::tip +Prerequisite: Make sure the system to be deployed on meets the minimum requirements located under the **System Requirements** section of the [Full Node - Getting Started](/docs/build-with-powerloom/snapshotter-node/full-node/getting-started.md) page. +::: + +1. **Cloning the Deploy Repo** - Clone the repository against the `aave` branch. Open the terminal and run the below command to clone the deploy repo in a directory named `powerloom_deploy`. + ```bash + git clone https://github.com/PowerLoom/deploy.git --single-branch powerloom_deploy --branch aave && cd powerloom_deploy + ``` + +2. **Configuring The Node** - Copy `env.example` to `.env`. +- Ensure the following required variables are filled: + - `SOURCE_RPC_URL`: The URL for Ethereum RPC (Local node/Infura/Alchemy) service. + - `SIGNER_ACCOUNT_ADDRESS`: The address of the signer account. This is your whitelisted address on the protocol. **Using a burner account is highly recommended** + - `SIGNER_ACCOUNT_PRIVATE_KEY`: The private key corresponding to the signer account address. + - `PROST_RPC_URL`: The URL for the PROST RPC service. + - `PROTOCOL_STATE_CONTRACT`: The contract address for the protocol state. + - `RELAYER_HOST`: The host address for the relayer. + - `NAMESPACE`: The unique key used to identify your project namespace + - `PROST_CHAIN_ID`: The chain ID for the PROST RPC service. + - Optionally, you may also set the following variables: + around which all consensus activity takes place. + - `POWERLOOM_REPORTING_URL`: The URL for reporting to PowerLoom. + - `IPFS_URL`: The URL for the IPFS (InterPlanetary File System) service in HTTP(s) (e.g. `https://ipfs.infura.io:5001`) multiaddr format (e.g. `/dns/ipfs.infura.io/tcp/5001/https`) + - `IPFS_API_KEY`: The API key for the IPFS service (if required). + - `IPFS_API_SECRET`: The API secret for the IPFS service (if required). + - `SLACK_REPORTING_URL`: The URL for reporting to Slack. + - `WEB3_STORAGE_TOKEN`: The token for Web3.Storage. You can generate or retrieve this token from your [API tokens page](https://web3.storage/tokens/?create=true) after signing up for a free plan at web3.storage. + +3. **Running The Node** +- Run the following command (ideally in a `screen`) and follow the instructions. + ```bash + ./build.sh + ``` + +4. **Displaying the Dashboard** +- Once all of the services are up and running, the front-end can be accessed via [Pooler Frontend](https://github.com/PowerLoom/pooler-frontend/tree/aave) to see an Aave V3 summary data dashboard similar to the [PowerLoom Aave V3 Dasboard](https://aave-v3.powerloom.io/). + - The front-end does not come packaged as part of the Aave deploy repository and will need to be run separately. Front-end deployment instructions can be found [here](https://github.com/PowerLoom/pooler-frontend/tree/aave?tab=readme-ov-file#powerloom-pooler-product). + - The time of the last snapshot taken shown in the `Synced by` section on the dashboard can give an idea if your snapshotting has fallen behind. + + +## Extending the Aave V3 Implementation + +:::tip +This section will make use of core concepts explained in the [Closer Look at Snapshots](/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/closer-look-at-snapshots) section. It is strongly recommended that you review this page before continuing with extending the Aave use case. +::: + +### Development Node Setup + +1. **Forking the Computes and Config templates** - For an optimized development process, it's recommended to fork the templates for [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/aave) and [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/aave). Our system utilizes the Git submodule architecture to manage these components efficiently. For a deeper understanding of how these elements integrate and function within our larger system, please refer to our [architecture documentation](/docs/build-with-powerloom/snapshotter-node/architecture.md). This approach ensures a streamlined and cohesive development workflow. + + - Aave V3 Snapshotter Configs: https://github.com/PowerLoom/snapshotter-computes/tree/aave + - Aave V3 Snapshotter Computes: https://github.com/PowerLoom/snapshotter-configs/tree/aave + + Once the above branches are forked, you should have the above two repositories in your profile. + +2. **Deploy the Development Node** - Detailed instructions for configuring the Aave V3 use case for development can be found in the [Powerloom Deploy](https://github.com/PowerLoom/deploy/tree/aave?tab=readme-ov-file#instructions-for-code-contributors) Github repository. + + - Ensure that the correct Config and Computes submodules are provided in the `SNAPSHOT_CONFIG_REPO` and `SNAPSHOTTER_COMPUTE_REPO` entries in the `.env` file. These will need to be changed if you have chosen to fork the submodule repositories as they are set to the Powerloom urls by default. Additionally, ensure the correct branch names are provided in `SNAPSHOT_CONFIG_REPO_BRANCH` and `SNAPSHOTTER_COMPUTE_REPO_BRANCH` entries if they have been changed. + +3. **Run the Node** - It is recommended to run the full node first before any extensions are made to ensure the setup has been done properly. + ```bash + ./build-dev.sh + ``` + +### Preloaders + +Most on-chain data used by the current Aave V3 use case is retrieved by using [Preloaders](docs/Protocol/Specifications/Snapshotter/preloading.md). These processors run before the base snapshots are computed to reduce redundant queries on the Aave Smart Contracts. The Aave protocol stores data for *all* assets in their Smart Contracts, so the use of preloaders is particularly useful when gathering data for this use case. Any base snapshot extension of the current implementation may find that the required on-chain data has already been gathered by a preloader. See the [Snapshot Generation](docs/Protocol/Specifications/Snapshotter/snapshot-build.md) page for more information on how base snapshots are built. + +There are two important preloaders to be aware of: + +1. **Bulk Asset Data Preloader** +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/preloaders/asset_data/preloader.py#L10-L34 +``` + +2. **Bulk Events Preloader** +```python reference +https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/preloaders/volume_events/preloader.py#L9-L33 +``` + +Both of these preloaders retrieve on-chain data and then store it locally in redis for [later use](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/core.py#L93-L121) by the base snapshot processors' `compute` functions. The data models describing the data gathered by the `BulkAssetDataPreloader` can be found [here](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L9-L45). The list of event emissions gathered by the `BulkVolumeEventsPreloader` can be found [here](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L9-L45). + +Visit the [Data Points](/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md) section for a complete list of currently available base snapshots. + +### Adding an Aggregate Snapshot + +For this example, we will add a 6-hour Volume by Action aggregate using the 24-hour volume aggregate as a reference. The data for the 24-hour volume aggregate is already retrieved by the `BulkVolumeEventsPreloader` and processed using the `AggregateSupplyVolumeProcessor` as seen in this [compute](https://github.com/PowerLoom/snapshotter-computes/blob/aave/aggregate/single_aave_volume_24h.py#L108). + +1. **Create the Aggregation Worker Processor**: + + In the `aggregate/` directory of your forked `snapshotter-computes` repository, create a python file that will contain your new processor. + - Name the file something like `single_aave_volume_6h.py` + - For now, this will be used as a placeholder and will be filled in with the processor's logic in later steps. + - Visit the Aggregate Snapshots section of the [Snapshot Generation](docs/Protocol/Specifications/Snapshotter/snapshot-build.md) page for more information on Aggregate Processors + +2. **Configure Aggregation Worker**: + + In the `aggregator.json` file of your forked `snapshotter-configs` repository, add a new entry for your aggregation worker class. This class will be responsible for handling the new data aggregation task. + - Define the `project_type` as something like `single_aave_volume_6h`. + - Set `aggregate_on` to `SingleProject` since we will be extending the current SingleProject 24 hour implementation. + - Under `processor`, specify the module and class name of your new processor created in Step 1. + + ```json + { + "config": [ + // ... existing configurations ... + { + "project_type": "single_aave_volume_6h", + "aggregate_on": "SingleProject", + "processor": { + "module": "snapshotter.modules.computes.aggregate.single_aave_volume_6h", + "class_name": "AggregateSupplyVolumeProcessor" + } + } + // ... additional configurations ... + ] + } + ``` + +3. **Modify the Processor Logic**: + + Modify the data collection logic to concentrate on a 6-hour time span (`epochId`). Refer to the existing 24-hour aggregation example for guidance on structuring your logic. The 24-hour aggregate currently collects data for all core Aave V3 "Actions" that can be taken on-chain. You may continue to collect data for all Action's events, or you may choose to focus on a single Action. Keep in mind that you will need to create a new data model in the `utils/message_models.py` file in your `snapshotter-computes` fork if you choose to change the snapshot data. See the [`AaveVolumeAggregateSnapshot`](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L101-L107) for reference. + +4. **Testing and Validation**: + + After implementation, rigorously test your new feature to ensure accuracy and efficiency. Validate that the data collected aligns with your intended 6-hour aggregation of each asset's Volume by Action. + +5. **Commit and Share Your Work**: + + Once your implementation is complete and tested, commit your changes to your implementation branch. Share your work with the community by creating a pull request to the `aave` Computes repository, if desired. + From 502763e4ef97b743d121ee6279a3e48917031389 Mon Sep 17 00:00:00 2001 From: Seth-Schmidt Date: Mon, 8 Apr 2024 22:31:23 -0400 Subject: [PATCH 10/17] fix: typo and add clarification --- .../uniswapv2-dashboard/closer-look-at-snapshots.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/closer-look-at-snapshots.md b/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/closer-look-at-snapshots.md index bb4a219..cf836b4 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/closer-look-at-snapshots.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/closer-look-at-snapshots.md @@ -12,7 +12,7 @@ Before you dive into this section, please make sure you take a look into the [Sn Snapshotter node has several interfaces defined to handle the heavy lifting so that you can focus on just writing computes modules. For example, `TradeVolumeProcessor`, located in the **Snapshotter-computes** [`snapshotter-computer/trade_volume.py`](https://github.com/Powerloom/snapshotter-computes/blob/eth_uniswapv2/trade_volume.py), is one of the base Processor computes for Pooler. This class uses the `GenericProcessorSnapshot` structure found in [`snapshotter/utils/callback_helpers.py`](https://github.com/Powerloom/pooler/blob/main/snapshotter/utils/callback_helpers.py). -Any compute for base snapshots basically needs to implement the `compute` function. +Any processor for base snapshots needs to implement the `compute` function. ```python reference https://github.com/Powerloom/snapshotter-computes/blob/74b2eaa452bfac8c0e4e0a7ed74a4d2748e9c224/trade_volume.py#L23-L28 @@ -72,10 +72,10 @@ https://github.com/Powerloom/snapshotter-configs/blob/ae77941311155a9126205af087 `AggregateTradeVolumeProcessor`, located in the **Snapshotter-computes** [`snapshotter-computer/aggregate/single_uniswap_trade_volume_24h.py`](https://github.com/Powerloom/snapshotter-computes/blob/eth_uniswapv2/aggregate/single_uniswap_trade_volume_24h.py) is one of the aggregate computes for Pooler. This class uses the `GenericProcessorAggregate` structure found in [`snapshotter/utils/callback_helpers.py`](https://github.com/Powerloom/pooler/blob/main/snapshotter/utils/callback_helpers.py). -Any compute for base snapshots basically needs to implement the `compute` function. +Any processor for aggregate snapshots needs to implement the `compute` function. ```python reference -https://github.com/PowerLoom/snapshotter-computes/blob/74b2eaa452bfac8c0e4e0a7ed74a4d2748e9c224/aggregate/single_uniswap_trade_volume_24h.py#L58-L66 +https://github.com/PowerLoom/snapshotter-computes/blob/74b2eaa452bfac8c0e4e0a7ed74a4d2748e9c224/aggregate/single_uniswap_trade_volume_24h.py#L110-L118 ``` The `compute` function is the main part where we create and process snapshots. It uses these inputs: @@ -87,7 +87,7 @@ The `compute` function is the main part where we create and process snapshots. I - `protocol_state_contract`: Protocol state contract Web3 object. - `project_id`: Project ID for which the aggregate snapshot is being generated. -`msg_object` is either of type `PowerloomSnapshotSubmittedMessage` or `PowerloomCalculateAggregateMessage` for even more complex aggregats. +`msg_object` is either of type `PowerloomSnapshotSubmittedMessage` or `PowerloomCalculateAggregateMessage` for even more complex aggregates. PowerloomSnapshotSubmittedMessage contains the following information: ```python reference From 61faa1e3336bc296d8cd411adce2545974690d7b Mon Sep 17 00:00:00 2001 From: havealakshya <165628020+havealakshya@users.noreply.github.com> Date: Wed, 10 Apr 2024 11:28:54 +0530 Subject: [PATCH 11/17] Updated content on index.md Simplified, re-written sentences, fixed grammar --- .../existing-implementations/aavev3-dashboard/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md index 6dda167..902f432 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md @@ -6,13 +6,13 @@ sidebar_position: 0 ## Pooler - AaveV3 Data Market -Powerloom's AaveV3 dashboard is an [extension](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) of the Pooler framework and follows a similar design to that of the [UniswapV2](/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/) dasboard use case. [Snapshotters](/docs/build-with-powerloom/snapshotter-node/introduction) participating in this data network capture key data points from Aave's on-chain Smart Contracts, which are then processed, aggregated, and displayed on the dashboard in order to provide actionable metrics to users of the Aave protocol. This implementation offers an example of the composable nature of Pooler, and the flexibility of the Powerloom data network to capture a diverse range of data points. +Powerloom's AaveV3 dashboard is an [extension](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) of the Pooler framework. Its design is similar to the [UniswapV2](/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/) dashboard use case. The data network is powered by [Snapshotters](/docs/build-with-powerloom/snapshotter-node/introduction) who capture critical data points from Aave's on-chain Smart Contracts. This data is then processed, aggregated, and displayed on the dashboard to provide users of the Aave protocol with actionable metrics. This implementation is a testament to the composable nature of Pooler and the Powerloom data network's flexibility in capturing a diverse range of data points. -Dashboard is hosted at [aave-v3.powerloom.io/](https://aave-v3.powerloom.io/) +The Dashboard is hosted at [aave-v3.powerloom.io/](https://aave-v3.powerloom.io/) ### Data Points and Aggregated Metrics -Data points serve as the foundational units that base snapshots are built upon. This use case captures fundamental loan metrics for each asset offered by the Aave protocol, including (but not limited to) total amounts supplied and borrowed by users, interest rates for lending and borrowing, and asset prices at the time of lending. These base data points are snapshotted and then aggregated by AaveV3-Pooler to provide broader loan market statistics, such as 24 hour lending/borrowing volumes and historical apr rates. Due to their inherent complexity, participants may find lending markets challenging to navigate. Access to actionable metrics is important for users seeking to deploy their capital efficiently and at the appropriate risk levels. +Data points are essential elements that serve as the foundational units upon which base snapshots are built. In the Aave protocol, they capture key information about loans, such as the total supplied and borrowed amounts, interest rates, and asset prices at the time of the lending. These base data points are snapshotted and then aggregated by AaveV3-Pooler to provide broader loan market statistics & insights, such as 24-hour lending/borrowing volumes and historical apr rates. Due to their inherent complexity, participants may find lending markets challenging to navigate. Access to actionable metrics is important for users seeking to deploy their capital efficiently and at the appropriate risk levels. --- @@ -20,5 +20,5 @@ Data points serve as the foundational units that base snapshots are built upon. Snapshotter Node's design enables extensions and custom use case implementations. A developer can extend the pooler compute files found in [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/eth_uniswapv2) and config files found in [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/eth_uniswapv2) to build their own custom use case implementations. -We have a dedicated section in the documentation which walkthrough the details on further implementation and usecases extensions. +The documentation has a dedicated section that discusses further implementation and use-case extensions. Check out our guide on [Extending Pooler](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) --> From a97b2584447c80b0627f17034591066116067538 Mon Sep 17 00:00:00 2001 From: havealakshya <165628020+havealakshya@users.noreply.github.com> Date: Wed, 10 Apr 2024 12:21:37 +0530 Subject: [PATCH 12/17] Updated content changes on setup-and-extension.md - fixed sentences - improved written content - simplified sentences --- .../aavev3-dashboard/setup-and-extension.md | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md index 121099a..99e0162 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md @@ -4,12 +4,12 @@ sidebar_position: 1 # Setup and Extension -This section will walk you through how to setup a full node in order to participate in the Powerloom Aave V3 data market and run your own dashboard. A guide on how to extend the current Aave V3 implementation with additional data points will be located at the end. +This section will help you set up a full node to participate in the Powerloom Aave V3 data market and run your personal dashboard. At the end of this guide, you will find instructions on extending the current Aave V3 implementation with additional data points. ## Full Node Setup :::tip -Prerequisite: Make sure the system to be deployed on meets the minimum requirements located under the **System Requirements** section of the [Full Node - Getting Started](/docs/build-with-powerloom/snapshotter-node/full-node/getting-started.md) page. +Prerequisite: Ensure that the minimum requirements are met by the system on which it is to be deployed, which is located under the **System Requirements** section of the [Full Node - Getting Started](/docs/build-with-powerloom/snapshotter-node/full-node/getting-started.md) page. ::: 1. **Cloning the Deploy Repo** - Clone the repository against the `aave` branch. Open the terminal and run the below command to clone the deploy repo in a directory named `powerloom_deploy`. @@ -19,7 +19,7 @@ Prerequisite: Make sure the system to be deployed on meets the minimum requireme 2. **Configuring The Node** - Copy `env.example` to `.env`. - Ensure the following required variables are filled: - - `SOURCE_RPC_URL`: The URL for Ethereum RPC (Local node/Infura/Alchemy) service. + - `SOURCE_RPC_URL`: The URL for the Ethereum RPC (Local node/Infura/Alchemy) service. - `SIGNER_ACCOUNT_ADDRESS`: The address of the signer account. This is your whitelisted address on the protocol. **Using a burner account is highly recommended** - `SIGNER_ACCOUNT_PRIVATE_KEY`: The private key corresponding to the signer account address. - `PROST_RPC_URL`: The URL for the PROST RPC service. @@ -44,37 +44,36 @@ Prerequisite: Make sure the system to be deployed on meets the minimum requireme 4. **Displaying the Dashboard** - Once all of the services are up and running, the front-end can be accessed via [Pooler Frontend](https://github.com/PowerLoom/pooler-frontend/tree/aave) to see an Aave V3 summary data dashboard similar to the [PowerLoom Aave V3 Dasboard](https://aave-v3.powerloom.io/). - - The front-end does not come packaged as part of the Aave deploy repository and will need to be run separately. Front-end deployment instructions can be found [here](https://github.com/PowerLoom/pooler-frontend/tree/aave?tab=readme-ov-file#powerloom-pooler-product). - - The time of the last snapshot taken shown in the `Synced by` section on the dashboard can give an idea if your snapshotting has fallen behind. - + - The front-end does not come packaged as part of the Aave deploy repository and will need to be run separately. The Front-end deployment instructions can be found [here](https://github.com/PowerLoom/pooler-frontend/tree/aave?tab=readme-ov-file#powerloom-pooler-product). + - The dashboard's `Synced by` section displays the time of the last snapshot taken, indicating if your snapshotting is falling behind. ## Extending the Aave V3 Implementation :::tip -This section will make use of core concepts explained in the [Closer Look at Snapshots](/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/closer-look-at-snapshots) section. It is strongly recommended that you review this page before continuing with extending the Aave use case. +This section will utilize core concepts explained in the [Closer Look at Snapshots](/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/closer-look-at-snapshots) section. It is strongly recommended that you review this page before extending the Aave use case. ::: ### Development Node Setup -1. **Forking the Computes and Config templates** - For an optimized development process, it's recommended to fork the templates for [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/aave) and [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/aave). Our system utilizes the Git submodule architecture to manage these components efficiently. For a deeper understanding of how these elements integrate and function within our larger system, please refer to our [architecture documentation](/docs/build-with-powerloom/snapshotter-node/architecture.md). This approach ensures a streamlined and cohesive development workflow. +1. **Forking the Computes and Config templates** - For an optimized development process, it's recommended to fork the templates [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/aave) and [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/aave). Our system utilizes the Git submodule architecture to manage these components efficiently. For a deeper understanding of how these elements integrate and function within our larger system, please refer to our [architecture documentation](/docs/build-with-powerloom/snapshotter-node/architecture.md). This approach ensures a streamlined and cohesive development workflow. - Aave V3 Snapshotter Configs: https://github.com/PowerLoom/snapshotter-computes/tree/aave - Aave V3 Snapshotter Computes: https://github.com/PowerLoom/snapshotter-configs/tree/aave - Once the above branches are forked, you should have the above two repositories in your profile. + Once the above branches are forked, you should have the two repositories in your profile. -2. **Deploy the Development Node** - Detailed instructions for configuring the Aave V3 use case for development can be found in the [Powerloom Deploy](https://github.com/PowerLoom/deploy/tree/aave?tab=readme-ov-file#instructions-for-code-contributors) Github repository. +2. **Deploy the Development Node** - Detailed instructions for configuring the Aave V3 use case for development can be found in the [Powerloom Deploy](https://github.com/PowerLoom/deploy/tree/aave?tab=readme-ov-file#instructions-for-code-contributors) GitHub repository. - - Ensure that the correct Config and Computes submodules are provided in the `SNAPSHOT_CONFIG_REPO` and `SNAPSHOTTER_COMPUTE_REPO` entries in the `.env` file. These will need to be changed if you have chosen to fork the submodule repositories as they are set to the Powerloom urls by default. Additionally, ensure the correct branch names are provided in `SNAPSHOT_CONFIG_REPO_BRANCH` and `SNAPSHOTTER_COMPUTE_REPO_BRANCH` entries if they have been changed. + - Ensure that the correct Config and Computes submodules are provided in the `SNAPSHOT_CONFIG_REPO` and `SNAPSHOTTER_COMPUTE_REPO` entries in the `.env` file. These must be changed if you have chosen to fork the submodule repositories as they are set to the Powerloom URLs by default. Additionally, ensure the correct branch names are provided in `SNAPSHOT_CONFIG_REPO_BRANCH` and `SNAPSHOTTER_COMPUTE_REPO_BRANCH` entries if they have been changed. -3. **Run the Node** - It is recommended to run the full node first before any extensions are made to ensure the setup has been done properly. +3. **Run the Node** - It is recommended to run the full node before any extensions are made to ensure the setup is done properly. ```bash ./build-dev.sh ``` - + ### Preloaders -Most on-chain data used by the current Aave V3 use case is retrieved by using [Preloaders](docs/Protocol/Specifications/Snapshotter/preloading.md). These processors run before the base snapshots are computed to reduce redundant queries on the Aave Smart Contracts. The Aave protocol stores data for *all* assets in their Smart Contracts, so the use of preloaders is particularly useful when gathering data for this use case. Any base snapshot extension of the current implementation may find that the required on-chain data has already been gathered by a preloader. See the [Snapshot Generation](docs/Protocol/Specifications/Snapshotter/snapshot-build.md) page for more information on how base snapshots are built. +Most on-chain data used by the current Aave V3 use case is retrieved using [Preloaders](docs/Protocol/Specifications/Snapshotter/preloading.md). These processors run before the base snapshots and are computed to reduce redundant queries on the Aave Smart Contracts. The Aave protocol stores data for *all* assets in their Smart Contracts, so preloaders are particularly useful when gathering data for this use case. Any base snapshot extension of the current implementation may find that the required on-chain data has already been gathered by a preloader. See the [Snapshot Generation](docs/Protocol/Specifications/Snapshotter/snapshot-build.md) page for more information on "how base snapshots are built". There are two important preloaders to be aware of: @@ -88,17 +87,17 @@ https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/preloaders/ass https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/preloaders/volume_events/preloader.py#L9-L33 ``` -Both of these preloaders retrieve on-chain data and then store it locally in redis for [later use](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/core.py#L93-L121) by the base snapshot processors' `compute` functions. The data models describing the data gathered by the `BulkAssetDataPreloader` can be found [here](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L9-L45). The list of event emissions gathered by the `BulkVolumeEventsPreloader` can be found [here](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L9-L45). +Both of these preloaders retrieve on-chain data and then store it locally in Redis for [later use](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/core.py#L93-L121) by the base snapshot processors' `compute` functions. The data models describing the data gathered by the `BulkAssetDataPreloader` can be found [here](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L9-L45). The list of event emissions gathered by the `BulkVolumeEventsPreloader` can be found [here](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L9-L45). Visit the [Data Points](/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md) section for a complete list of currently available base snapshots. ### Adding an Aggregate Snapshot -For this example, we will add a 6-hour Volume by Action aggregate using the 24-hour volume aggregate as a reference. The data for the 24-hour volume aggregate is already retrieved by the `BulkVolumeEventsPreloader` and processed using the `AggregateSupplyVolumeProcessor` as seen in this [compute](https://github.com/PowerLoom/snapshotter-computes/blob/aave/aggregate/single_aave_volume_24h.py#L108). +For this example, we will add a 6-hour "Volume by Action" aggregate using the 24-hour volume aggregate as a reference. The data for the 24-hour volume aggregate is already retrieved by the `BulkVolumeEventsPreloader` and processed using the `AggregateSupplyVolumeProcessor` as seen in this [compute](https://github.com/PowerLoom/snapshotter-computes/blob/aave/aggregate/single_aave_volume_24h.py#L108). 1. **Create the Aggregation Worker Processor**: - In the `aggregate/` directory of your forked `snapshotter-computes` repository, create a python file that will contain your new processor. + In the `aggregate/` directory of your forked `snapshotter-computes` repository, create a Python file that will contain your new processor. - Name the file something like `single_aave_volume_6h.py` - For now, this will be used as a placeholder and will be filled in with the processor's logic in later steps. - Visit the Aggregate Snapshots section of the [Snapshot Generation](docs/Protocol/Specifications/Snapshotter/snapshot-build.md) page for more information on Aggregate Processors @@ -107,7 +106,7 @@ For this example, we will add a 6-hour Volume by Action aggregate using the 24-h In the `aggregator.json` file of your forked `snapshotter-configs` repository, add a new entry for your aggregation worker class. This class will be responsible for handling the new data aggregation task. - Define the `project_type` as something like `single_aave_volume_6h`. - - Set `aggregate_on` to `SingleProject` since we will be extending the current SingleProject 24 hour implementation. + - Set `aggregate_on` to `SingleProject` since we will be extending the current SingleProject 24-hour implementation. - Under `processor`, specify the module and class name of your new processor created in Step 1. ```json From dd227049aee750394b0b519a8eae717fb29adf79 Mon Sep 17 00:00:00 2001 From: havealakshya <165628020+havealakshya@users.noreply.github.com> Date: Wed, 10 Apr 2024 15:28:15 +0530 Subject: [PATCH 13/17] Updated & fixed docs for data-points.md - fixed sentences - improved writing --- .../aavev3-dashboard/data-points.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md index 7b531db..27cdcd6 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md @@ -6,17 +6,17 @@ sidebar_position: 1 ![AaveV3 Dashboard Powerloom](/images/aavev3-dashboard-powerloom.png) -In AaveV3-Pooler, data points are specific, quantifiable elements derived from Aave V3 lending activities. +In Aave V3-Pooler, data points are specific, quantifiable elements derived from Aave V3 lending activities. Each snapshot inherits `Snapshot Base` which looks something like this ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L9-L17 ``` -The following type of Base Snapshots are generated for the Aave V3 Dashboard +The following type of Base Snapshots are generated for the Aave V3 dashboard: **1. Asset Metrics Snapshot:** -The total supplied and borrowed amounts, supply and borrow interest rates, and the indices used to compute future rate changes. +The Asset Metrics refer to the total supplied and borrowed amounts, supply and borrow interest rates, and the indices used to compute future rate changes. The asset snapshot looks something like this: ```python reference @@ -31,9 +31,9 @@ https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message ``` * **1b. AssetDetailsData** - Additional asset details including the maximum loan to value ratio, liquidation information, the asset's reserve factor, borrow/supply caps, and available eMode options. + Additional asset details include the maximum loan-to-value ratio, liquidation information, the asset's reserve factor, borrow/supply caps, and available eMode options. - Please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/asset-risk/risk-parameters) for further information. + For further information, please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/asset-risk/risk-parameters). ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L25-L34 @@ -43,7 +43,7 @@ https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message Additional rate details describing the interest rate strategy for the asset. - Please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/liquidity-risk/borrow-interest-rate) for further information. + For further information, please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/liquidity-risk/borrow-interest-rate). ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L37-L45 @@ -52,7 +52,7 @@ https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message **2. Volume by Action Snapshot** The asset's total volume by action for the Epoch, and the corresponding events for each action emitted by the blockchain. -The volume by action snapshot looks something like this: +The volume-by-action snapshot looks something like this: ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L91-L98 @@ -74,35 +74,35 @@ https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L117-L122 ``` -These base snapshots are used as the data source for higher order aggregates. These aggregates are then used to generate the data points present in the Aave V3 Dashboard. Refer to [data-composition](/docs/protocol/data-composition) for more details on how data points are composed. +These base snapshots are used as the data source for higher-order aggregates. These aggregates are then used to generate the data points present in the Aave V3 Dashboard. Refer to [data-composition](/docs/protocol/data-composition) for more details on how data points are composed. -Following aggregate snapshots are generated by AaveV3-Pooler using base snapshots. +The following aggregate snapshots are generated by AaveV3-Pooler using base snapshots. -**1. Top Assets by Marketshare Snapshot:** All assets organized by total market share on the protocol. The top assets by marketshare snapshot looks something like this: +**1. Top Assets by Marketshare Snapshot:** All assets are organized by the total market share on the protocol. The top assets by marketshare snapshot look something like this: ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L55-L69 ``` -**2. 24 Hour Volume by Action Snapshot:** 24 hour volume by action for each asset per Epoch. The 24 hour volume by action snapshot looks something like this: +**2. 24 Hour Volume by Action Snapshot:** 24-hour volume by action for each asset per Epoch. The 24-hour volume by action snapshot looks something like this: ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L101-L107 ``` -**3. Top Assets by 24 Hour Volume Snapshot:** All assets organized by total 24 hour total volume by action. The top assets by volume snapshot looks something like this: +**3. Top Assets by 24 Hour Volume Snapshot:** All assets are organized by total, 24-hour total volume by action. The top assets by volume snapshot looks something like this: ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L110-L128 ``` -**4. 6 Hour Average Rate Snapshot:** Average supply and borrow rates over the previous 6 hours per Epoch. The 6 hour rate snapshot looks something like this: +**4. 6 Hour Average Rate Snapshot:** Average supply and borrow rates over the previous 6 hours per Epoch. The 6-hour rate snapshot looks something like this: ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L82-L88 ``` -**5. 24 hours Total Market Stats Snapshot:** 24 hour stats for the entire Aave lending market. The 24 hours stats snapshot looks something like this +**5. 24 hours Total Market Stats Snapshot:** 24-hour stats for the entire Aave lending market. The 24-hour stats snapshot looks something like this ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L72-L79 From 02bfbd077e2163843abcc0d88680a6ecec66b7c5 Mon Sep 17 00:00:00 2001 From: havealakshya <165628020+havealakshya@users.noreply.github.com> Date: Wed, 10 Apr 2024 15:31:30 +0530 Subject: [PATCH 14/17] fixed sentence errors setup-and-extension.md --- .../aavev3-dashboard/setup-and-extension.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md index 99e0162..4f0f9f2 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md @@ -93,20 +93,20 @@ Visit the [Data Points](/docs/build-with-powerloom/use-cases/existing-implementa ### Adding an Aggregate Snapshot -For this example, we will add a 6-hour "Volume by Action" aggregate using the 24-hour volume aggregate as a reference. The data for the 24-hour volume aggregate is already retrieved by the `BulkVolumeEventsPreloader` and processed using the `AggregateSupplyVolumeProcessor` as seen in this [compute](https://github.com/PowerLoom/snapshotter-computes/blob/aave/aggregate/single_aave_volume_24h.py#L108). +For this example, we will add a 6-hour volume by action aggregate using the 24-hour volume aggregate as a reference. The data for the 24-hour volume aggregate is already retrieved by the `BulkVolumeEventsPreloader` and processed using the `AggregateSupplyVolumeProcessor` as seen in this [compute](https://github.com/PowerLoom/snapshotter-computes/blob/aave/aggregate/single_aave_volume_24h.py#L108). 1. **Create the Aggregation Worker Processor**: - In the `aggregate/` directory of your forked `snapshotter-computes` repository, create a Python file that will contain your new processor. + In the `aggregate/` directory of your forked `snapshotter-computes` repository, create a Python file containing your new processor. - Name the file something like `single_aave_volume_6h.py` - - For now, this will be used as a placeholder and will be filled in with the processor's logic in later steps. + - For now, this will be used as a placeholder and filled in with the processor's logic in later steps. - Visit the Aggregate Snapshots section of the [Snapshot Generation](docs/Protocol/Specifications/Snapshotter/snapshot-build.md) page for more information on Aggregate Processors 2. **Configure Aggregation Worker**: In the `aggregator.json` file of your forked `snapshotter-configs` repository, add a new entry for your aggregation worker class. This class will be responsible for handling the new data aggregation task. - Define the `project_type` as something like `single_aave_volume_6h`. - - Set `aggregate_on` to `SingleProject` since we will be extending the current SingleProject 24-hour implementation. + - Set `aggregate_on` to `SingleProject` since we will extend the current SingleProject 24-hour implementation. - Under `processor`, specify the module and class name of your new processor created in Step 1. ```json From 81be3c2a8624cbb6b9ce6bb08cb4070160f7081f Mon Sep 17 00:00:00 2001 From: Seth-Schmidt Date: Thu, 11 Apr 2024 11:31:53 -0400 Subject: [PATCH 15/17] chore: change link to extension guide --- .../existing-implementations/aavev3-dashboard/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md index 902f432..d41f94d 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md @@ -12,7 +12,7 @@ The Dashboard is hosted at [aave-v3.powerloom.io/](https://aave-v3.powerloom.io/ ### Data Points and Aggregated Metrics -Data points are essential elements that serve as the foundational units upon which base snapshots are built. In the Aave protocol, they capture key information about loans, such as the total supplied and borrowed amounts, interest rates, and asset prices at the time of the lending. These base data points are snapshotted and then aggregated by AaveV3-Pooler to provide broader loan market statistics & insights, such as 24-hour lending/borrowing volumes and historical apr rates. Due to their inherent complexity, participants may find lending markets challenging to navigate. Access to actionable metrics is important for users seeking to deploy their capital efficiently and at the appropriate risk levels. +Data points are essential elements that serve as the foundational units upon which base snapshots are built. In the Aave protocol, they capture key information about loans, such as the total supplied and borrowed amounts, interest rates, and asset prices at the time of the lending. These base data points are snapshotted and then aggregated by AaveV3-Pooler to provide broader loan market statistics & insights, such as 24-hour lending/borrowing volumes and historical APR rates. Due to their inherent complexity, participants may find lending markets challenging to navigate. Access to actionable metrics is important for users seeking to deploy their capital efficiently and at the appropriate risk levels. --- @@ -21,4 +21,4 @@ Data points are essential elements that serve as the foundational units upon whi Snapshotter Node's design enables extensions and custom use case implementations. A developer can extend the pooler compute files found in [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/eth_uniswapv2) and config files found in [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/eth_uniswapv2) to build their own custom use case implementations. The documentation has a dedicated section that discusses further implementation and use-case extensions. -Check out our guide on [Extending Pooler](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) --> +Check out our guide on [Setup and Extension](/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md) --> From a86c93ced4b0aad36cca0ff1ecf178e30ddc73dc Mon Sep 17 00:00:00 2001 From: Seth-Schmidt Date: Thu, 11 Apr 2024 11:37:52 -0400 Subject: [PATCH 16/17] fix: naming consistency for volume snapshots --- .../aavev3-dashboard/data-points.md | 8 ++++---- .../aavev3-dashboard/setup-and-extension.md | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md index 27cdcd6..e440b39 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md @@ -49,9 +49,9 @@ https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/data_models.py#L37-L45 ``` -**2. Volume by Action Snapshot** +**2. Volume-by-Action Snapshot** -The asset's total volume by action for the Epoch, and the corresponding events for each action emitted by the blockchain. +The asset's total volume-by-action for the Epoch, and the corresponding events for each action emitted by the blockchain. The volume-by-action snapshot looks something like this: ```python reference @@ -84,13 +84,13 @@ The following aggregate snapshots are generated by AaveV3-Pooler using base snap https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L55-L69 ``` -**2. 24 Hour Volume by Action Snapshot:** 24-hour volume by action for each asset per Epoch. The 24-hour volume by action snapshot looks something like this: +**2. 24 Hour Volume-by-Action Snapshot:** 24-hour volume-by-action for each asset per Epoch. The 24-hour volume-by-action snapshot looks something like this: ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L101-L107 ``` -**3. Top Assets by 24 Hour Volume Snapshot:** All assets are organized by total, 24-hour total volume by action. The top assets by volume snapshot looks something like this: +**3. Top Assets by 24 Hour Volume Snapshot:** All assets are organized by total, 24-hour total volume-by-action. The top assets by volume snapshot looks something like this: ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L110-L128 diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md index 4f0f9f2..8626527 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md @@ -93,7 +93,7 @@ Visit the [Data Points](/docs/build-with-powerloom/use-cases/existing-implementa ### Adding an Aggregate Snapshot -For this example, we will add a 6-hour volume by action aggregate using the 24-hour volume aggregate as a reference. The data for the 24-hour volume aggregate is already retrieved by the `BulkVolumeEventsPreloader` and processed using the `AggregateSupplyVolumeProcessor` as seen in this [compute](https://github.com/PowerLoom/snapshotter-computes/blob/aave/aggregate/single_aave_volume_24h.py#L108). +For this example, we will add a 6-hour volume-by-action aggregate using the 24-hour volume aggregate as a reference. The data for the 24-hour volume aggregate is already retrieved by the `BulkVolumeEventsPreloader` and processed using the `AggregateSupplyVolumeProcessor` as seen in this [compute](https://github.com/PowerLoom/snapshotter-computes/blob/aave/aggregate/single_aave_volume_24h.py#L108). 1. **Create the Aggregation Worker Processor**: @@ -128,11 +128,11 @@ For this example, we will add a 6-hour volume by action aggregate using the 24-h 3. **Modify the Processor Logic**: - Modify the data collection logic to concentrate on a 6-hour time span (`epochId`). Refer to the existing 24-hour aggregation example for guidance on structuring your logic. The 24-hour aggregate currently collects data for all core Aave V3 "Actions" that can be taken on-chain. You may continue to collect data for all Action's events, or you may choose to focus on a single Action. Keep in mind that you will need to create a new data model in the `utils/message_models.py` file in your `snapshotter-computes` fork if you choose to change the snapshot data. See the [`AaveVolumeAggregateSnapshot`](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L101-L107) for reference. + Modify the data collection logic to concentrate on a 6-hour time span (`epochId`). Refer to the existing 24-hour aggregation example for guidance on structuring your logic. The 24-hour aggregate currently collects data for all core Aave V3 "actions" that can be taken on-chain. You may continue to collect data for all action's events, or you may choose to focus on a single action. Keep in mind that you will need to create a new data model in the `utils/message_models.py` file in your `snapshotter-computes` fork if you choose to change the snapshot data. See the [`AaveVolumeAggregateSnapshot`](https://github.com/PowerLoom/snapshotter-computes/blob/aave/utils/models/message_models.py#L101-L107) for reference. 4. **Testing and Validation**: - After implementation, rigorously test your new feature to ensure accuracy and efficiency. Validate that the data collected aligns with your intended 6-hour aggregation of each asset's Volume by Action. + After implementation, rigorously test your new feature to ensure accuracy and efficiency. Validate that the data collected aligns with your intended 6-hour aggregation of each asset's volume-by-action. 5. **Commit and Share Your Work**: From 0296e54e3f523b45155010aafc2b4c0a4ca2d4b5 Mon Sep 17 00:00:00 2001 From: anomit ghosh Date: Mon, 22 Apr 2024 17:25:23 +0530 Subject: [PATCH 17/17] chore: minor edits for clarity and fixing links --- .../building-new-usecase/extending-uniswapv2-dashboard.md | 4 ++-- .../existing-implementations/aavev3-dashboard/index.md | 4 ++-- .../existing-implementations/uniswapv2-dashboard/index.md | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard.md b/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard.md index c53f9ee..f8e2a4c 100644 --- a/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard.md +++ b/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard.md @@ -1,9 +1,9 @@ --- sidebar_position: 0 --- -# Extending Pooler +# Extending Uniswap V2 dashboard usecase -This documentation provides a step-by-step guide for developers looking to extend the functionality of the UniswapV2 Dashboard, specifically focusing on implementing new data points. The goal is to empower developers to enhance the dashboard with custom features, making it a valuable tool in hackathons and blockchain analytics. +This documentation provides a step-by-step guide for developers looking to extend the functionality of the UniswapV2 Dashboard use case, specifically focusing on implementing new data points. The goal is to empower developers to enhance the dashboard with custom features, making it a valuable tool in hackathons and blockchain analytics. ## Extending with New Data Points diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md index d41f94d..dc713d8 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/index.md @@ -18,7 +18,7 @@ Data points are essential elements that serve as the foundational units upon whi ### Development and Extension -Snapshotter Node's design enables extensions and custom use case implementations. A developer can extend the pooler compute files found in [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/eth_uniswapv2) and config files found in [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/eth_uniswapv2) to build their own custom use case implementations. +The Pooler framework builds upon the modular architecture of a Snapshotter Node and enables extensions and custom use case implementations. A developer can extend the pooler compute files found in [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/aave) and config files found in [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/aave) to build their own custom use case implementations. The documentation has a dedicated section that discusses further implementation and use-case extensions. -Check out our guide on [Setup and Extension](/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md) --> +Check out our guide on [Setup and Extension](/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/setup-and-extension.md). diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/index.md b/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/index.md index fa4a73c..277d648 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/index.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/index.md @@ -6,14 +6,14 @@ sidebar_position: 0 ## Pooler - UniswapV2 Data Market -Pooler is a Uniswap-specific implementation within the Powerloom ecosystem, designed as a snapshotter. It functions by synchronizing with other snapshotter peers over a smart contract on the Powerloom Protocol testnet. This architecture, guided by state transitions, is both easily comprehensible and modifiable. +Pooler is a framework built around the core snapshotter modules that power different varieties of Snapshotter nodes that participate in Powerloom Protocol. This document details out a Uniswap-specific implementation of this framework, designed as a snapshotter. It functions by synchronizing with other snapshotter peers over a smart contract on the Powerloom Protocol testnet. This architecture, guided by state transitions, is both easily comprehensible and modifiable. :::tip **Pooler in a Nutshell:** Forex, the foreign exchange market, involves currency trading and is known for its high liquidity and 24/7 operation. Pooler, in a parallel sense, operates continuously, capturing snapshots of Uniswap trades. Like Forex traders who analyze currency fluctuations to make profits, Pooler users can analyze trade volumes, liquidity reserves, and other metrics to understand market trends and potential profits in the Uniswap market. -In essence, Pooler is to Uniswap what Forex platforms are to currency trading – a tool for real-time tracking and analysis, facilitating better understanding and potentially profitable decision-making in the dynamic world of cryptocurrency trading. +In essence, Pooler is to Uniswap and other DeFi product what Forex platforms are to currency trading – a tool for real-time tracking and analysis, facilitating better understanding and potentially profitable decision-making in the dynamic world of cryptocurrency trading. ::: @@ -42,4 +42,4 @@ Data points are key metrics sourced from Uniswap V2 pair contracts, detailing ho Snapshotter Node's design enables extensions and custom use case implementations. A developer can extend the pooler compute files found in [snapshotter-computes](https://github.com/PowerLoom/snapshotter-computes/tree/eth_uniswapv2) and config files found in [snapshotter-configs](https://github.com/PowerLoom/snapshotter-configs/tree/eth_uniswapv2) to build their own custom use case implementations. We have a dedicated section in the documentation which walkthrough the details on further implementation and usecases extensions. -Check out our guide on [Extending Pooler](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard) +Check out our guide on [Extending Uniswap V2 dashboard usecase.](/docs/build-with-powerloom/use-cases/building-new-usecase/extending-uniswapv2-dashboard)

I9x&RR$DV@wBo_A_)v)&+kIX) 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 ATL1t6 literal 0 HcmV?d00001 From ebf2d44851beb3963411a1d4a4661d98518438f2 Mon Sep 17 00:00:00 2001 From: Seth Date: Thu, 14 Mar 2024 21:27:42 -0400 Subject: [PATCH 02/17] fix: missing comma --- .../snapshotter-node/full-node/health-tracking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-with-powerloom/snapshotter-node/full-node/health-tracking.md b/docs/build-with-powerloom/snapshotter-node/full-node/health-tracking.md index 6e238db..b735a69 100644 --- a/docs/build-with-powerloom/snapshotter-node/full-node/health-tracking.md +++ b/docs/build-with-powerloom/snapshotter-node/full-node/health-tracking.md @@ -127,7 +127,7 @@ curl -X 'GET' \ { "epochId": 12, "submittedSnapshotCid": "snapshotcid", - "submittedSnapshot": {} + "submittedSnapshot": {}, "finalizedSnapshotCid": "finalizedsnapshotcid", "finalizedSnapshot": {}, "reason": "reason for incorrect submission" From f481ce2a50e1438f63909e9a979410e5e14444d0 Mon Sep 17 00:00:00 2001 From: Seth Date: Thu, 14 Mar 2024 21:35:07 -0400 Subject: [PATCH 03/17] fix: minor grammar fixes in uniswap data points --- .../uniswapv2-dashboard/data-points.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/data-points.md index 0c035b7..98cd7c0 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/data-points.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/uniswapv2-dashboard/data-points.md @@ -26,20 +26,20 @@ https://github.com/PowerLoom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc8 These base snapshots are then used to generate higher order aggregates. These aggregates are then used to generate the data points that are used in the Uniswap V2 Dashboard. Refer to [data-composition](/docs/protocol/data-composition) for more details on how data points are composed. -Following aggregate snapshots are generated by Pooler using base snapshots. +The following aggregate snapshots are generated by Pooler using base snapshots. **1. 24 Hour Trade Volume Snapshot:** 24 hour trade volume of each pair per Epoch. The 24 hour trade volume snapshot looks something like this ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L57-L64 ``` -**2. 7 days Trade Volume Snapshot:** 7 days trade volume of each pair per Epoch. The 7 days trade volume snapshot exactly like 24 hour trade volume snapshot but with a different time window. +**2. 7 days Trade Volume Snapshot:** 7 days trade volume of each pair per Epoch. The 7 days trade volume snapshot is exactly like 24 hour trade volume snapshot but with a different time window. **3. 24 hours Top Pairs Snapshot:** Top pairs by 24 hour trade volume per Epoch. The 24 hours top pairs snapshot looks something like this ```python reference https://github.com/PowerLoom/snapshotter-computes/blob/6fb98b1bbc22be8b5aba8bdc860004d35786f4df/utils/models/message_models.py#L83-L93 ``` -**4. 7 days Top Pairs Snapshot:** Top pairs by 7 days trade volume per Epoch. The 7 days top pairs snapshot very similar to 24 hour top pairs snapshot but with a different time window. +**4. 7 days Top Pairs Snapshot:** Top pairs by 7 days trade volume per Epoch. The 7 days top pairs snapshot is very similar to 24 hour top pairs snapshot but with a different time window. **5. 24 hours Top Tokens Snapshot:** Top tokens by 24 hour trade volume per Epoch. The 24 hours top tokens snapshot looks something like this ```python reference From 0298b80a47447ede234f94e7ccc07e481fccfb8e Mon Sep 17 00:00:00 2001 From: Seth Date: Fri, 29 Mar 2024 17:09:05 -0400 Subject: [PATCH 04/17] fix: invalid code reference --- .../aavev3-dashboard/data-points.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md index 3aaaaf8..fbf6215 100644 --- a/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md +++ b/docs/build-with-powerloom/use-cases/existing-implementations/aavev3-dashboard/data-points.md @@ -18,7 +18,7 @@ The following type of Base Snapshots are generated for the Aave V3 Dashboard The total supplied and borrowed amounts, supply and borrow interest rates, and the indices used to compute future rate changes. The asset snapshot looks something like this: -```python reference +``` class AavePoolTotalAssetSnapshot(SnapshotBase): totalAToken: Dict[ str, @@ -40,7 +40,7 @@ class AavePoolTotalAssetSnapshot(SnapshotBase): * **1a. AaveSupplyData and AaveDebtData** The nominal token amount and the token amount in terms of USD at the time of snapshotting: - ```python reference + ``` class AaveSupplyData(BaseModel): token_supply: int = 0 usd_supply: float = 0 @@ -55,7 +55,7 @@ class AavePoolTotalAssetSnapshot(SnapshotBase): Additional asset details including the maximum loan to value ratio, liquidation information, the asset's reserve factor, borrow/supply caps, and available eMode options. Please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/asset-risk/risk-parameters) for further information. - ```python reference + ``` class AssetDetailsData(BaseModel): ltv: float liqThreshold: float @@ -73,7 +73,7 @@ class AavePoolTotalAssetSnapshot(SnapshotBase): Additional rate details describing the interest rate strategy for the asset. Please see the Aave V3 Protocol [Documentation](https://docs.aave.com/risk/liquidity-risk/borrow-interest-rate) for further information. - ```python reference + ``` class RateDetailsData(BaseModel): varRateSlope1: float varRateSlope2: float @@ -89,7 +89,7 @@ class AavePoolTotalAssetSnapshot(SnapshotBase): The asset's total volume by action for the Epoch, and the corresponding events for each action emitted by the blockchain. The volume by action snapshot looks something like this: - ```python reference + ``` class AaveSupplyVolumeSnapshot(SnapshotBase): borrow: volumeData repay: volumeData @@ -103,7 +103,7 @@ class AaveSupplyVolumeSnapshot(SnapshotBase): * **2a. volumeData** The total nominal token volume and the volume in terms of USD at the time of snapshotting: - ```python reference + ``` class volumeData(BaseModel): totalUSD: float = 0.0 totalToken: int = 0 @@ -112,7 +112,7 @@ class AaveSupplyVolumeSnapshot(SnapshotBase): * **3a. liquidationData** Additional details describing a liquidation action: - ```python reference + ``` class liquidationData(BaseModel): collateralAsset: str debtAsset: str @@ -126,7 +126,7 @@ These base snapshots are used as the data source for higher order aggregates. Th Following aggregate snapshots are generated by AaveV3-Pooler using base snapshots. **1. Top Assets by Marketshare Snapshot:** All assets organized by total market share on the protocol. The top assets by marketshare snapshot looks something like this: -```python reference +``` class AaveTopAssetSnapshot(BaseModel): name: str symbol: str @@ -145,7 +145,7 @@ class AaveTopAssetsSnapshot(AggregateBase): ``` **2. 24 Hour Volume by Action Snapshot:** 24 hour volume by action for each asset per Epoch. The 24 hour volume by action snapshot looks something like this: -```python reference +``` class AaveVolumeAggregateSnapshot(AggregateBase): totalBorrow: volumeData totalRepay: volumeData @@ -156,7 +156,7 @@ class AaveVolumeAggregateSnapshot(AggregateBase): ``` **3. Top Assets by 24 Hour Volume Snapshot:** All assets organized by total 24 hour total volume by action. The top assets by volume snapshot looks something like this: -```python reference +``` class AaveTopAssetVolumeSnapshot(BaseModel): name: str symbol: str @@ -179,7 +179,7 @@ class AaveTopAssetsVolumeSnapshot(AggregateBase): ``` **4. 6 Hour Average Rate Snapshot:** Average supply and borrow rates over the previous 6 hours per Epoch. The 6 hour rate snapshot looks something like this: -```python reference +``` class AaveAprAggregateSnapshot(AggregateBase): avgLiquidityRate: float = 0 avgVariableRate: float = 0 @@ -190,7 +190,7 @@ class AaveAprAggregateSnapshot(AggregateBase): ``` **5. 24 hours Total Market Stats Snapshot:** 24 hour stats for the entire Aave lending market. The 24 hours stats snapshot looks something like this -```python reference +``` class AaveMarketStatsSnapshot(AggregateBase): totalMarketSize: float totalAvailable: float From 9b5eb4289389d63a1c4298dd5524548566f61be3 Mon Sep 17 00:00:00 2001 From: Seth Date: Fri, 29 Mar 2024 17:26:26 -0400 Subject: [PATCH 05/17] chore: update example dashboard image to latest version --- static/images/aavev3-dashboard-powerloom.png | Bin 0 -> 58268 bytes static/images/aavev3-dashboard.png | Bin 86862 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 static/images/aavev3-dashboard-powerloom.png delete mode 100644 static/images/aavev3-dashboard.png diff --git a/static/images/aavev3-dashboard-powerloom.png b/static/images/aavev3-dashboard-powerloom.png new file mode 100644 index 0000000000000000000000000000000000000000..623ae4754a3cd64b26704c9773ca4aedab8e7b51 GIT binary patch literal 58268 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 VU1g+K+;y&Ie9q!**=gt7{|zv(>XHBe literal 0 HcmV?d00001 diff --git a/static/images/aavev3-dashboard.png b/static/images/aavev3-dashboard.png deleted file mode 100644 index 102bfca6df055227fa0aef65f7ee2b12b78d72c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86862 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 J8fApcf3GihU6Tc>+`>(io~@~O8| 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 z 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