0 txs
24 calls
constructor
constructor(address _erc4626)
functions
accruedRewards
viewfunction accruedRewards(address) view returns (uint256[] rewardAmounts)
adapter
viewfunction adapter() view returns (address)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
assetInfo
viewfunction assetInfo() view returns (uint8 assetType, address assetAddress, uint8 assetDecimals)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
exchangeRate
viewfunction exchangeRate() view returns (uint256)
getRewardTokens
viewfunction getRewardTokens() view returns (address[] rewardTokens)
getTokensIn
viewfunction getTokensIn() view returns (address[] res)
getTokensOut
viewfunction getTokensOut() view returns (address[] res)
isValidTokenIn
viewfunction isValidTokenIn(address token) view returns (bool)
isValidTokenOut
viewfunction isValidTokenOut(address token) view returns (bool)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
previewDeposit
viewfunction previewDeposit(address tokenIn, uint256 amountTokenToDeposit) view returns (uint256 amountSharesOut)
previewRedeem
viewfunction previewRedeem(address tokenOut, uint256 amountSharesToRedeem) view returns (uint256 amountTokenOut)
rewardIndexesStored
viewfunction rewardIndexesStored() view returns (uint256[] indexes)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
yieldToken
viewfunction yieldToken() view returns (address)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
claimOwnership
nonpayablefunction claimOwnership()
claimRewards
nonpayablefunction claimRewards(address) returns (uint256[] rewardAmounts)
deposit
payablefunction deposit(address receiver, address tokenIn, uint256 amountTokenToDeposit, uint256 minSharesOut) payable returns (uint256 amountSharesOut)
initialize
nonpayablefunction initialize(string _name, string _symbol, address _adapter)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
redeem
nonpayablefunction redeem(address receiver, uint256 amountSharesToRedeem, address tokenOut, uint256 minTokenOut, bool burnFromInternalBalance) returns (uint256 amountTokenOut)
rewardIndexesCurrent
nonpayablefunction rewardIndexesCurrent() returns (uint256[] indexes)
setAdapter
nonpayablefunction setAdapter(address _adapter)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner, bool direct, bool renounce)
unpause
nonpayablefunction unpause()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
ClaimRewards
event ClaimRewards(address indexed user, address[] rewardTokens, uint256[] rewardAmounts)
Deposit
event Deposit(address indexed caller, address indexed receiver, address indexed tokenIn, uint256 amountDeposited, uint256 amountSyOut)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Redeem
event Redeem(address indexed caller, address indexed receiver, address indexed tokenOut, uint256 amountSyToRedeem, uint256 amountTokenOut)
SetAdapter
event SetAdapter(address indexed adapter)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
errors
SYInsufficientSharesOut
error SYInsufficientSharesOut(uint256 actualSharesOut, uint256 requiredSharesOut)
SYInsufficientTokenOut
error SYInsufficientTokenOut(uint256 actualTokenOut, uint256 requiredTokenOut)
SYInvalidTokenIn
error SYInvalidTokenIn(address token)
SYInvalidTokenOut
error SYInvalidTokenOut(address token)
SYZeroDeposit
error SYZeroDeposit()
SYZeroRedeem
error SYZeroRedeem()
creation bytecode
0x60e0604090808252346200029657620000329062004d1d8038038091620000278285620002ac565b8339810190620002e4565b815163313ce56760e01b81526020916001600160a01b038116918381600481865afa908115620002a2575f9162000260575b5060805261013460ff19815416905560a05260015460ff8160a81c166200020c576004918160ff80869460a01c1603620001ca575b5084516338d52e0f60e01b815292839182905afa918215620001c0575f926200018c575b505060c05251614a1790816200030682396080518161146e015260a05181818161059d01528181610d3701528181610da801528181610e960152818161132401528181611789015281816119130152818161196f0152818161199c01528181611c5a01528181611d130152818161259f01528181612d6b015281816135460152614134015260c05181818161086d015281816113db0152818161174c01528181611e1d01528181611e8b015281816125c0015281816135e9015281816139c70152818161426001526142be0152f35b620001b09250803d10620001b8575b620001a78183620002ac565b810190620002e4565b5f80620000bd565b503d6200019b565b83513d5f823e3d90fd5b60ff60a01b191660ff60a01b17600155845160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498908390a15f62000099565b835162461bcd60e51b815260048101849052602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b90508381813d83116200029a575b6200027a8183620002ac565b8101031262000296575160ff8116810362000296575f62000064565b5f80fd5b503d6200026e565b85513d5f823e3d90fd5b601f909101601f19168101906001600160401b03821190821017620002d057604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126200029657516001600160a01b038116810362000296579056fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c90816303eadcfc14612e8d5750806306fdde0314612dc6578063071bc3c914612d01578063077f224a146121fe578063078dfbe71461207d578063095ea7b31461202e578063128fced11461023457806318160ddd14611fd257806320e8c56514611827578063213cae631461165457806323b872dd14611492578063313ce567146114375780633644e515146113ff57806338d52e0f146113915780633ba0b9a9146112a55780633f4ba83a146111995780634e71e0c8146110935780635c975abb1461105257806370a0823114610fef578063769f8e5d14610dcc57806376d5de8514610d5e578063784367d614610ce15780637ecebe0014610c7e5780638456cb5914610bce57806384b0196e14610a985780638da5cb5b14610a4857806395d89b411461092e578063a40bee5014610828578063a9059cbb14610754578063ab1da79c146106f3578063b8f82b2614610650578063c4f59f9b14610600578063cbe52ae31461054b578063d505accf14610303578063da88ecb41461022f578063dd62ed3e1461028a578063e30c397814610239578063ef5cfb8c14610234578063f8b2f9911461022f5763fa5a4f06146101e0575f61000f565b3461022b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57602061022161021c6130c1565b613529565b6040519015158152f35b5f80fd5b613198565b61313a565b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461022b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576102c16130c1565b6102c96130e4565b9073ffffffffffffffffffffffffffffffffffffffff8091165f52600360205260405f2091165f52602052602060405f2054604051908152f35b3461022b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5761033a6130c1565b6103426130e4565b6044359060843560643560ff8216820361022b578042116104ed5773ffffffffffffffffffffffffffffffffffffffff9081861692835f52609f60205260405f20908154916001830190556040519260208401927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452866040860152858816606086015288608086015260a085015260c084015260c0835260e083019183831067ffffffffffffffff8411176104c0576104539361044b93604052519020610409614481565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220614562565b9190916145ea565b16036104625761001a92613b37565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b3461022b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576105826130c1565b73ffffffffffffffffffffffffffffffffffffffff809116907f00000000000000000000000000000000000000000000000000000000000000001681036105cf5760206040516024358152f35b602490604051907f88a505610000000000000000000000000000000000000000000000000000000082526004820152fd5b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5761064c60405161063d81612fa5565b5f815260405191829182612f38565b0390f35b3461022b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576106876130c1565b61069081613529565b156106ac576106a46020916024359061411c565b604051908152f35b60249073ffffffffffffffffffffffffffffffffffffffff604051917faeabe718000000000000000000000000000000000000000000000000000000008352166004820152fd5b3461022b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5761001a61072d6130c1565b61074f73ffffffffffffffffffffffffffffffffffffffff5f541633146133a4565b613966565b3461022b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b577f01000000000000000000000000000000000000000000000000000000000000006107ac6130c1565b610815600454916107c360028460f81c1415613421565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809416176004556024359033613cb5565b6004541617600455602060405160018152f35b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481855afa908115610923575f916108e4575b60608360ff84604051925f84526020840152166040820152f35b90506020813d60201161091b575b816108ff60209383612fdd565b8101031261022b57519060ff8216820361022b579060ff6108ca565b3d91506108f2565b6040513d5f823e3d90fd5b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576040516006545f8261096d836131d5565b91828252602093600190856001821691825f14610a0a5750506001146109af575b5061099b92500383612fdd565b61064c604051928284938452830190612edc565b84915060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f905f915b8583106109f257505061099b93508201018561098e565b805483890185015287945086939092019181016109db565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261099b95151560051b850101925087915061098e9050565b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57606b541580610bc4575b15610b6657610b38610ae0613226565b61064c610aeb613308565b610b4660405191610afb83612fa5565b5f83526040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e0870190612edc565b908582036040870152612edc565b904660608501523060808501525f60a085015283820360c0850152613107565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b50606c5415610ad0565b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57610c1e73ffffffffffffffffffffffffffffffffffffffff5f541633146133a4565b610c266144f7565b61013460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461022b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5773ffffffffffffffffffffffffffffffffffffffff610cca6130c1565b165f52609f602052602060405f2054604051908152f35b3461022b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576020610d1a6130c1565b73ffffffffffffffffffffffffffffffffffffffff9060405191807f0000000000000000000000000000000000000000000000000000000000000000169116148152f35b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461022b5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57610e036130c1565b602435610e0e61309e565b6064359260843591821515830361022b5760045494610e3360028760f81c1415613421565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9586167f02000000000000000000000000000000000000000000000000000000000000001760045573ffffffffffffffffffffffffffffffffffffffff918216937f00000000000000000000000000000000000000000000000000000000000000008381168603610fbe578615610f9457848791610ee0935f14610f8a57610edb8330613f39565b61437d565b808510610f53575091602094917f01000000000000000000000000000000000000000000000000000000000000009360405191868352868884015216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c60403392a46004541617600455604051908152f35b84604491604051917fbfee4ca000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b610edb8333613f39565b60046040517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b602486604051907f88a505610000000000000000000000000000000000000000000000000000000082526004820152fd5b3461022b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5773ffffffffffffffffffffffffffffffffffffffff61103b6130c1565b165f526002602052602060405f2054604051908152f35b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57602060ff61013454166040519015158152f35b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5760015473ffffffffffffffffffffffffffffffffffffffff9081811680330361113b57805f549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000928316175f5516600155005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576111e973ffffffffffffffffffffffffffffffffffffffff5f541633146133a4565b610134805460ff811615611247577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576040517f07a2d13a000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610923575f9061135e575b602090604051908152f35b506020813d602011611389575b8161137860209383612fdd565b8101031261022b5760209051611353565b3d915061136b565b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5760206106a4614481565b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461022b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576114c96130c1565b6114d16130e4565b604435600454916114e860028460f81c1415613421565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161760045573ffffffffffffffffffffffffffffffffffffffff84165f52600360205260405f20335f5260205260405f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81036115b2575b5090610815917f010000000000000000000000000000000000000000000000000000000000000094613cb5565b91908183106115f6577f0100000000000000000000000000000000000000000000000000000000000000946115ed8361081595033383613b37565b94509091611585565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5773ffffffffffffffffffffffffffffffffffffffff60045f826101995416604051928380927f56e2816e0000000000000000000000000000000000000000000000000000000082525afa908115610923575f91611805575b5080519160028301918284116117b7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061172d61171785613409565b946117256040519687612fdd565b808652613409565b013660208501375f5b8481106117e45750506117498383613613565b817f0000000000000000000000000000000000000000000000000000000000000000169052600183018093116117b75761178661064c9383613613565b907f000000000000000000000000000000000000000000000000000000000000000016905260405191829182612f38565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80836117f260019385613613565b51166117fe8287613613565b5201611736565b61182191503d805f833e6118198183612fdd565b8101906134a7565b826116da565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576118596130c1565b6118616130e4565b6004549061187560028360f81c1415613421565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809316176004556118c681613529565b156106ac5760443515611fa85773ffffffffffffffffffffffffffffffffffffffff8116611f27576044353403611ec9575b6044358173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416141580611e73575b611d7c575b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116145f14611cc357915b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611c115747915b60045494828616936119ea8686613ca8565b11611bb3576064358510611b7a5773ffffffffffffffffffffffffffffffffffffffff16928315611b1c57611a1d6144f7565b82851161022b5782851601928284116117b7576020957fff00000000000000000000000000000000000000000000000000000000000000847f01000000000000000000000000000000000000000000000000000000000000009616911617600455805f526002865260405f20611a94868254613ca8565b9055805f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051898152a373ffffffffffffffffffffffffffffffffffffffff604051926044358452868885015216917f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d5960403392a46004541617600455604051908152f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b604485604051907fbc71f2ba00000000000000000000000000000000000000000000000000000000825260048201526064356024820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f53593a20696e73756666696369656e74207368617265730000000000000000006044820152fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610923575f91611c91575b50916119d8565b90506020813d602011611cbb575b81611cac60209383612fdd565b8101031261022b575185611c8a565b3d9150611c9f565b604051907f6e553f6500000000000000000000000000000000000000000000000000000000825260048201523060248201526020816044815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610923575f91611d4a575b509161199a565b90506020813d602011611d74575b81611d6560209383612fdd565b8101031261022b575184611d43565b3d9150611d58565b505073ffffffffffffffffffffffffffffffffffffffff610199611da6604435838354168561437d565b5416602060405180927fb8f86171000000000000000000000000000000000000000000000000000000008252815f81611e0860443589600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115610923575f91611e41575b507f0000000000000000000000000000000000000000000000000000000000000000611957565b90506020813d602011611e6b575b81611e5c60209383612fdd565b8101031261022b575184611e1a565b3d9150611e4f565b5073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161415611952565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015260443560648201526064815260a081019080821067ffffffffffffffff8311176104c057611fa39160405273ffffffffffffffffffffffffffffffffffffffff8316614781565b6118f8565b60046040517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5760207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b3461022b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576120726120686130c1565b6024359033613b37565b602060405160018152f35b3461022b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576120b46130c1565b602435801515810361022b5760443590811515820361022b5773ffffffffffffffffffffffffffffffffffffffff9283916120f3835f541633146133a4565b156121cd5716908115908115916121c5575b501561216757805f549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216175f55600154166001555f80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905083612105565b915050167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b3461022b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5760043567ffffffffffffffff811161022b5761224d903690600401613058565b60243567ffffffffffffffff811161022b5761226d903690600401613058565b9061227661309e565b6001549060ff8260a81c161591828093612cf1575b8015612cd7575b15612c535782740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff831617600155612c10575b506122fe60ff60015460a81c166122f081613627565b6122f981613627565b613627565b825167ffffffffffffffff81116104c05761231a6005546131d5565b601f8111612b6f575b50806020601f8211600114612a92575f91612a87575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176005555b835167ffffffffffffffff81116104c0576123876006546131d5565b601f81116129e6575b506020601f82116001146129075781929394955f926128fc575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176006555b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600454161760045560405161243281612f89565b600181527f3100000000000000000000000000000000000000000000000000000000000000602082015261247160ff60015460a81c166122f981613627565b835167ffffffffffffffff81116104c05761248d606d546131d5565b601f811161285b575b506020601f821160011461277c5781929394955f92612771575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617606d555b80519067ffffffffffffffff82116104c057612500606e546131d5565b601f811161270e575b50602090601f831160011461264a576125e49392915f918361263f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617606e555b5f606b555f606c5561257260ff60015460a81c16613627565b337fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f5561074f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006136b2565b6125ea57005b7fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff600154166001557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1005b015190508580612526565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691606e5f527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a925f5b8181106126f657509160019391856125e4979694106126bf575b505050811b01606e55612559565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558580806126b1565b92936020600181928786015181550195019301612697565b606e5f527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a601f840160051c81019160208510612767575b601f0160051c01905b81811061275c5750612509565b5f815560010161274f565b9091508190612746565b0151905085806124b0565b606d5f527f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8905f5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0841681106128435750600193949596837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081161061280c575b505050811b01606d556124e3565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558580806127fe565b9091602060018192858b0151815501930191016127a4565b606d5f52601f820160051c7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d80190602083106128d4575b601f0160051c7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d801905b8181106128c95750612496565b5f81556001016128bc565b7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d89150612892565b0151905085806123aa565b60065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f905f5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0841681106129ce5750600193949596837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0811610612997575b505050811b016006556123dd565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080612989565b9091602060018192858b01518155019301910161292f565b60065f52601f820160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f019060208310612a5f575b601f0160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01905b818110612a545750612390565b5f8155600101612a47565b7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9150612a1d565b905084015186612339565b915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05f925b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083168410612b575760019350827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0811610612b20575b5050811b0160055561236b565b8601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558680612b13565b86810151825560209384019360019092019101612abc565b60055f52601f820160051c7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0019060208310612be8575b601f0160051c7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b818110612bdd5750612323565b5f8155600101612bd0565b7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09150612ba6565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16750101000000000000000000000000000000000000000017600155846122da565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b1580156122925750600160ff8260a01c1614612292565b50600160ff8260a01c161061228b565b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b57604051612d3b81612f89565b6001815260208101906020368337805115612d995761064c9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016905260405191829182612f38565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576040516005545f82612e05836131d5565b91828252602093600190856001821691825f14610a0a575050600114612e32575061099b92500383612fdd565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b858310612e7557505061099b93508201018561098e565b80548389018501528794508693909201918101612e5e565b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5760209073ffffffffffffffffffffffffffffffffffffffff61019954168152f35b91908251928382525f5b848110612f245750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b602081830181015184830182015201612ee6565b60209060206040818301928281528551809452019301915f5b828110612f5f575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101612f51565b6040810190811067ffffffffffffffff8211176104c057604052565b6020810190811067ffffffffffffffff8211176104c057604052565b6080810190811067ffffffffffffffff8211176104c057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104c057604052565b67ffffffffffffffff81116104c057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561022b5780359061306f8261301e565b9261307d6040519485612fdd565b8284526020838301011161022b57815f926020809301838601378301015290565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361022b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361022b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361022b57565b9081518082526020808093019301915f5b828110613126575050505090565b835185529381019392810192600101613118565b3461022b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b576131716130c1565b5061064c60405161318181612fa5565b5f8152604051918291602083526020830190613107565b3461022b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022b5761064c60405161318181612fa5565b90600182811c9216801561321c575b60208310146131ef57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916131e4565b604051905f82606d5491613239836131d5565b808352926020906001908181169081156132c55750600114613266575b505061326492500383612fdd565b565b915092606d5f527f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8935f925b8284106132ad57506132649450505081016020015f80613256565b85548885018301529485019487945092810192613292565b9050602093506132649592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80613256565b604051905f82606e549161331b836131d5565b808352926020906001908181169081156132c5575060011461334557505061326492500383612fdd565b915092606e5f527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a935f925b82841061338c57506132649450505081016020015f80613256565b85548885018301529485019487945092810192613371565b156133ab57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b67ffffffffffffffff81116104c05760051b60200190565b1561342857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b519073ffffffffffffffffffffffffffffffffffffffff8216820361022b57565b602090818184031261022b5780519067ffffffffffffffff821161022b57019180601f8401121561022b5782516134dd81613409565b936134eb6040519586612fdd565b818552838086019260051b82010192831161022b578301905b828210613512575050505090565b83809161351e84613486565b815201910190613504565b73ffffffffffffffffffffffffffffffffffffffff9081811691807f00000000000000000000000000000000000000000000000000000000000000001683149283156135e7575b50821561357c57505090565b600492505f906101995416604051938480927f56e2816e0000000000000000000000000000000000000000000000000000000082525afa8015610923576135ca925f916135cd575b506142e6565b90565b6135e191503d805f833e6118198183612fdd565b5f6135c4565b7f000000000000000000000000000000000000000000000000000000000000000082161492505f613570565b8051821015612d995760209160051b010190565b1561362e57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b9073ffffffffffffffffffffffffffffffffffffffff91828116908115613960576040918251809581957fdd62ed3e0000000000000000000000000000000000000000000000000000000083523060048401521691826024830152602096879160449788915afa8015613956575f9061391d575b6b7fffffffffffffffffffffff915010613742575b5050505050565b8251905f808784017f095ea7b30000000000000000000000000000000000000000000000000000000094858252846024820152828982015288815261378681612fc1565b519082875af1613794614336565b816138ed575b501561389157915f929183809386519089820193845260248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff888201528781526137e681612fc1565b51925af16137f2614336565b81613861575b501561380557808061373b565b606492917f5361666520417070726f766500000000000000000000000000000000000000009151927f08c379a00000000000000000000000000000000000000000000000000000000084526004840152600c6024840152820152fd5b80518015925085908315613879575b5050505f6137f8565b6138899350820181019101614365565b5f8481613870565b6064867f5361666520417070726f76650000000000000000000000000000000000000000878751927f08c379a00000000000000000000000000000000000000000000000000000000084526004840152600c6024840152820152fd5b80518015925088908315613905575b5050505f61379a565b6139159350820181019101614365565b5f87816138fc565b508581813d831161394f575b6139338183612fdd565b8101031261022b576b7fffffffffffffffffffffff9051613726565b503d613929565b84513d5f823e3d90fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff809116908115613ad957604051907fdfbe7c82000000000000000000000000000000000000000000000000000000008252602082600481865afa918215610923575f92613a9d575b50807f000000000000000000000000000000000000000000000000000000000000000016911603613a3f57610199817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f491784ddb6af903db22df115fa8320b4b0b4fdca5e088f87ef5c178a31283e715f80a2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5f736574416461707465723a20696e76616c69642061646170746572000000006044820152fd5b9091506020813d602011613ad1575b81613ab960209383612fdd565b8101031261022b57613aca90613486565b905f6139c3565b3d9150613aac565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5f736574416461707465723a207a65726f2061646472657373000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116918215613c255716918215613ba15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526003825260405f20855f5282528060405f2055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b919082018092116117b757565b73ffffffffffffffffffffffffffffffffffffffff809116918215613eb55716918215613e3157828214613dd357613ceb6144f7565b815f52600260205260405f2054818110613d4f57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f52600284520360405f2055845f5260405f20613d44828254613ca8565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff16801561409857613f5d6144f7565b805f52600260205260405f2054828110614014578290825f5260026020520360405f20557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182811161022b576004549280821681851603918183116117b7575f947fff000000000000000000000000000000000000000000000000000000000000006020937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9516911617600455604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016918181168381141590816142b9575b506141eb575b168103614174575090565b906020906024604051809481937fef8b30f700000000000000000000000000000000000000000000000000000000835260048301525afa908115610923575f916141bc575090565b90506020813d6020116141e3575b816141d760209383612fdd565b8101031261022b575190565b3d91506141ca565b610199546040517f5c727c7d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092166004830152602482019490945290926020908290604490829087165afa80156109235782915f91614284575b509290507f0000000000000000000000000000000000000000000000000000000000000000614169565b9150506020813d6020116142b1575b816142a060209383612fdd565b8101031261022b578190515f61425a565b3d9150614293565b9050827f00000000000000000000000000000000000000000000000000000000000000001614155f614163565b908151915f5b8381106142fb57505050505f90565b73ffffffffffffffffffffffffffffffffffffffff8061431b8385613613565b51169084161461432d576001016142ec565b50505050600190565b3d15614360573d906143478261301e565b916143556040519384612fdd565b82523d5f602084013e565b606090565b9081602091031261022b5751801515810361022b5790565b821561447c5773ffffffffffffffffffffffffffffffffffffffff168061441557505f80809381935af16143af614336565b50156143b757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448083019390935291815261326491614477606483612fdd565b614781565b505050565b6144896148a0565b6144916148eb565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176104c05760405251902090565b60ff610134541661450457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116145df576020935f9360ff60809460405194855216868401526040830152606082015282805260015afa15610923575f5173ffffffffffffffffffffffffffffffffffffffff8116156145d757905f90565b505f90600190565b505050505f90600390565b600581101561475457806145fb5750565b600181036146615760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036146c75760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146146d057565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6040516147eb9173ffffffffffffffffffffffffffffffffffffffff166147a782612f89565b5f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af16147e5614336565b91614911565b805190828215928315614888575b505050156148045750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6148989350820181019101614365565b5f82816147f9565b6148a8613226565b80519081156148b8576020012090565b5050606b5480156148c65790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6148f3613308565b8051908115614903576020012090565b5050606c5480156148c65790565b9192901561498c5750815115614925575090565b3b1561492e5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561499f5750805190602001fd5b6149dd906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190612edc565b0390fdfea2646970667358221220ab71e61435ee0b824675e0999c269d2a4e63ac8d2cff056bdbbeacbe0c9351fd64736f6c63430008180033000000000000000000000000a3931d71877c0e7a3148cb7eb4463524fec27fbd