From a59b175d57a3386af1e7a8fb01a0a1eaae83f24c Mon Sep 17 00:00:00 2001 From: Lukas Date: Thu, 12 Sep 2024 17:11:33 +0200 Subject: [PATCH 1/2] refactor: reintroduce permissions --- .../contracts/static-a-token/StataTokenV2.sol | 10 ++++---- .../static-a-token/StataTokenV2Rescuable.sol | 25 ++++++++++++++++--- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/periphery/contracts/static-a-token/StataTokenV2.sol b/src/periphery/contracts/static-a-token/StataTokenV2.sol index 0653a683..f3784053 100644 --- a/src/periphery/contracts/static-a-token/StataTokenV2.sol +++ b/src/periphery/contracts/static-a-token/StataTokenV2.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {ERC20Upgradeable, ERC20PermitUpgradeable} from 'openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol'; import {IERC20Metadata} from '@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol'; import {PausableUpgradeable} from 'openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol'; -import {IPermissionlessRescuable, PermissionlessRescuable} from 'solidity-utils/contracts/utils/PermissionlessRescuable.sol'; +import {IRescuable, Rescuable} from 'solidity-utils/contracts/utils/Rescuable.sol'; import {IRescuableBase, RescuableBase} from 'solidity-utils/contracts/utils/RescuableBase.sol'; import {IERC20Permit} from '@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol'; @@ -24,7 +24,7 @@ contract StataTokenV2 is ERC20AaveLMUpgradeable, ERC4626StataTokenUpgradeable, PausableUpgradeable, - PermissionlessRescuable, + Rescuable, IStataTokenV2 { using Math for uint256; @@ -59,9 +59,9 @@ contract StataTokenV2 is else _unpause(); } - /// @inheritdoc IPermissionlessRescuable - function whoShouldReceiveFunds() public view override returns (address) { - return IAToken(address(aToken())).RESERVE_TREASURY_ADDRESS(); + /// @inheritdoc IRescuable + function whoCanRescue() public view override returns (address) { + return POOL_ADDRESSES_PROVIDER.getACLAdmin(); } /// @inheritdoc IRescuableBase diff --git a/tests/periphery/static-a-token/StataTokenV2Rescuable.sol b/tests/periphery/static-a-token/StataTokenV2Rescuable.sol index 9dd59f90..c1c89f0d 100644 --- a/tests/periphery/static-a-token/StataTokenV2Rescuable.sol +++ b/tests/periphery/static-a-token/StataTokenV2Rescuable.sol @@ -1,7 +1,9 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.10; +import {IRescuable} from 'solidity-utils/contracts/utils/Rescuable.sol'; import {IAToken} from '../../../src/periphery/contracts/static-a-token/StataTokenV2.sol'; +import {IERC20} from 'openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol'; import {BaseTest} from './TestBase.sol'; contract StataTokenV2RescuableTest is BaseTest { @@ -12,14 +14,28 @@ contract StataTokenV2RescuableTest is BaseTest { uint256 amount ); + function test_rescuable_shouldRevertForInvalidCaller() external { + deal(tokenList.usdx, address(stataTokenV2), 1 ether); + vm.expectRevert('ONLY_RESCUE_GUARDIAN'); + IRescuable(address(stataTokenV2)).emergencyTokenTransfer( + tokenList.usdx, + address(this), + 1 ether + ); + } + function test_rescuable_shouldTransferAssetsToCollector() external { deal(tokenList.usdx, address(stataTokenV2), 1 ether); - stataTokenV2.emergencyTokenTransfer(tokenList.usdx, 1 ether); + vm.startPrank(poolAdmin); + stataTokenV2.emergencyTokenTransfer(tokenList.usdx, address(this), 1 ether); + assertEq(IERC20(tokenList.usdx).balanceOf(address(this)), 1 ether); } function test_rescuable_shouldWorkForAToken() external { _fundAToken(1 ether, address(stataTokenV2)); - stataTokenV2.emergencyTokenTransfer(aToken, 1 ether); + vm.startPrank(poolAdmin); + stataTokenV2.emergencyTokenTransfer(aToken, address(this), 1 ether); + assertApproxEqAbs(IERC20(aToken).balanceOf(address(this)), 1 ether, 1); } function test_rescuable_shouldNotCauseInsolvency(uint256 donation, uint256 stake) external { @@ -31,7 +47,8 @@ contract StataTokenV2RescuableTest is BaseTest { address treasury = IAToken(aToken).RESERVE_TREASURY_ADDRESS(); vm.expectEmit(true, true, true, true); - emit ERC20Rescued(address(this), aToken, treasury, donation); - stataTokenV2.emergencyTokenTransfer(aToken, donation + stake); + emit ERC20Rescued(poolAdmin, aToken, address(this), donation); + vm.startPrank(poolAdmin); + stataTokenV2.emergencyTokenTransfer(aToken, address(this), donation + stake); } } From 5b01bdd77161ed04b86dfb689a06db0f00c14688 Mon Sep 17 00:00:00 2001 From: Michael Morami <91594326+MichaelMorami@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:39:35 +0300 Subject: [PATCH 2/2] Certora Report After Reintroduction Of Permissioned Rescue (#25) --- audits/11-09-2024_Certora_StataTokenV2.pdf | Bin 307125 -> 307881 bytes .../stata/specs/StataToken/StataToken.spec | 20 +++++++++--------- .../specs/StataToken/aTokenProperties.spec | 2 +- .../stata/specs/erc4626/erc4626Extended.spec | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/audits/11-09-2024_Certora_StataTokenV2.pdf b/audits/11-09-2024_Certora_StataTokenV2.pdf index 1d6e865414dea22826ff84ffb30989f9022a62d2..b908d33ef3d4014494dc563331ab9ca636a2ee73 100644 GIT binary patch delta 31804 zcmYg$18m^k6K!qVwvDZAZ*AM=ueNR5+S=~ccDwb~+#2uu=Or&Mxi`6)o0FN7nLEju z++TZWRmW(7t)Pd~P`pem9PI2F=hL88G{&5~Cam0?W}Mu{?Cd;T#ulvR+{Qc>CM>MR zEXJ(n#>VD6>=tYsrWrmnpgaJppdg8>n~S-zJ)BqWmA-DmRu^i(p5gu}m@&`MEffai zlTZE@l+~Uuukb?a-?MM%HteM3$q6|*h4~99Xp17 zd!MJXr7U`RU*i&+EB(NWb^G^zM!`+r*O8~t_j7%lWi($i>2<*C)()_D6VQ)0Si;JO z&fsi^aO`ok$P^F0Qm``%>DzIj)+=hvc{%xhRtvgQLn03(73Yp03sT92_;ruOec2nEr#z>y z^83`869I_o9%Vxghjgin!RPKv>!^$@(V$e*c2v_wb{}J3x9M$N%U^stZj}nMA@pn-5O)^_0Qktt4QdLpX-wO+bDa6<8_&10HS?A;^8| zgoYA6(hz_Y^BXT;QV5NoWdN*lGJV!GVbcg3iuA2|;i3RmG~}>^0h$z_n3~TmjYx1F z{HQaG2My8(vsk~#397Mk;1XZTGn-JCOWd@SAxPHn&LY-=qXZ4t zL?(~;y|}oki6zJ*X-DVa6(}`+!Xsimu!Az7A^w+N?sFFoS=o<2LTnxf@+> z~`4?BQ{#(YbP} z60SFo)3fL;sFzGR>ptGoPu01gd`{E&_rYu0#KBn#WjB+oqQMQDoFDHMKo zKw3*)9g44282U-5r?}#ubu=@m%viDT1ah*Nf36c{EOgvN!af|<#1Sk5iZ=R~9|+M8 z7iDRk*eb^C&0Lwu0W@O@g|XOa3)B7drJ+A&Gc!NPa>Fo(%Tj`2qAL0_#FE|2NHMHG zO^~hOU;)@k1}y(Tvy7nB9%fFvX3;OUm1OVcMgHF5<5=N6EC7{>wxJ$mg zkkxfz3H$ixKU$iVW@SE{G1S`f&{&5gxG943)2e0D*b#NRrjbG;E}>_e0yEq`82E}p zQx^~{{Cqchh)u$FaYhWpPXifuilaeZ`oxK=VnAU6#E_C?(gtn+0K#0%A_HqBFd%}Q zNxIE`!L!Ms%;}>1Nwv`zMdsb;Hg~vw3+Z_rfO`a)QtHM$%gW_V@Y(_G0XNt1nTHWSM zHozOPr8`J&3dhG~LDFhoiddB_+xSA{x5Pdo(?sX5tQgnu{Y_5e7iBE%@nm?gftKW+ zM1((Dvulae??mSDXGW=@{ELBe4ixSpUAu%u<{93kBzBhKs7ZX~wevOUGHs{T__(~< z687RF7x%$sJ$e>TkYOcX_mOBWPLX4%kN~8kwBI#plkhd^8Ask$--T(l#3IV~4P2&< zrH&0qx7_i?N}Xp!NDsVYnG8~-vW~etC4|nCZA!0Ph7A*;BTPc zfA>Bt-M#^_sHK$CB~GORS$xwWF{)d$lS-}8Vdjo*%V)Cli1>Wp_dC4--=RcqSOrM2 zJr8>GcbmkZ%jR+6Q>aBA=$Rdk;i>;litQ*U1`LD$q7u6!z`)G1UUwmiEzj1)M+$fKyul>~?tr3Tx0OiYP#SNxMMWcP_5+x>_#?|;`p z;hc>Solp)7(Mp$xXX?cjDm(XS>wg-W?Q{693VQ7fi?y;sub{tvap=f*LtQ##NxA zKpl|``j?Qk3Ik=xJQ2r#te>T~?Q@1_mC`N@h^dhyw798%lU=_ocTDg6*51V-2#k0=t zSH{8yC^o2V#@Pm_6o4PV2Qm%*`i|_eqU51cJvWK_?BDOo#2D~>xZlX+}=HNqd11kf5%9$18;Xx27#HUK5gmlN}CJ7w1Zp8-61oe>~o(%;h#f z!~Ma0>fPso%3#_8#U|*)Pt6Z^Tq0<&>fn**Xq^_|Pz$rJ{su)rBb19U*#d1h*#cwB zhhSsnWlJg|1~|D{IRAeYbJ+{)g(2}J^ig+yeb!lF$>vGrYL-073JWVk0zqa?0-E~H zAwni1tauD_z$kKz0jY0}iF`X2LKzwex)G+Xu?FtEvVw`Me5XfV+gwS&e$#Gak=%Ix zzSV#8u=o6WCC2&htgEZL>)cmk4T1y&NDLJ=4jTG5Bo1;uwip8)N5E>~JS#BV z)QlUb$8I&<@%1J&QNtSNO+&<5UU}s3{T|Zvsh;VGV<=GTaYWei1)HdgVASjS+dSno zYQ{TE>zli_-}QHK*dVn3%?F{dCVU~T?^(}TMz4?ijt>a6hAmTpV5c)the*UT&@cjK z{+3(A{7Ge{8`#bTHXUF)wmelIETkm}Qn?O|g3E8Zc~li~#r)@U!q{%l6$)!z_8+z> z(L0PbJCm;0O1tD~8Ay7?#>2^U9$V*4(px)=J_reh9@lHNceZIcm7NgA7Bq8#-v)=K zm}gHv3-na=>5RP|&Rm3hX8!OwaLSm;#r%F{>trfMhD;suM@VOKK*$SGo2g z3^XPWPXNJmX+f5D9Ft4}R6CiiRW=|-oJ+|UTkOh(k9toug9TXGy|6$}@%(t0!TO|# z;*A~uMttHyoDNIl#JIY1+RX|MTtjreV2x_=fk2sDDdU9vNRagGj#*4!&9307ls`^vRsqra-x(ngWTgLE4c65 zwL^I@b*cXL3oRxC1GN1lBCok8SAM&orwM;}Jj!JGK(HRTuiY^9P)U=y-F z=*U@zU|+zHhH4t&Y?`D(ikK51tS91^3&yQ`39LW-aG>3JhSBes(q9l7P0Xq|Gj&3) z<`ViN*0c^*3U8ZjCL-HKvD&J~cyOk|O=1?jh$4=E;ZU0ZKX0RBk1%n)B%u0>A#^oN zeMrUzaUx8n7Q8Gpf2d2`_Nw-ek?i@dyt(X z;pd|7R|zl$7*C|sbdm(@zDJr;3G30;xYoFy`wIAaT9&ZiiDs<+-5^XO@8a70&LxUB z6G-+qK60B)@HP=V0tkD%oc!BSC3>To=?Rs&O2%zZ<6Xyr+ZWkQNTOJSGw0h#)K(jk zFWxccbzUy^FUT58%Qs9HbzL^F`*{mCbgp3{uXqArxTbAD(JD+R1pe2uzZ2m$?3BuZ z(m-+=O_U^gzs7LhNQj>v1Tq=35X^hiRhSd_B^b5ycz@_<<4-U22A$|1{ODzu(y1No z$whbc%CdxLj-s8M7?ijCix>@YdszMCUoiY|d|^W4bA|QKLm2!|~ih!g1P z&9h6e7g6V@oWK?!a7iXGL4ub|H5M`YT!O0wqq(nt6NI%MB!&M$goIY&#_%Qmf#ao2 zUXXCJ1lN$%D|$JdtcBTP@05DqahV4X1Y!gG?r2m%sVim4PqL~-&bxMHNlz(QcT)a% z%>c>13hqBmT3#XqI5!DhuC&{;lK5W`#Hh@)WaJZG*;1#A(4ml(kZ>K6Inh6?DYxT1 zzZ1nLk!(t#LnB5jM%1!n*Y`VcEh)gBi)WstOoq4-lOt9Tq32~D4c?lZDqeul zmvDaEy*HEPw)P>lTY;t|12c@y$Z3+bq~jwG7vv2k18T$h05^s_g#RP5w>&BYg=OBN>Aapq&lNL<2}n9quHy3ysD`n z7EA$7hH*wTMpj34OzQ3ul-0Zv%l%M<;k_}=zbCE0^~2h3OQcU7(a7WTGLC?hJ~Nv5 zX$rQOX==@V>0SBN6e;gLK+5BgrdKT9q(EVL{Czv_sqpg*hM%c?>91c``mTuX+16tz z2|Uyw8BeI6aiTJ_JUSMfCj3RH#lHGJ_`d0Ws1sg7M|ek{$JQlDICf0L{^p< z52bAdQ|y8fwXzrf)|l?Q9fM&$!!p)n{J$!3s5^rqa+4lEP=v2y)Cc z_<{ii7W~g&9!H0mx4LZVxk&9Iw4F$T5#x#U_oY*uuXxbjQL`AD3ml7ZKmEY=>VwTt zMVg0aN)5CccxCq_=dJ^l4Zx&hIb~YYjO7ax8Z!wAbhvf|)IW?kg3N4i}4GF*LRXv$x z*M0w>b%4bG(G3Vu!eO`!TU>YQ;uKWQjJWZIksKvXfQ}@x7&#q)Sw~FxjV7O7!ZSW| zgy^?tYm7%oXh;Ld$IOg43%?^$Ua=8Or8TNP2z6oS1qs5gHLWK#1X8o^A9`vqS z=ZAJT?f7d6N#GS&6?7oWk6c8jSnu?|$9v7evoMLV`%?h<&?W@IbMnKkKWYpJiZO8Zc-Re*tmA_X6PE-oC@2X3ER!}yiUk4tN= z8WYx>SSX-Zk=~X_f)$O3za#N@IHk$RB_lZegaiwbzgxkzF^C&J ze@AsRJ>yGGj&niv%1S2Hi1H^E7KH84;K}F8z7c*FOEuO~yGF!C@XQszKy1a@eJkuz z5sCpyt@B(Z5?4yNk;21(1iQux$Irv7HoQmhA#kAl3?AO7W;aje)%M+#KyLINvx=ADAj$I-E#~%q@Ak6 z#?GE+Suc&KK1c6r%O*m-q+$0&B_zMa77l=Kqgx#raNyKUhApYGHPMkGRJuE1;52g^ zpFmqJxqX#JnHi)Nxsd9*P@YG`!Xo2x7IA5{RFm?yiH+r_ z$t^#hSIU)VFF`HCopEFppMf<<6a%^I3z_CNaWf`dUrSEK`I}U>Np#+@ut;_qcu>@h zio|fAIoQ8O6PjvXsvernxO04^=4PLH=>d)B*cymSmM%lFF-5IkvVaC*vd%%!DYcUH z9ZMS*2EjbSVIq6WouRIuBQw^;VvagNGiWX7qG2&jmOzcM51W2Okcy@8ARvt4R-=K4 z01aJlqs7_Dxa%gvQyHpxRXVqDsxebzEsd(E>$k>uHUqA?wy!lq(wjs}^SFmcMK5Wu zJ{ir5ZsSP@GKgtvt4mV^j`y}^KQq*|nI{60mZ7Tg8%~>Qf{i8gk6fEFqhmpz8l=_1 zFEZvoueA0MURhk~l18%l3P37t6E|5Um~%ttPTTSnJX~3!3~r+%5TRoL_Mp+8o*yjY=TjoaT;Ne zCYVE**c6uf!4A-p@OD#5S5~I64(LNxgA%y8mk!Pz}E_+?uk#1vaj+W<+GH?CPJ2Lbd9G>(q zp5uSniA{pbHjAQL2inXfWVtR;#Yw<0VdTSv{ThUI4BG1jqahv{-b{@;-`OPSd#b(O*2QFQVZeQE?bRG_ow>gVOzEA?GbIshA&$ zMTs7CX*QIWFTb8kY5y3PPW+HqOvbY$tuhCfHIFSDHl2QX9mF-bqsq%ZFDbNv6${1n zL|^VG!Y&yt;0<5!fd#=DKe8U^OeBd|zB{(OH6QBCI2MPK!%CJ$N{18jXdc^O;)fs2 zT8$%Rvb+ea>E5#1KMKp00)+)BeUgR{*zqp`Z&=jTN2lX|NEs_zz--Jw(2NpAN}s(mMb}ZbQGg;FvmJpzuFFq{70!uzqNHI&J@|9_81*OX>QKSUz_cHh0Lu zj~u}g%_A~Ljw_JB?Va!MB33)Z1AAx?3rMk!vD!4cQ+fCyO2M0;j?w-11enJDS4^I# zG?H+xDf-((d>W~jk1**abBBXi?qVFJ7BqsC)d*OtFOj24k}rn=I!KCbH$xUHI$M#} zynTUC`DEIALUO_+QSNbjY*K7*hc=7(~*MiYOzKTsZZ}A$U%WT3RlS@&Kr0Mb5lh+rq;edc)=VN=b za2=9{6x(A|7o|>drbICp;n~C`^X}Dh^;U~Im6|o1UwCzuWjgblTL%#01ivjBmw2qFnF{^;qauBvBoJNxNOZu@yd$ z*z}p>D-qE;dABfgyg)j0KM`Zoj^?6En9j9?Sy?u|+LpvauaiCd5u7I+>3&vscA4A# zxZ3r@i4R-7v&PQ94imfvfWk}0xk9*ZS;U>W2#>9@4`3^)?+m3pz;zeP28IbD@{V*} zYRi47U!nO{R<1GLk{tnC$rhI)M|b_5L@u`c_7IX+=r*zFS7^ryiP7mz5#Rvm0jH5C4>)-vplVTMZXmM>slZk`<5*`?&oZ1Lp$ zG2cBgw?wyH+Rosr`(y;ntreD$R9DJE>9AXErcv^26)%epAJ`*C*w2!Gm>b=gGTTrTfXW?Cak5ttVZ# zt>-7S`{#dF1<`?WAF`Tj^!i;mblb62hrCL~8i%uzrz%*b`uZ&{D>Lm^?Kz!|yV~X? zA=j3qOAGT$Z6M?~P~MfRj%+eVXZgQ{SBi8n2c~#PZrg5C1Q2e%eDuWOJxVtqo)vX{ zDViG?D)#t`UgIx%7X505MfiJ3ZSnO3{Z zsEKo%xEQ{{st0VFlf4H08;{j!VTgV`keX%lMGh3Wu$h;schG}jDdh#G6Hn+`E!uyx zrE@iE+Fa++vE$gxw<%$G3=i$rDx>_sYi^d+C|{z)|8o0kkj{r@VX`Wob0DuSU!gV%uDXJS?6*2b1Z%`7AGOo&(qMI;IlnnVYPtAEBbMmJP0~Xa>6#ZTD z*m5G^2EnDZ5Ra-G$!#VA64Xcn3sz)h(N)%f=(`VXPoNAjW?BfY|AFvVWUikSA0^I6 zoFfQ!VR`|~LcFcz7(okFsRY+XLLMBym~at=FtTC*)To0=B#ae`(n5;P8vG(~B#gs~-TdEpF*tLM z6^{1~T^Xb^GK`>GM9>6P95tp0rHSuAs0gBqG+h+c1Q%mGK@2%wpoq_eH*Gbl>jsZMQX@sM8zrK10QF`89^_Q2P=GJ z%a{N`j9~6g6enH_p8UX2j4)O_H*g&Zdyqz6DU>zx9}Cu6$RR5Aa9Csp zNdTl;A(Atlyl^fQHmLy|`k~>FTRb~ZNaReVNAL}1Ap%}*>6#0kg325s*ZAR*8O)P$ z$e)S#O>i>IF#^d#*pzfAnu+?2P#>5T8DoTXkQP}mq|SnWXVZajhu1-HrxU+6s5f$9 zOmu+AA`}3D8eGqtO9+$E6k90hLZtFTsz{J{%Y6IiL{PACz+#@kcSdom3$aZ)K=qiar=&wj*vH%d|!K+B*VZz9S z0Y?<#Fuuc^VN)l~4*@TNRZ<5ac#lkQ@J^-!|Bki;`p&uo+nIfQZ_qzd_fNoxg%^l3 z{eg&85Mtz(5xEIHKL&u^HavXSKZq1RH$Wa~e@kwtos2ldco?T8irp* zHVhz*Xzt^Ve9niz;9ZLI58S!0hrM90$Gt#(2!2uZM7==uKmx)a^p_%j_)lZsU^h-5 z`1}zsO#BI6C{Lt)<9Gfq=m*fZU-IH zJ92MOWaNN6@7q4>>zH}skr^Oc>VJXE`g&C|d$arwmj{FvNtdv5DVKy^|Fgno zoE3bCmjl!0Z{zxAZ{vFZ?_+sl&zKP)3nYOnJcF4uB(@Pr7a0y{i=?sT z1VEahy7VTtqVW*R&{n7xgC$GWtiEpS#oro`*l-Z_+gi&{B(7mZtMe40+1?k3ixnf- zi_@AK9|W7Bwhn|u$Z^))$xbNpC_XI>Py4ARjM)D2wb&Vmht7JVqGSHxV%8BTzz$JN zP^(JmzE)A3Ce6X-ytNI+0vM>oEYla-X`%|RU!{2h^!#x@JvshXn-5trJD+9~V6-k}dPx3>Qstc#;B26!n~TTA%uu%w4gAQ> z0Nzh=PKUHbkgcOT*>ke7#iXQXV_>H(SajAc$U;WV2CKxmF4&5ELUxVjaUP2+(J|%m zIDBLphH>BK`ep$ImcZd^H;b(8g+fTXOBflkH3%&DObjk&$(k&Mve#N~)`OoooIG*G z20s%E5ZGpu2aCA}{zo2m+d~(y)QEvRe^~hT&_taXd)A%1jC(!_n#{Xe) z7Qj5*LrX=D!TX7ONT0?J^o#+RipBA-F)1mhqDAK{J%Fiqw`k5}E$d1$gMRod&~<+e z0@*Dll&?kpnx$c33pF{K52Og?rFp%_t3^y3l))JAE+hBqWolTv{CED3$v;%z(mAWA z9)+&#e^BDoBZ(jXK{M+tZvS&!gdbeX0CUtRv~@Z)^&8e$rto4f>-Lp@ef5<6TwqMk zBM(?Heexc1K+c8lr+O)}G&ZnY4HqmQwGb&vgOeG}gXHB!`E6NW+Rs8Q1TW`Q-L*Yl z5O4p9OQqIT#RA^YQl`tc=-PAky|MP%089FJr?>Dw+ORZ#XQ25+U6QDv?;l9@CQc}| zQVlahD0$TLu%SY5*ST;wvOdbMFS}Y1D1pqRQ$B9yex^`kVF?+_^iN5KnJlOcLeeun zEKz6Hqcm1cw(g#eS`@ka#zt~8OG}fjOS>4#CDp-tSBrA?Ww53e!4OtLb zj_yASsp%f{j0(*3zxbjrhi{vKW?^neYvcYQ(f<|BUr4oaq_gSb6fnU@Jm3FfxZweT zLJofjXV+|A%N!hrHj*)9xa?7CNH*wY`|Zn{M>*T%rR`lgvR3n6c)jy~iO_8{BnN$p zs7HN{DUDS%h1YJtT+W#kAi?=6)u81D7j|TPhQ4;K(`=IT!omT$73Z!D5EwbN>Zx3+ zU5H$nzq~Z+?x7w=NoYisQ9>)~o*O)*($N1|Dz?&7Zx&TIS2z2zR#BtcFw);>8&oIV zInjg?bY1*1M)zRu{Bhdjlqzmo;*mle`I-}Asn~1KZnM+Up8#nx*pe@#zc*&wrKIf^n**icC+tLBY2a_5zDL9^Q?OfRgd%e^q`~3 z-q`vc3c&V6+6nsq7?^L2>jR?UEazO^1y(qEZ`` z><@M~QIB6F5UXs`r^!~DRJPJvZbq$WEcAA?N>vTlC%O7OG3+$~M`4th0%4!;r+a9) zCs}@|g6+iCB`tr=c@iM2Es64|=Z(#91lbUl>1T$ah@5xpuKzk6OZVR6Vj$Yy7$7{{ zQTm1wd|ClS)?0mfGj~j($LqeJ&Fb9dd3Ew`&hU}=O#vknzTU-sMB`Ng3sw5>&o`EU zFQE6~x;c3w=z&(tsS4=Jg zxk|(HCT2AB2<@s*&=x;?*O+BJ`X`ST_ecF4v;on7jgu?dgA=j?)*NJb+PE0|BiB;v z37_TyihI?sXL<35c^sFD1*B=WBiz;FM)QrjbhQu|B}t_87aiuO0=k?c2?t`$wnZYt z#0L?BQ48SmaKms@auzbw_}i^i_LYZVbAgXd*64)j0wqh9Q!R*Uizhr5 zz5w20L%F667H)kL!`e1ugPMU0ajB#2E?1A`orhb-zw|f?sy=)3;qWNppM3Zfnk9;e zVN=oW5N^@&_t>V4FDS2C@H?A&0v({!~u8dmn9Z7&9#kr_}ypJBwiV6C-~w^)s< z-v^9#yLV+5C0CIQ+Cl}?DIvn=r(*u1l>mCIegF*ef>pN3g|^Ot+h$@M$NqG#boK!Q z^ST9wK zp{h~a)I`wV6dug%-5KJ+$#g1{rt1=Pld94z2OlFm_kmfzjV%+eYVu&aUnak!21hU-ux|U z@9;Oa-nRa>R41M5*Bc2psp26N_R#s*3JrfMk4RJKj5-;@nhI^+375=Bz5?Ltd84vw zbG)^9cGhmWd$YgSdv$MDqp%BOSNk}PRg*T1A9j5b((p$LVSc;U2qt?ncE ze)>q%Ec9GHZ2Ai}te#@RtN=d#!IKTG3sP-yjcB&`&W@IjAhlClFr4RVvDHef)%mP+ z85VDnYdO+AvD%X@ZmNO~BkhBS8XHHQ{=ztp;&GXz z-o^qp@G*uBbFMG`#emQp^>Nk^RmoP!ra&c&1N?8)03|yjT9YA90F`e*Lq$F8M>8RH z|0m=zq;6O{Cj1z@Y=)PDnx0~XGz=&C8cVJx(w%fY7tb9E^+e9~l zp^Z}!ZWeK|FsDhnQAUw7O-C=#vcrF^`=SW{vZt7}WT0c$SD4Eqc+ z5ZvN#;({&w<^-Y4d1RaGoAmF)!-Y4bCchJyLwF7{oF)n@NJ@BBXgF-P{`jbjRu^jY z(OjCN`*^cxK>#Oc0)aFa7k3Y@!}jTb5n12x$Fc)EM;l`fr|Yj?&c~ITdLQqnGBrm% z{P%+^p|MGYYu|M4J+GaRC+NTGYf7DWCpjTohPk_J?u-6AAN~FIj+X@mthS(e%qmG9 zMcZ6SmL9>Z0jmDlaS1ZRun{p%h*J8Zxvr@lJZnzNlz=#&l=c)PkyI8vQyrJeER@!N z|4%CSD-Sc3;oEc$5e|J0(Z@1k7nO}G&lFV}Nqs|9$S0C_NhT_l`l+8-2E%_$nB)znm+ZN;sk|=t!QE8ScFd_tv)&J|@+dcE`NiHiCHCg*? zowUnh27ql*EG`0-FRpSJRF&|?=p~*!!Ny>H(bkN;8E3&wLl%;S&moWLh3qkVSPkN_ z*Kw4rEo9D7boB8~G1+hMn9<;+neTx}+ArgnI6i{|0 zn{m}eL+c#PLzR+ru~~xr*cwh7DpCO_H*3Ne0zep1>9Wo_j4mX7(Z%ex{LS|aJag-q zPohi$9G{}$t<|LnhPh{6*31z^3$oav=^yHfl~xYHJg#^sCXS9I6Qe3c(&8>Hx;Whk zuJ~X+^LZyKSq_sb4hM!!9=vV8K5cTr4NJMAJYlC+1v{^(x!Pww0zrH=W2hLKH-9R2 zP+%kOcRqdw{~#rn8k771OTB3Nj~3)I1avlUu6hVYf(WmMS*^4trmMTw(>O=`J-M~> z#qATnhC=%EXvA*iA{ZL$RF2-^^z^6Z4HNE)jTtQTXnf8%cX3Wf@q!UM6+()QDoX}3 z@02LApUl;1?sGq6vT7JKR%wdwgm>gmANx7=_fTQ-Iuod9 z%JYH4OeN+xxX-@h0f=?o)jct3Z2f zrOP6~PpHem>T$r#yu0g?DU)g}ZHTlihMTAqmS+_}d}wNFFGm$zwXj%@#!Jfv=b5NN zvtQuE;c9YF*Lh@=9xb?^jKk-yGaw3PhK4HbQ*X$LngUyw=|;Qc$bI$+(TwSV>8XU# zFK5hge1JDIx`VE{n6du78gQ&c3v5<9YCf&7Z_?#nk*+kKS3doOrd}U|vV>PVuG-XY zs~Qa3r1z8iHRb1MyXT^FOp>#n8#+DTm?7dmrb=o++7g{>#Dimksj)hhL>2uhPwmLI z)f89N`m+F5ji*t7k5hbu_V@4W!rDv8Fg2{VT{t)%zd_SEmMu+f-N59!3?TdDRPX9E zcw0G+0327e zo?Pj}dC9dxs1j(dzY6MZw;M#wi|v}B6+oiOtjK=Oij4fO)L1UMHwrG#L{qWk;DiG+ z2j>mm@&o&)(;C;+KMX@rF7vZ;Xi2Xbhma(JcQST3?eO0NeFUK+F;Jgtv>O~eJZLuv zXDcyuD;940)dK|)M{sT3lBR^!))4;-`OJEQcKc;V_U`Cp#dFlINzMMop2{!@`^L0J z&@|DOe}a<ucD(3^Sg zv<#;qaWA7R+DjtT6gY5^749jXavn*wkVNjsIFzjV0Zg8@u*v6Yuxpe0GITEv z{)!Ljw?2I@BMP4*lbA#*B}1n_7RaTT^X_~2n6MmUj-k|N?IfzFUWTtL!Bw{NW!N#(=>!x|N3v_JA#Q9C#R z8=HZQ&4I`9G;I+M<@%xTZg%&Z!60jtz6FnvR*L_xGU0Ml+j|V{&KM@1;XKc7(cX_* zOI-;8VsQ%OV-ad5q0)D`Yo+oGjfL+e-1Tx*ewEs9re7wtQA1b6-QiH_K)sMhxc(*Mstg zqvy^-GXcwkzZJu_{xB2_sv^zi@DdEea!x8VD?_{Tr7fEn+FC;TW~#~1%`)O%Ra&h{eY&w-$O)8wW(iGZfu){A>idUu$!#fc+{bmTY&Va$oVypFHNEXGYkUQ_*G~b*9}He(nI8EMpr;lU z^L&og;U_G%tg$`ENRXU^dfzY)6c%`I>*SL;7CyrC*lc;ub@6mvX+T$1IF-mcma>+OICgp-xoJPS;uO8{RudtZNCEGCqR7 z8}Uox0mcgNzt%nuiz<*8HHq}S)Thwb^nq^@+!8(4*ZEN($I>mKK%o`j6Hoour1YP7 z7EG{z-ytfx+$DU!){U#i>olY8qM90k`TkmvLyShVG9z6187)e=5b2{6MJ1%%hW1j( z)hQ}eaJJ(S)-a{%w2-)3vP^2U-3fdL6ghlQ*kaMcVcrnECBF2HeQ+Ww{rta70-Q7Ou$@TXAIl!qet5(Wznm4H4Me z6xL7)WnMy9Q%Tau22GD1T)YskdG?W9`p*_Z0Y9(eT-f$QwJdZ|ezHl>EB$Eoh zL@FA3M69?`gTe%#wA#4TxxsIOrj`?pe2O0HHBcUVN`Wm6F!g@V8?p0Y0S<(?XDioA zTH8aqs~5Kn+)I=FBdiUX++!pc8nkz3X6F1B7iJ9VFSjgr+Z{VodB}s1t+`@x7cYr9 zi`vv%VRXDTKXAI#g;=^8$l*`czKh!iP^ii%7(zo^6Hz7?Ccqd!;p;yCRIxt`zA(Lx z3xKoxmo3((fKOg)apnoH0#`lvtGby|{?;F^)=7_4KKxScN<}SfG%}F}h`JeHqIn~# zA~dWDLEeolC9n>&TJRTT6`@iJd|?_(G39If(qo>u8ZC^&*-4~Fwk~zAeMUx!);*u1 z<6d(J)*fTO+H~zM!hEMM{BtJA-BSKFoNzRTXg1Lspq?EJr*FeC0f4OwJqA1qD`6Z! zy2E^)8hH#B38A9w1J3ljU(-qEV9~Wi2yGdS!sf&PSDX14(RXUp_K-vkfP+qKb!b9n zeW&}{jH%J&h)`*OjgldWU};g5*=U}Y9?8Tz1Oef`ZZ9t$SvQx5?fbR#w9fbJKnkAk zTY&Mnq4u`znEzr19GDj{`o5UTb`uNylX7{*FGzOQMebMaxQmZ4k#YpMo{p<`)X68sSS-3E3+oCmy$pX50@dcW-6B+9Dh0( z4E>+B-U2AjuImyF?!h$>B)GRh;~v~ygIge2aOt4I-JM{;-3cy%Ai*`bYjB6*z5jeO z^YLElsp_iL`|Q28p6aIS91^ClpjhtcoWCbZjcj@L+9ilL#9s|hox0J=qugk2idIcw zEZcGQ*H>ltCSv1>U1~qtN5x(H`vYzVLCW>O_@C3R>|`bf2K+15b%oLFA0hWwC*S(k zFPn>k9WeA6n;Q@yoxR3ZK-rb_hid*@RBAr#T!CX zt)P5rv3ff1vslhw-JBGmaZj?@koye74)2os>SIF}C=U%l2Mta^c9B1r4;@W0f6%%Z zF0WV3;>XEyT^$&lZJK0xXN^9(qJZ^!@}ZZ!Zc+k@?{4bmA;1_j9C5D4?1W>C@oZm} z3X#dN0Fw26k@VuvPwUr!?jXmQpOPGjWPK(@Mw3_4%0`Ypue=maF{ zv@mo3EXPZSN*|nW4mZQ_^CP^XG(2jl|Lhtu0`Se0kH$BcOE)~A=1)O54wTJ`+Qvo^ zV=(zwe6?7Qg)p#27x%td3AGxrULs&&%u-UFIf24B7WeIB+}pY7n%U)DSZs^(2CP1# z;}gCze7tU8&UrPYYKHrftv<*34e8AivglE;4Vr$n$Vyeempg^b>_)S!rF_nuI!J7XcRJUfF1SCS`AB9%Tmt?Gr6U^u)a^O?Fd zPth0H##sQtg-KUQKHeK0nD0A{ENe5gQo;PwRSR1AIn6HHA0z7@Fd7mP=|%#3L!3St ztdWl>q=W85Y8KM2o0IKS2K~l$til2iedj-8*#wy5gb4@6*rP`JnqnBQ>fq${kb%|_ zU1P=C6dZnXGrcz2=v4=7M}O^U*l(6ffW!Z&o2s-tJv014$-O`<3s%)@!JeU-GpS?! z=Zsuc3+lKZoqOi6LEESd!DB}EL8}!h$lhJImMRD_B7n-HdnpCLbTKopLr5m?(@E}2 z1*soM`hl7HSLEIZo>za&xoTVyELmrTBA;g&S0hMAJCAe^$>hQyD>-fMs~($IWr<3UH-3L27_Q|rVfpKw$mkRmsj)!yxKtb; zUBh44W9t(AO^-#zrE;xu-o)0@_kT`5I|G!$rWGdY)@as&>sbzr5!-J@8&KVi>x(+{ zSoCPwf%;|!pT^0)=aq3@fTOa-0<5*CUV|>U_m2y%Q1>^S=jFTBtNY%wnLAa9AI6H; z?FbUd>d09~z;fAgLqgx@YLtlG&6)z!2)Puo>gnIq9ezve5N~df60v==Th1H7E5Q8? zpT0)$I~nntU?bwT$`q1HLfh`RK;glnwbt%G=BPSbOyX9#>se?rSSoP=>5|;GHJ2h9 zrGRr$DJfXfoiv0 zyySLHx=vCxxciP(k=~a#MkU&#GI1Y#m*#PcIf(r`3AbV$GZzhl^9L#f#&~Nr zjC=%~roL2xieZ|gj(F8UWwdgou5ql6%2g8+{&F@4)ZW}+kcH>lS9d(=Si-`3O z3oFPyh~D4yw+ji*`%l7u4=L#nCfhBfgQaEH3Xx$cZHmNWq-9YWr_%2g{lkU==r`qz zOfckj6ob8j@G;xsycs?EEZHWIaqVC4H4}qugPmrJ)loE7JdghXDn&~YX=CXK9SaKm zNH_TSlUb!{wXKpF)WsS_xfTEgRre?zBv>?u1!vV^A-q^FOd6%vfkO+J}q6EXp zgEx!={qsy%p$T+Vwx<_5CtsL4`-B!$KY}u@YZ&x-P3@~2TTl7y;cof)XJs|xy8Lh z&h+kQOsW&gI=GyXJcf$wYmvNyR~$wfCr>_XbfYJUGV?k#jGd>hi?)WTbPf1>AzlQ? zs)wNsWz)JIX2X3C7b2jvC}jGNLlB%kDn zBqQ6Q^M1_1m&p`q_XeHxTJ57ves1nF&cyFC~j)exs5eR%U-R#OWE`LgVxK(UQ@$_w!d`(X%5GuI#A_rljBL9c^muQ>dvO6Oqm;*Dw-Jcsw~~LdH)%&kdbO+z&e3Z=qw{EjG*@*{jF%A z-52{desC_mQU-+6B3y|$H7e)`X9tremzs3@wHEta=&xs$goUAV0fjq*0<({f){U_-ZQXquh*Exn}uK>mdXB zQeY{#ta`DSb-0=7?)3yO>=*A>A**D9Ae#E~U`^tIcer2pE96;s-}+if0yD##yuJ z%AmsKzlRyvPmOZ(W^?!AXa0mgezw%f&#>}2KZR8tA5kAOCM|myJ@xIS?i$T(Sl)C` zY&|~z8&oqX*{;cUK;oT@ti|@_T-#14LIg&;X}Ws&xE1jS6xf5(g=OPnG>>)TGVN3B zRo<#k+&yS1E+L| z8h6(H>#PbfKA0ud!lC&56u9V1JGq7TSjJ)!sjRI$bO8UiM45Nme9Miku@>G49)uy} zykvTVE3g8OQuqA+7pW5n?=;jDkVk&8v@tBC+O$EVy%@5Yyf|tYr*!Bbk%J;#n1GrP zDmYu=Rk^IA6I!9y+YT-)(U!m)_^L;(`@xizi;G0l8m757O?E{VMT#Y|F7=MENJKV{ z(&KYaupr`6b#W+1*4mUu2K)Df1D&#f*JjZ&E;4i!f_uNR-$tBT=>Q|Fo4QkV0V=Yo zwIAz}8N?yVkOpHsx{o`^GE6L0$oVmNZ0}V)%W5@w>7^|{Rm_@O&c<^#Y}eSiOh+TH2QGPB~R zo*B%*WXUixEgx%(Z7bKjbMYjn%SP_;cCBRc7!X-PU0*mmB($FbIjG6v>0+E1`hie0 z$Iv*x6IVPioYLc+^k+LRCwE^dE|=p3EvR*1aHG6!2AipXXV?V=WD)^#c3})dTgw~2 z=Uv4&4GBN1nXM+h`<#`q0>+YU9SuM%aD%m1tI$xFL>T0yI;qw3fk>DlZ9=37rPB1; za)I7_3D6PS?^0LjM`G9AX1#=-EIWPZDxF-1B{g$p`uD1lEDIUhJ#`YeGn5kPNnzEO zmai=>g;n!&$oP_QFMARt*ja{cSRr0vzJ0?6BHaydEgK>EfEu`|zYu=;D+3C80vNvT z8U8ITnZ(t*!G^yLg+$OMUAzdNTP9U5$#3e17T+ZC_=@<-GqRL=i-vPMX1uSb*^{$| z!6-8z|n)-vclhDTg1OEwWtKraI zO$%@f2h4jjltGf2S99xA)_$zF6O18IkISh~EG9gy56jDX_b*-dp?MrPi!RK4)!q5* z&zT+RH-)zB1@(RfHh~J_8>*SYjn^z>i}qu|XXU0JuYX0SB`+5VBfCrgNR)ann>Z;} z9Ftcp?DPd0KBZ0N18ljqWByBlt4@B+INv1Cq;5qS_ms}w^T%-utLL zZZmGboqwM>%+Hip2xOU(zwSZE%vLjHswS3ICsHS~CS}rRrWm>|bW;H^zpnY76MZ!C zQ~daE3f58l!;Zon@hAHJ8XgCWAD^f~MIF21P67LsUi{hN48gKmSGXx^t z?)?W_*o&R2b)vQ8x6CY`>|u=l| z(fZisW1bQo4x_HkoxF%WcJae_h?Z+x?3PsOAL~+<4lk+?%VY&{)Z>KtRt8SHQ+=^K zBQ%0-bj?7QqVyopeF{%FFW#%ZBYJyge9 zk4n^KYLS;*@yKP^Fx~YYirN4Bu~G~3_nai9i-1Hl(fjCh4OVTKIa|`Nl-)&h-pttI z`r>_x4>ggyb^G3CcY9OzsS6Hh1^oRfRQ3jzkqNF`yeoR<%N9GahegerS$ z+`2*;D4X1;ZB2{zQxItVce3a|4YSd6+q4mV`A;F^sH=jDqrI+ZdyU4Eb0EwUWs zN=PY|SHbqgUJm?R>Qn0-ZpWL!EI%P%#eIE=ycGMGdg;3jo2XShl+=e^c@3I{fpCI7 zQiRFY%*LgUf`W9pE$rsI!2#3B$n&FD`rj$-Qa|0Qoi&}&@_f<=MmQAd^#k@(>B0p@ z+9&?LStVuvEHmfjbBCGLYg0luwPHi_b5%ULjIlyD#8|xyYnq;AknVjG+OBCGAjWWW zFL{8eBxtM&mLSW*^5L_|nI)vgy|y4Rq^xMuFj46Z^c`C*UHuY+i?5S)rP;tDt^ECx zU6hxwAZ@={%ve9FcJxC!tZ^ys0j+Hf+>M1c_sgnpo#V}%#5iYE@SO@pS0J&5qb3HO z!e&fBc9Ch7>SSfzs1kO;tWpgfBSP=%-Dc;KnOg5K*po+ZX~QRLEzR0Pxxc$CL;}sb z^CfTfE<5&AvF)h3ij^O}-)sn5dtPh`wb}oj@|JstB@(eADZMVd=O*lo)Ulnt9^g@A zz&*k#pUgHqB@eQs2w5&V&EfqPX zL3MQCxxN)6kzUb{af^q>=rjoXRKO+fRf1d*B``VJsQ>*^&!_xf0~{Z@aO1c;1eMGr z2WM|c&5@C$ItD&>i?P7-)qnf3@CSw=$RpMvX$3 zxrVkLY_L=*HA6p6VRrqjX-G^}(ONk*zo^@k zqXMp7j3ew%%KhwId`S6Z4vwD^k_UD<&e>!OO9h>xBY~G>?WfHQKiy`!%V@vwPD(kN zP{R6r)ckZ^hN)cH-f*r13Y^BH$y4*VJ0(ul+Vv$_Giem7Brk@}7C*L*o(D+pLpD=W z1)dLx`-)YvhZS#TDepJ7Hi3^4F+U+Lf^duFVjNX?0+3Vf-Pl4GOlCLf>LC!xcExG? z_M^+xkpnie>El4ZZow$!(X&iHvwtvf(Ol7(x=mSm zt@w6qWSg&j)u_ROdk%>jDssLO`Cjp}8MJ=UoBY9S#QAXS(qjv%dAeMwu7&?0{4i8K zHx8mx`~1@!Hi}X*S>BLX%g0zc+R*#P>`AgC<@wywbT-56baUhRP9K-?Y9q1Ks{)vW z7(>AoGpWA!%9l!?i~Bh<1diH26_m5~1A7xmG}{+Z5qNE)BWGfQH*xcZoKlzYV)fqN zbNb51%-n$Jn7E!Ija|Pde0+_vy<7D@CL2MEo(j7c+4Q0(xEHxCEJx=3B9I(Ml}1~O z{d|Lbb5dKYa;n@xn@l-O?pR3jNGLF;HdJqX!Bi7x9!Mlta~)(RiQY-Q6fq~6WsQCo zqXNMLc=A*X?SqmQJ8}~KS&>6*I5OkBZHX3I06Vu)p z{eK?Q!z%Jh^6DNo;|>)wQs2b)YcqfJG<2a+I<4UvtSMd-wNU~*Cut-YNy9{nwT4E) zA=^8D6}U38^!8MmWh~jh@!Vw^wu56si7>tAi0csr{VcNMk?Xdz-3aVv2J1hyq<vN`EO1S3_@buCu>4y z`00hdXA2@p2(QB4^Gi`$2aM5Sl;B`b2Z_^EZY3bPXTW#7n=EcI&7rnNo1&z>Kpjy$ ze6`{#6Cm})=mu~z921A@;$W(3>SW5W~PwzG+&w@ z@$ljL(TW3o+^?Ak*p!0z)+O~84ijU|7pcKSrZ=F(crysL5Sxzu+oTxAh;U7scQ}c{ zNF`K5OB?nV^-jY>lNG6Mc&c^k=}*B z%K?hljoVd?5Jh9Ack%YfZqyRwFEH^n_DZiULkdNBK<3q2sSG~u;5ehY5U)EIDpxv| z%qU~0|5rp9HIGgkaxQ8v;ya%+VM7^gM6@gfk*@7m@)hQt%Ik&%M)8K?pSul+^3bj| z=@IpsuxKVtex56;Pcx;(56fho#yG}$S;*H_YiXD9?+SeuCsmuYMp`(=8+8no$`(6@ zZ`}J6jEfYbDZ#|Tc^`LA?*m%yr(Eq7e54%(dZjMIqDI{^n>|>Ys@w1RS%oTM_s_B! zuZ5NWiZBu$snV5pD8`Ih_~joewFM{fN;s|4Qr&cp z{1h}6Z>=tt>0DL3qiUL}AXnYDp(0Lu()90{NTT&gFm0Fsb`eUt5KS5$l!()WZ~D6TMu)*dpc=u4v`!wA=T0})=Un{jL?DScPa4RQB^ zHN`EY2epb~>Ue!dbjwD5`*(UxQaqFR`FO6BFPiGD!Wl(NBYz6sZV2M$Z;Pw3Ov`FF zQ5ocYCQ*Iz(w$(h;pge5Ry(BLHM9%W7W1ho6qQ?ZFIsg4x6uB{wTAkoJV%4$J3 zmOvY`ep8y=?3Z2aR&zr8Y6Rn(ICC6n0&F=@P7&7)wb$I#kxLM(ty02h*LgO6+7J)2 zA{a3}Xihpf886L*QKKDDsXo&w*9(tj$9pV_Gt{AhDZk_QAWb8xh2!r({H1WT$9a7{ z70u}vDf;yQ_cSVP-3EbgUZrfrCZJP5YTS>4EgF@#2+-G00;Y`S^dC4R4;Li2gvqHW z)m0~&BqWQRl2q=?@5czJlNx9%Z43^&#N^>>68&B6m>n?d~sS zSB40iOoVaECI5(2++qnlBCeh7EEwT-t|m5dRhY{KKKP#=KjCeD1e+sl>Fzj82A(J9%=sA* zyqW!CSVz07N9N61sZKSkPrJ<=E$?S0|o&A@kGU0*N|28>pV;=@TYV}Yt zV)ZZxEK{5dy+x@$CP(}`w_^C}`%PC?N*6ZaqxfwcPHmP5s>SwGG+ko@aV%O9A^o(8 zZd>9*)E~K7VkQmkw+M6xU%q1&a1i1Qe33#FH&cp?K@T<+riB;9e#QHaN)*lrSsYrq zRQAOlzUy_cy&<9w+$v%K1a3@=(2ZqnerDa9YbnACGPoeqbCa*4~#Ejb?rW1}|NS8;7$m zi)Vz?XRX4JB!e6+8>^QSW0dxBb^W8r?37<+$?&%aOd4PL`c!I~D1;cz8>|?V)cBBV zqTRU;*TXA4PI)HTpzj2wzm7y%>N6^|tt~HuJ%Z@@0fsYv`?{Z21tGUhH@{{ymmjv; z@4a+wXXwJ7id?tS?JBI+_p_26AFx1It+giEz7KO<`wN+FE`|av&b^@}KBu!CU)zM7 zFpu+4=hp&}6fkQzv|36P8`}dE9Sgf?6wghOYZhfNY%4GOBYTidU|u>dVxM|CA2IRX z16TLq#*86yQzxWBrtKWmG6W>uD6@l&-?n!bUJv{1G0Ps>>TsS+Z{OTra729I zcR$xhXsEtgZrvI0Uw-@LHqpVq{|34B6d7N#;^_MqWQdUtOc~3$zyHS@G{Ub8u(gnoTn@QNTN5^Oe+qJ?ch}@x=2Kf zF{hM869!P-!}0`m7!Mg9;l{QD_o{D{@r-F@Wn|Momxpx+QW{xF7*qu#G65*yU2;Z5 zf_c%M!{5^Q0#Fb!gn8u98xgvq+wNak4G1$J^mQk_^9wPf`m)Qd>d(x-)rE+rc56F1 z$kVA4yWeN7ai#Q#3PhC_Pt^hrel}`$^tbo#!gmU6g)w6eW0JJjiMX$rEY@JRomdbw zorQfBV$PiXQMdhAws5pRHyEVco%?)BCHBGH8l^HJaLH%?&~@2uU*4-mpx50CYYY8r zk*LsR;_fukbni56*s+wILe12!k%#T(PUu)dk~+IWh3qfevHFdKF_yTDQ)ds&S{9xU z2HB%EL@)_r+Pm@Nrmx0d@s8CgoTD@-q_GR$)p?B!s@MLtoo={hDbt=VoF`6@kgXBZ zqm}rg0*FPol4E?!Db8;g+?bUZS=9W%T&<>qKWo_|KLdA>TMr2dQMjS! zdpV=076&xwQaO2(qI1^_3!;jwqM%Edl5W}M=D^@ktrL8+r*Ux3CvT`2X|)V}v8gOC z0;WmG{QMGyf9pMs*{x;0`Z6Ercnu=o@s|q3Fss7i(yU(-7_Aq0d_cJzZ9mNAvv{x% zcvw6oYx-_ex)N+-ySgtnwIc7QqM2x+0mMU(W_2iyc-S26k6>2aW^VlhXC;n)kk3 zw>in(%RTX%W0`;it);01+*%TNe=p?~s@_H6`t>bUM6Ra& zAx-udt4KYzc;pE}irDXhRr&o2@BHfz4Xv(MZ)7vye!tla)y?v>y0IN4*seOAWwL}J z#&QuJdmoKWBssOuHyqb3Q(UjO_NcUBa~v78mUB7Hrtt&AS>H~bx<5Ml@Cqe;=nD&F zW2rU{ublB!$jF}&l6d!5UfMmkO#t1z=1g^|b~P{H3Kmk>(D`gQgL7|fXH zo}-$MR`FE!dqugV1;$j=^6pF>HB}b|n5Og)RYDs35l=uft}kK)hqm8&m)T}&(C@tb zW25?4pU+I$+J2S}u_y5wQJ_~8UXm8m1gMd5SJT$L(z_<^hW#Ri$$)Xg zB2&Tl{@liP9h1iMU99vyk^mnvD~2?;Kb~FOytnhV^OsiP*$;{+O3Qb# zcG}wpvzO>=G&CPc?kQgMznQ^?8Bf;ih24U%M!7zfz;Xr0N!zaw^DMHj-x?}DKhZ#U7`q)AM;P!Pqf&{d4$zxs1ZBGdRhY- z1Q!OHk@_7l(bb=?>PK6t_X(|2{1Z?woQ$Ldf0_s1Kb;7t9ya60xxz2EgfM7c8biK0cq@A0lns@n`!j$#`jH zPMZMT0dLh~&Sd-=o=0j`H~P4l_53*GIqRLYQW zxpHskhj4e#V~=gI&koj|<8S))_1^r7Y%?B?M`L+Y;)H+P%H-laGgVesG+3!KOS48@4MR*n)TcU>SK5b^_`$KxGnn{MkBymRX zlaGeCzS`8@B(X8y3%Brn)Q7BA1dQ47@k0X)yh~De5ys!T2*U8iOzMXOIIIx_ikV!T z;w@|OY4KAn!7WX5w+LvP*Bry|t==N}+8t`_5TM%HX|bFfUcMoE{h`HW;qq`*&tytf zQ738f8hrOdGP<_%+Fugc2kh?VCq7kKD%dr%p4RBf9Y-aNOgP4$_FD3k{_~Raq8EGk z-iE!noXFS$>c`eRX` zqf=qN%x^oNYvKu;=W`gFOw^t0N2z~U=|Y<*c=`)hZ@)!lFoxKvd=grGK%%01m%rRe zyYa?vo1q3)gDZ5cZT-h}+`p_t$E?XsS;SmTTilq*?8oc9SCU(Upc!fhZ;P-m$>I7+ zAu^x?KRgE&_Y_RlwjC}n@keDkW$yf9`cd#2TsjI}+%O22f2GEM=}*MFQ#ms10>N-A zwY@3$iEj#~^xr|hG3!+`i-she=G;&D&5)eG(DBDJ%z5a&%fM9pMuQ& zPm^zDx2!G*%?oQK9uUrgJfht{Jg}UFcm(Zgeq9%mi~!))#T04kP8Ee0GW%_dpTcLR zd;M-s+1L;3ae23BE$Xj~3`R)7I3;nTGSyg7*1-83v2p!&aJ8wk{m${uapke$B<)0Gb+bjwE54nSj{Tq?81gQ7WWL1D8gyWI-?2`h2B`7p|3Kr z?O=Qjfl}>5K4fummPf5So)ak9`#{A7zZm}ZT7|5geJo|##?d#@j0^rwQ(HK>CSv3v z^yZ{u#39$?wmqlJb|pTwDSI?&wRsB`-j$=gujr1I4B)l5w$*&_e(@1QPP)}DW$t+I zl+$V^YQxHxk7Kb>$9E@Gi$9)f6vv9fmS7`$&HNmDGFo!X4w5UR29pGAw0uPPTY5}% z40VG_6mbcu8+weRwNkdHv%jIA{C1?{Hl^n`w-E1Swt3I2EquX}Z3Eg&OVn&}u3?@- z6eCZe7V+;Id&qnezK1FC zj8Jkvt(}JzCdAXn@=Y7nitAvCl<@>N-+1yB1<5TL*=Wbs#HL`y{1um4!_2dY(D$cw zD-&lRaSP)T!R!+Lq@@OFF&Lhk`Kwu?e<|vj@DN=#&m6_gs{Oi|bGx8<;aF>0C{`m` zTXI0i`f&A0dUO*Jjs;m-Nlm@)pcJOVB~6)8D{n|{Q){p~tUj!C`+OAVMC>7yN5m0H z1bx+cgp7KIQxxbj?o@oR)<fPUmEeB{$%*6)^2M-qeyg)le20AP&6~o2e z%Ms@4in&mAEfgdEr^)^&H#`EFqnoMpbk zLh5J!JEs$YFC894{)E>Gk>mV5LdBSnn=h;MBs6*Z=qV&l>o5LVGDNFzjXlfT^Z#j-mz+0NwoSw8P`NdaRmk+&hd=T4j= z3X_V1|Dd6pPY$mrko0qP{~jIRie{9VhJ`G-O5Xl@D28Xn){-P)(TexyP!Am4WqByE zd5X{$jMWbFq2~bqwnuQ6O%?D%in=o}0sWm(T{f33mWNuLB=7PnU%rB^xuw8-_NU)2 z)h*}CAMJvc>R&q^vmC?7VD*CP8HQ2Tyz8^(LmijY=Q5bMg9N10hH43fIel678tmIM zZNr2T3bBMpA>U~Jl5<_j+xU?FeEtbVcOunC%k)o0-v&~P>yqY5Dm4<7^@5b4)3YC` z-jz6&mpc`IvnOXUj#8N+buRW#X9;h)2)BOp|Gs!wq=j*O-c!;8oB9nobmWNNIx+{T zo|t|xs_^*pqyeWiq{X3|rSrg$tvJ|ZD{}7GFna#S$70*h>hfpD!RH>7YJ~Ysm#hX4 zv8q8oWHuCL3=evpmA@Q3%Q~u+*{fm_aAwx%p-JeeSR1@>Q?D>H(~W;Dk<*d2B~Tsf zAppnb*ZQKeNMpz{VSg?Q*GzU+#ZVSPv#KJ#Uta_$Cqc59_7I+e$`4pw@XJ1^ruRKC zY~>-gytf8nySXz zx_{)Z39eJ$;cmzL^*=(sKsw}}{&o5G%ISjR=!pzrdgjQmnAz};l$I==yHk48^v00e z?xj`h@QE`*Jt|CIwV~3cf6H(Y>uXKq-WtAYe-~d#QF%d;k&4RqkPU?7_yl9g0t5M~ zB7K{F7yQw{?IYugliJt)PP6+NniSJ>f$R%L-!MUfMX`m3^{usnGFin=n!EnICF`0t zZ=^%jW+RtOJqU?5+)k0DvIK|9@>FGp_Jqh7mUA3waBE-+uX=le-;q_8>t&{ix;3DX z5X$c2Bt`;QDL(YI-8sB}!yh?lmdoenCizihxRyvXPhDD~bL4j$Nk&hCai!7TnN^B= zDhBs&uSpG+J<{aD4Nr(Q=&I4=YlC9={Dq%}-uZ%9lbrKW+|pW??Ed?*)EJJX^KVmH zNqUAFrx6GuZ|rnyta(~ihK@fpmpbvTZk7%Cd$GBuQXitdPpXTd=w@%c={PlZ=pQk5 zxPd!5A4iY{1kPqOv^B)vz_4jqi)iCbD4lAbu><_k-_OPl;6nf4~;5b;VlO){$`HojkxQ2G&GxNd6_D_CW1}9BA z+3sEB6F;>(jZx4(aavG8FiLVR0Hr}+l%Fm!)H2@R2sCPC5a*;;`EjGw1-qby=!=>W z;x6|Nw%Uwc?NvUUwLCrYgplxVE^PEfqB%sGrpZaMNAu@J8760U#WG;hME6kLyd6N7 zJ}1~w$u1Ob5_S(cg&);2&I|p3{UydEYK_$nA)0tw^mw8}b;6{j&UYcBvL>SV`X1i5 zA!qV`;;XTOK-LY%ndFd*sQCQSnTv?e1f=5p=a1?W75YD~Ku!>Z6Z#V40s**_9&!;g z1))4I-UD(&xHw;65HL3n=mo|F1abiz=JF65;0Ry7#|?sjAW8WJh^~Y$Q~|i5P%f?{ zKp`T&z>8G?ZXN(P_=OcHfD_8~-xvT0=H><``TnEgU*cR~=)W)?FyI9Sc%}{lCyhO; zfW6QTcSGy(=gfY7AQ@Bj7@00n?KxnJ-ELm}KRF(`l=@Y4LVQs7Gr z3Ve3_g+2%u1oFQr{a+uUKoH<1PY4gszkGx~C+MX@E)bOSWgekG9uPFCs_3~CUKSb@ z^js(Z%?ZT$Pe}e7d-jkU0!V@@epd0488-yN^Dm1a=)Xz<3gY1cBq{%+;zjoXo`tzy zT7-gu;D52@f^dV9a-LPZEJy$kCl?Ro1!*2m=)W-l2=XsE01xOz5CA;SZoQ<$!~G2Y zkB$GEEFLK6C|H1%({~zp`&41_n**7rYzcJWz)StWVMIxWE=PS%!EanFC zKwf&x4dQw^<$%!V&Enc9K)9(gg*DwOEOR{z{}1C zKJOBs|Mr*@_`G$1{$m67pZyIAg}&@2AoRIs{v-H*1qyI0=n^hbD delta 30975 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 E1CLDY%K!iX diff --git a/certora/stata/specs/StataToken/StataToken.spec b/certora/stata/specs/StataToken/StataToken.spec index 479816b3..ee1c3ef5 100644 --- a/certora/stata/specs/StataToken/StataToken.spec +++ b/certora/stata/specs/StataToken/StataToken.spec @@ -102,8 +102,8 @@ import "../methods/methods_base.spec"; f.contract == currentContract && !harnessOnlyMethods(f) && f.selector != sig:initialize(address, string, string).selector) && - f.selector != sig:emergencyEtherTransfer(uint256).selector && - f.selector != sig:emergencyTokenTransfer(address,uint256).selector + f.selector != sig:emergencyEtherTransfer(address,uint256).selector && + f.selector != sig:emergencyTokenTransfer(address,address,uint256).selector } { // Assuming single reward single_RewardToken_setup(); @@ -137,7 +137,7 @@ import "../methods/methods_base.spec"; && !harnessMethodsMinusHarnessClaimMethods(f) && !claimFunctions(f) && f.selector != sig:claimDoubleRewardOnBehalfSame(address, address, address).selector - && f.selector != sig:emergencyEtherTransfer(uint256).selector + && f.selector != sig:emergencyEtherTransfer(address,uint256).selector } { preserved redeem(uint256 shares, address receiver, address owner) with (env e1) { @@ -152,7 +152,7 @@ import "../methods/methods_base.spec"; requireInvariant solvency_total_asset_geq_total_supply(); require balanceOf(owner) <= totalSupply(); } - preserved emergencyTokenTransfer(address asset, uint256 amount) with (env e3) { + preserved emergencyTokenTransfer(address asset, address to, uint256 amount) with (env e3) { require rate() >= RAY(); } } @@ -170,7 +170,7 @@ import "../methods/methods_base.spec"; f.contract == currentContract && !harnessMethodsMinusHarnessClaimMethods(f) && !claimFunctions(f) - && f.selector != sig:emergencyEtherTransfer(uint256).selector + && f.selector != sig:emergencyEtherTransfer(address,uint256).selector && f.selector != sig:claimDoubleRewardOnBehalfSame(address, address, address).selector } { preserved withdraw(uint256 assets, address receiver, address owner) with (env e3) { @@ -198,7 +198,7 @@ import "../methods/methods_base.spec"; preserved redeemATokens(uint256 shares, address receiver, address owner) with (env e2) { require balanceOf(owner) <= totalSupply(); } - preserved emergencyTokenTransfer(address asset, uint256 amount) with (env e1) { + preserved emergencyTokenTransfer(address asset, address to, uint256 amount) with (env e1) { require rate() >= RAY(); } } @@ -216,7 +216,7 @@ import "../methods/methods_base.spec"; => (_RewardsController.getUserAccruedReward(_asset, reward, user) == _RewardsController.getUserAccruedRewards(reward, user))) filtered {f -> f.contract == currentContract && - f.selector != sig:emergencyEtherTransfer(uint256).selector && + f.selector != sig:emergencyEtherTransfer(address,uint256).selector && !harnessOnlyMethods(f) } { @@ -256,8 +256,8 @@ import "../methods/methods_base.spec"; && !collectAndUpdateFunction(f) && !harnessOnlyMethods(f) && f.selector != sig:initialize(address,string,string).selector - && f.selector != sig:emergencyEtherTransfer(uint256).selector - && f.selector != sig:emergencyTokenTransfer(address,uint256).selector + && f.selector != sig:emergencyEtherTransfer(address,uint256).selector + && f.selector != sig:emergencyTokenTransfer(address,address,uint256).selector } { env e; @@ -301,7 +301,7 @@ rule getClaimableRewards_stable(method f) && !claimFunctions(f) && !collectAndUpdateFunction(f) && f.selector != sig:initialize(address,string,string).selector - && f.selector != sig:emergencyEtherTransfer(uint256).selector + && f.selector != sig:emergencyEtherTransfer(address,uint256).selector && !harnessOnlyMethods(f) } { diff --git a/certora/stata/specs/StataToken/aTokenProperties.spec b/certora/stata/specs/StataToken/aTokenProperties.spec index be0f9fad..55d4e705 100644 --- a/certora/stata/specs/StataToken/aTokenProperties.spec +++ b/certora/stata/specs/StataToken/aTokenProperties.spec @@ -193,7 +193,7 @@ import "../methods/methods_base.spec"; !f.isView && f.selector != sig:redeem(uint256,address,address).selector && f.selector != sig:redeemATokens(uint256,address,address).selector && - f.selector != sig:emergencyEtherTransfer(uint256).selector && + f.selector != sig:emergencyEtherTransfer(address,uint256).selector && !harnessOnlyMethods(f)} { preserved with (env e){ diff --git a/certora/stata/specs/erc4626/erc4626Extended.spec b/certora/stata/specs/erc4626/erc4626Extended.spec index cbf95cb6..c84370b9 100644 --- a/certora/stata/specs/erc4626/erc4626Extended.spec +++ b/certora/stata/specs/erc4626/erc4626Extended.spec @@ -235,7 +235,7 @@ import "../methods/methods_base.spec"; f.contract == currentContract && !f.isView && !harnessOnlyMethods(f) && - f.selector != sig:emergencyEtherTransfer(uint256).selector && + f.selector != sig:emergencyEtherTransfer(address,uint256).selector && f.selector != sig:deposit(uint256,address).selector && f.selector != sig:depositWithPermit(uint256,address,uint256,IERC4626StataToken.SignatureParams,bool).selector && f.selector != sig:withdraw(uint256,address,address).selector &&