0 txs
4.8k calls
constructor
constructor(address _terminalDepositVault, address _terminalRedemptionVault, address _vaultTokenIn, address _vaultTokenOut, address _asset, address _decimalsWrapperFactory)
functions
accruedRewards
viewfunction accruedRewards(address) view returns (uint256[] rewardAmounts)
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)
assetScaled
viewfunction assetScaled() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
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)
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)
pricingInfo
viewfunction pricingInfo() view returns (address refToken, bool refStrictlyEqual)
REFERRAL_ID
viewfunction REFERRAL_ID() view returns (bytes32)
rewardIndexesStored
viewfunction rewardIndexesStored() view returns (uint256[] indexes)
symbol
viewfunction symbol() view returns (string)
terminalDepositVault
viewfunction terminalDepositVault() view returns (address)
terminalRedemptionVault
viewfunction terminalRedemptionVault() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
vaultTokenIn
viewfunction vaultTokenIn() view returns (address)
vaultTokenOut
viewfunction vaultTokenOut() view returns (address)
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 _owner)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(address receiver, uint256 amountSharesToRedeem, address tokenOut, uint256 minTokenOut, bool burnFromInternalBalance) returns (uint256 amountTokenOut)
rewardIndexesCurrent
nonpayablefunction rewardIndexesCurrent() returns (uint256[] indexes)
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)
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)
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
0x61018060409080825234620002d85760c0816200420a80380380916200002682856200045b565b833981010312620002d8576200003c8162000493565b906020926200004d84830162000493565b936200005b82840162000493565b936200006a6060850162000493565b946200008760a06200007f6080880162000493565b960162000493565b845163c3b6f93960e01b81529790926004916001600160a01b0391868b85818685165afa9a8b1562000451575f9b62000412575b50875163313ce56760e01b8082529b90888187818886165afa90811562000408575f91620003e6575b5060805260ff19609b5416609b5560a05260015460ff8160a81c16620003935760ff808260a01c160362000351575b5060c05260e05261010098838a52610120988952818061014099808b5216941684036200033e57865190815285818481875afa908115620003345760129160ff915f9162000300575b50161015620002ee578492915f6044928851968795869463975d8cc360e01b865285015260126024850152165af1918215620002e4575f92620002a2575b5050610160525b5191613d469384620004c48539608051846112a3015260a051848181610ab801528181610bce0152818161115d015281816114cc015281816119f1015281816122a90152818161283d01528181612e5301528181613258015281816136e3015261379c015260c051848181610e890152818161113601528181611e4d01528181612ea00152613739015260e05184818161044701528181610cb301526137f20152518381816107f001528181611185015281816114ed01528181611e6e0152818161289701528181612ec6015261375e015251828181610714015281816122ca015261280d0152518161124801526101605181818161061b01526107820152f35b90809250813d8311620002dc575b620002bc81836200045b565b81010312620002d857620002d09062000493565b5f806200019a565b5f80fd5b503d620002b0565b83513d5f823e3d90fd5b935050505082511661016052620001a1565b620003259150883d8a116200032c575b6200031c81836200045b565b810190620004a8565b5f6200015c565b503d62000310565b87513d5f823e3d90fd5b600183634e487b7160e01b5f525260245ffd5b60ff60a01b191660ff60a01b17600155875160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498908890a15f62000113565b885162461bcd60e51b8152808601899052602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b620004019150893d8b116200032c576200031c81836200045b565b5f620000e4565b8a513d5f823e3d90fd5b909a508681813d831162000449575b6200042d81836200045b565b81010312620002d857620004419062000493565b995f620000bb565b503d62000421565b88513d5f823e3d90fd5b601f909101601f19168101906001600160401b038211908210176200047f57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b0382168203620002d857565b90816020910312620002d8575160ff81168103620002d8579056fe6080604090808252600480361015610021575b505050361561001f575f80fd5b005b5f3560e01c91826306fdde03146122ee57508163071bc3c914612271578163077f224a14611bf1578163078dfbe714611a6a578163095ea7b314611a1c578163128fced11461024657816314b3aa0f146119a957816318160ddd1461194e5781631c3a004e1461191557816320e8c56514611511578163213cae631461149457816323b872dd146112c7578163313ce5671461126c57816338d52e0f146111fe5781633ba0b9a9146111055781633f4ba83a14610ff85781634e71e0c814610eee5781635c975abb14610ead5781637051b22f14610e3f57816370a0823114610ddd578163769f8e5d14610adc57816376d5de8514610a6e578163784367d614610a2b5781638456cb591461097c5781638da5cb5b1461092b57816395d89b411461081457816397e8fddb146107a6578163985672a514610738578163a10f582f146106ca578163a40bee50146105d4578163a9059cbb14610505578163b8f82b261461046b578163ba3df5ff146103fd578163c4f59f9b146103b3578163cbe52ae31461031257508063da88ecb414610241578063dd62ed3e1461029d578063e30c39781461024b578063ef5cfb8c14610246578063f8b2f991146102415763fa5a4f06146101f2578080610012565b3461023d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5760209061023461022f6125a7565b61287c565b90519015158152f35b5f80fd5b612677565b612628565b503461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b503461023d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020906102d76125a7565b6102df6125ca565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260038452825f2091165f528252805f20549051908152f35b90503461023d57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5761034a6125a7565b90610354826127f2565b1561036f576020836103686024358561379a565b9051908152f35b73ffffffffffffffffffffffffffffffffffffffff60249351927f88a505610000000000000000000000000000000000000000000000000000000084521690820152fd5b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576103f9906103ee612766565b905191829182612415565b0390f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90503461023d57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576104a36125a7565b906104ad8261287c565b156104c157602083610368602435856136e1565b73ffffffffffffffffffffffffffffffffffffffff60249351927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b823461023d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020917f01000000000000000000000000000000000000000000000000000000000000006105606125a7565b6105c783549161057660028460f81c141561278d565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161785556024359033612f89565b8254161790555160018152f35b90503461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906020835180927f313ce56700000000000000000000000000000000000000000000000000000000825281855afa9081156106c0576060939160ff915f91610691575b508251935f855260208501521690820152f35b6106b3915060203d6020116106b9575b6106ab81836124c3565b810190612863565b5f61067e565b503d6106a1565b83513d5f823e3d90fd5b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5780515f600654610852816126b0565b808452906020906001908181169081156108e3575060011461088a575b6103f98587610880828803836124c3565b51918291826123b1565b60065f90815293507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b8385106108d057505050508101602001610880826103f961086f565b80548686018401529382019381016108b4565b6103f9979550869350602092506108809491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101929461086f565b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258916109f173ffffffffffffffffffffffffffffffffffffffff5f54163314612701565b6109f9613aa6565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00609b541617609b5551338152a1005b823461023d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d57602090610234610a696125a7565b6127f2565b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461023d5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d57610b146125a7565b9060243592610b21612584565b936064359460843591821515830361023d57835492610b4660028560f81c141561278d565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809516178555610b96836127f2565b15610d98578115610d705715610d6157610bb081306134fe565b73ffffffffffffffffffffffffffffffffffffffff868184169384837f000000000000000000000000000000000000000000000000000000000000000016145f14610ca557610c029084998a916139b7565b888810610c705760209850907f0100000000000000000000000000000000000000000000000000000000000000949392918751928352888a84015216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c873392a482541617905551908152f35b6044868a8a8a51927fbfee4ca00000000000000000000000000000000000000000000000000000000084528301526024820152fd5b9050610cb0816138c2565b827f000000000000000000000000000000000000000000000000000000000000000016803b1561023d575f8660648a838d5195869485937f8b53f75e0000000000000000000000000000000000000000000000000000000085528401528a60248401528160448401525af18015610d5757610c02928b9492610d4092610d48575b50610d3b836138c2565b612e16565b998a916139b7565b610d5190612466565b8d610d31565b89513d5f823e3d90fd5b610d6b81336134fe565b610bb0565b8486517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b85517f88a5056100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841681870152602490fd5b823461023d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5760209073ffffffffffffffffffffffffffffffffffffffff610e2d6125a7565b165f5260028252805f20549051908152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5760209060ff609b541690519015158152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576001549073ffffffffffffffffffffffffffffffffffffffff9283831691823303610f9b575050805f549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000928316175f5516600155005b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b90503461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5761104a73ffffffffffffffffffffffffffffffffffffffff5f54163314612701565b609b549060ff8216156110a8577f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516609b5551338152a1005b60649060208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d577f00000000000000000000000000000000000000000000000000000000000000006111aa6111827f00000000000000000000000000000000000000000000000000000000000000008361323b565b917f00000000000000000000000000000000000000000000000000000000000000009061323b565b92670de0b6b3a7640000918281029281840414901517156111d25750602092610368916134c7565b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90503461023d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576113006125a7565b6113086125ca565b6044359083549261131f60028560f81c141561278d565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80951617855573ffffffffffffffffffffffffffffffffffffffff81165f526003602052855f20335f52602052855f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81036113ea575b602087877f0100000000000000000000000000000000000000000000000000000000000000886105c7898989612f89565b83811061143757926020969594926105c79261142a837f010000000000000000000000000000000000000000000000000000000000000097033383612ca5565b92509294959650926113b9565b60648660208951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576103f9906103ee7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006128c5565b8260807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576115446125a7565b9061154d6125ca565b91604435926064359385549261156960028560f81c141561278d565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8095161787556115b98361287c565b156118d05781156118a85773ffffffffffffffffffffffffffffffffffffffff908184169384155f14611810578334036117b357836115f791612e50565b9680881061177e57501690811561172157611610613aa6565b83861161023d578654848716858216018581116116f557918593917fff0000000000000000000000000000000000000000000000000000000000000060209a977f01000000000000000000000000000000000000000000000000000000000000009795169116178655815f5260028952865f2061168e898254612f7c565b9055815f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b8a518c8152a3865190815287898201527f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59873392a482541617905551908152f35b6011897f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b60648760208751917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b88604491898951927fbc71f2ba0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b60648960208951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b86517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528460648201526064815260a0810181811067ffffffffffffffff82111761187c579161187786926115f7948b5288613b10565b612e50565b60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8685517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b84517faeabe71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841681890152602490fd5b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576020905160218152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d577effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d57805173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260016020820152f35b823461023d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d57602090611a63611a596125a7565b6024359033612ca5565b5160018152f35b823461023d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d57611aa26125a7565b9160243591821515830361023d5760443592831515840361023d5773ffffffffffffffffffffffffffffffffffffffff948591611ae3835f54163314612701565b15611bbe571692831590811591611bb6575b5015611b59575050805f549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216175f55600154166001555f80f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905085611af5565b9350505050167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b823461023d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5767ffffffffffffffff91803583811161023d57611c41903690830161253e565b9260243581811161023d57611c59903690840161253e565b91611c62612584565b9160019586549460ff8660a81c161595868097612262575b8015612249575b156121c65786740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8316178a55612184575b50611ce260ff895460a81c16611cdd81612956565b612956565b815183811161202a5760059080611cf983546126b0565b94601f95868111612119575b50602090868311600114612061575f92612056575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828c1b9260031b1c19161781555b815193841161202a57611d5f6006546126b0565b90838211611fc9575b50506020918311600114611ef55773ffffffffffffffffffffffffffffffffffffffff949392915f9183611eea575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82891b9260031b1c1916176006555b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff825416179055611e2060ff865460a81c16612956565b167fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55611e927f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006129e1565b611e9857005b816020917fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff7f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498945416825551908152a1005b015190508880611d97565b93929187917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b818110611fb15750968373ffffffffffffffffffffffffffffffffffffffff9810611f7a575b505050811b01600655611dc9565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055888080611f6c565b8289015184558b959093019260209283019201611f46565b60065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9084808701821c83019360208810612021575b01901c019089905b8281106120165750611d68565b5f8155018990612009565b93508293612001565b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b015190508b80611d1a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08d941691855f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0925f5b818110612101575084116120ca575b505050811b018155611d4b565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558b80806120bd565b8284015185558f9690940193602093840193016120ae565b909150835f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db086808501861c8201926020861061217b575b918e918695949301871c01915b82811061216d575050611d05565b5f81558594508e910161215f565b92508192612152565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16750101000000000000000000000000000000000000000017885588611cc8565b60848560208a51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b158015611c8157508860ff8260a01c1614611c81565b508860ff8260a01c1610611c7a565b823461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576103f9906103ee7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006128c5565b83903461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d575f60055461232b816126b0565b808452906020906001908181169081156108e35750600114612358576103f98587610880828803836124c3565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b83851061239e57505050508101602001610880826103f961086f565b8054868601840152938201938101612382565b6020808252825181830181905293925f5b858110612401575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6040809697860101520116010190565b8181018301518482016040015282016123c2565b60209060206040818301928281528551809452019301915f5b82811061243c575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161242e565b67ffffffffffffffff811161247a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761247a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761247a57604052565b67ffffffffffffffff811161247a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561023d5780359061255582612504565b9261256360405194856124c3565b8284526020838301011161023d57815f926020809301838601378301015290565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361023d57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361023d57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361023d57565b60209060206040818301928281528551809452019301915f5b828110612614575050505090565b835185529381019392810192600101612606565b3461023d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d5761265f6125a7565b506103f961266b612766565b604051918291826125ed565b3461023d575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023d576103f961266b612766565b90600182811c921680156126f7575b60208310146126ca57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916126bf565b1561270857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6040516020810181811067ffffffffffffffff82111761247a576040525f8152905f368137565b1561279457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116817f000000000000000000000000000000000000000000000000000000000000000016811491821561283b57505090565b7f00000000000000000000000000000000000000000000000000000000000000001614919050565b9081602091031261023d575160ff8116810361023d5790565b73ffffffffffffffffffffffffffffffffffffffff809116817f000000000000000000000000000000000000000000000000000000000000000016811491821561283b57505090565b9190604051906060820182811067ffffffffffffffff82111761247a57604052600282526020820193604036863782948351156129295773ffffffffffffffffffffffffffffffffffffffff80921690528251600110156129295760409116910152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b1561295d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b9073ffffffffffffffffffffffffffffffffffffffff91828116908115612c9f576040918251809581957fdd62ed3e0000000000000000000000000000000000000000000000000000000083523060048401521691826024830152602096879160449788915afa8015612c95575f90612c5c575b6b7fffffffffffffffffffffff915010612a71575b5050505050565b8251905f808784017f095ea7b300000000000000000000000000000000000000000000000000000000948582528460248201528289820152888152612ab5816124a7565b519082875af1612ac3613893565b81612c24575b5015612bc857915f929183809386519089820193845260248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88820152878152612b15816124a7565b51925af1612b21613893565b81612b90575b5015612b34578080612a6a565b606492917f5361666520417070726f766500000000000000000000000000000000000000009151927f08c379a00000000000000000000000000000000000000000000000000000000084526004840152600c6024840152820152fd5b80915051848115918215612ba9575b505090505f612b27565b838092935001031261023d5783612bc0910161322e565b80845f612b9f565b6064867f5361666520417070726f76650000000000000000000000000000000000000000878751927f08c379a00000000000000000000000000000000000000000000000000000000084526004840152600c6024840152820152fd5b80915051878115918215612c3d575b505090505f612ac9565b838092935001031261023d5786612c54910161322e565b80875f612c33565b508581813d8311612c8e575b612c7281836124c3565b8101031261023d576b7fffffffffffffffffffffff9051612a55565b503d612c68565b84513d5f823e3d90fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff809116918215612d935716918215612d0f5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526003825260405f20855f5282528060405f2055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b91908203918211612e2357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9283808316911614612f7657612e9c816138c2565b91837f00000000000000000000000000000000000000000000000000000000000000001693612eec7f0000000000000000000000000000000000000000000000000000000000000000809361393b565b94803b1561023d575f928360849260405198899586947fc02dd27a0000000000000000000000000000000000000000000000000000000086521660048501526024840152816044840152602160648401525af1908115612f6b57612f5993610d3b92612f5c575b506138c2565b90565b612f6590612466565b5f612f53565b6040513d5f823e3d90fd5b50905090565b91908201809211612e2357565b73ffffffffffffffffffffffffffffffffffffffff8091169182156131895716918215613105578282146130a757612fbf613aa6565b815f52600260205260405f205481811061302357817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f52600284520360405f2055845f5260405f20613018828254612f7c565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b519073ffffffffffffffffffffffffffffffffffffffff8216820361023d57565b5190811515820361023d57565b9073ffffffffffffffffffffffffffffffffffffffff80911691817f00000000000000000000000000000000000000000000000000000000000000001683146133d957608082916024604095865194859384927fbc979af60000000000000000000000000000000000000000000000000000000084526004840152165afa9081156106c0575f9161335d575b50606081015161334e5760049160209151168351928380927f636929050000000000000000000000000000000000000000000000000000000082525afa91821561334557505f91613316575090565b90506020813d60201161333d575b81613331602093836124c3565b8101031261023d575190565b3d9150613324565b513d5f823e3d90fd5b505050670de0b6b3a764000090565b90506080813d6080116133d1575b81613378608093836124c3565b8101031261023d578251906080820182811067ffffffffffffffff82111761247a576133c69160609186526133ac8161320d565b84526020810151602085015285810151868501520161322e565b60608201525f6132c7565b3d915061336b565b819250604051907f6254afb6000000000000000000000000000000000000000000000000000000008252816004816020968794165afa8015612f6b5783915f9161347e575b506004604051809481937f63692905000000000000000000000000000000000000000000000000000000008352165afa918215612f6b575f9261346057505090565b90809250813d8311613477575b61333181836124c3565b503d61346d565b82819392503d83116134ad575b61349581836124c3565b8101031261023d576134a7839161320d565b5f61341e565b503d61348b565b81810292918115918404141715612e2357565b81156134d1570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff16801561365d57613522613aa6565b805f52600260205260405f20548281106135d9578290825f5260026020520360405f20557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182811161023d57600454928082168185160391818311612e23575f947fff000000000000000000000000000000000000000000000000000000000000006020937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9516911617600455604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b7f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff808316908216146137955761373361378f91612f599461393b565b916137897f0000000000000000000000000000000000000000000000000000000000000000936137837f00000000000000000000000000000000000000000000000000000000000000008661323b565b906134b4565b9261323b565b906134c7565b505090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff91828116928216831461388d5760209161378f613818926137896004976137837f0000000000000000000000000000000000000000000000000000000000000000958661323b565b91604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa908115612f6b5761378361386a92670de0b6b3a7640000945f9161386e575b5061392a565b0490565b613887915060203d6020116106b9576106ab81836124c3565b5f613864565b50505090565b3d156138bd573d906138a482612504565b916138b260405193846124c3565b82523d5f602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff16806138e257504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa908115612f6b575f91613316575090565b60ff16604d8111612e2357600a0a90565b670de0b6b3a764000090818102918183041490151715612e2357602073ffffffffffffffffffffffffffffffffffffffff926004604051809581937f313ce567000000000000000000000000000000000000000000000000000000008352165afa918215612f6b57612f599261378f915f9161386e575061392a565b8215613aa15773ffffffffffffffffffffffffffffffffffffffff9081169081613a535750505f80809381935af16139ed613893565b50156139f557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b92613a9f93604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252613a9a826124a7565b613b10565b565b505050565b60ff609b5416613ab257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff16604051604081019181831067ffffffffffffffff84111761247a57613b8c926040525f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1613b86613893565b91613c48565b8051828115918215613c29575b5050905015613ba55750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b838092935001031261023d5781613c40910161322e565b80825f613b99565b91929015613cc35750815115613c5c575090565b3b15613c655790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b825190915015613cd65750805190602001fd5b613d0c906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352600483016123b1565b0390fdfea26469706673582212201ace7e5cf5b5ba369dd80d65f1daacfdd9616f3281c42e297d75a44a52f2b88664736f6c63430008180033000000000000000000000000c93bb8d5581d74272f0e304593af9ab4e3a0181b000000000000000000000000e042678e6c6871fa279e037c11e390f31334ba0b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000992ec6a490a4b7f256bd59e63746951d98b29be9