0 txs
0 calls
constructor
constructor((address initialAuthority, address plasmaVault, uint256 iporDaoManagementFee, uint256 iporDaoPerformanceFee, address iporDaoFeeRecipientAddress, (address recipient, uint256 feeValue)[] recipientManagementFees, (address recipient, uint256 feeValue)[] recipientPerformanceFees) initData_)
functions
authority
viewfunction authority() view returns (address)
getIporDaoFeeRecipientAddress
viewfunction getIporDaoFeeRecipientAddress() view returns (address)
getManagementFeeRecipients
viewfunction getManagementFeeRecipients() view returns (tuple[])
getPerformanceFeeRecipients
viewfunction getPerformanceFeeRecipients() view returns (tuple[])
getPlasmaVaultHighWaterMarkPerformanceFee
viewfunction getPlasmaVaultHighWaterMarkPerformanceFee() view returns (tuple)
getTotalManagementFee
viewfunction getTotalManagementFee() view returns (uint256)
getTotalPerformanceFee
viewfunction getTotalPerformanceFee() view returns (uint256)
IPOR_DAO_MANAGEMENT_FEE
viewfunction IPOR_DAO_MANAGEMENT_FEE() view returns (uint256)
IPOR_DAO_PERFORMANCE_FEE
viewfunction IPOR_DAO_PERFORMANCE_FEE() view returns (uint256)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
MANAGEMENT_FEE_ACCOUNT
viewfunction MANAGEMENT_FEE_ACCOUNT() view returns (address)
PERFORMANCE_FEE_ACCOUNT
viewfunction PERFORMANCE_FEE_ACCOUNT() view returns (address)
PLASMA_VAULT
viewfunction PLASMA_VAULT() view returns (address)
calculateAndUpdatePerformanceFee
nonpayablefunction calculateAndUpdatePerformanceFee(uint128 actualExchangeRate_, uint256 totalSupply_, uint256 performanceFee_, uint256 assetDecimals_) returns (address recipient, uint256 feeShares)
clearContext
nonpayablefunction clearContext()
harvestAllFees
nonpayablefunction harvestAllFees()
harvestManagementFee
nonpayablefunction harvestManagementFee()
harvestPerformanceFee
nonpayablefunction harvestPerformanceFee()
initialize
nonpayablefunction initialize()
setAuthority
nonpayablefunction setAuthority(address newAuthority)
setIporDaoFeeRecipientAddress
nonpayablefunction setIporDaoFeeRecipientAddress(address iporDaoFeeRecipientAddress_)
setupContext
nonpayablefunction setupContext(address sender_)
updateHighWaterMarkPerformanceFee
nonpayablefunction updateHighWaterMarkPerformanceFee()
updateIntervalHighWaterMarkPerformanceFee
nonpayablefunction updateIntervalHighWaterMarkPerformanceFee(uint32 updateInterval_)
updateManagementFee
nonpayablefunction updateManagementFee(tuple[] recipientFees)
updatePerformanceFee
nonpayablefunction updatePerformanceFee(tuple[] recipientFees)
events
AuthorityUpdated
event AuthorityUpdated(address authority)
ContextCleared
event ContextCleared(address indexed sender_)
ContextSet
event ContextSet(address indexed sender_)
HarvestManagementFee
event HarvestManagementFee(address receiver, uint256 amount)
HarvestPerformanceFee
event HarvestPerformanceFee(address receiver, uint256 amount)
HighWaterMarkPerformanceFeeUpdated
event HighWaterMarkPerformanceFeeUpdated(uint128 highWaterMark)
HighWaterMarkPerformanceFeeUpdateIntervalUpdated
event HighWaterMarkPerformanceFeeUpdateIntervalUpdated(uint32 updateInterval)
Initialized
event Initialized(uint64 version)
IporDaoFeeRecipientAddressChanged
event IporDaoFeeRecipientAddressChanged(address indexed newRecipient)
ManagementFeeUpdated
event ManagementFeeUpdated(uint256 totalFee, address[] recipients, uint256[] fees)
PerformanceFeeUpdated
event PerformanceFeeUpdated(uint256 totalFee, address[] recipients, uint256[] fees)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AlreadyInitialized
error AlreadyInitialized()
ContextAlreadySet
error ContextAlreadySet()
ContextNotSet
error ContextNotSet()
InvalidAuthority
error InvalidAuthority()
InvalidFeeRecipientAddress
error InvalidFeeRecipientAddress()
InvalidHighWaterMark
error InvalidHighWaterMark()
InvalidInitialization
error InvalidInitialization()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NotInitialized
error NotInitialized()
NotInitializing
error NotInitializing()
NotPlasmaVault
error NotPlasmaVault()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
UnauthorizedSender
error UnauthorizedSender()
creation bytecode
0x610120604052348015610010575f80fd5b506040516147e33803806147e383398101604081905261002f91610992565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f811580156100785750825b90505f826001600160401b031660011480156100935750303b155b9050811580156100a1575080155b156100bf5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156100ed57845460ff60401b1916680100000000000000001785555b85516001600160a01b031661011557604051636f6a1b8760e11b815260040160405180910390fd5b8551610120906105ac565b60208601516001600160a01b0316608052604051309061013f906107ba565b6001600160a01b039091168152602001604051809103905ff080158015610168573d5f803e3d5ffd5b506001600160a01b031660a0526040513090610183906107ba565b6001600160a01b039091168152602001604051809103905ff0801580156101ac573d5f803e3d5ffd5b506001600160a01b031660c052604086015160e05260608601516101005260808601516101d8906105c0565b60e0516101005160a08801515160c0890151518115610379575f826001600160401b0381111561020a5761020a61083e565b604051908082528060200260200182016040528015610233578160200160208202803683370190505b5090505f5b8381101561036d578b60a00151818151811061025657610256610a6d565b60200260200101515f015182828151811061027357610273610a6d565b60200260200101906001600160a01b031690816001600160a01b0316815250505f6001600160a01b03168c60a0015182815181106102b3576102b3610a6d565b60200260200101515f01516001600160a01b0316036102e55760405163bd0f3dfd60e01b815260040160405180910390fd5b8b60a0015181815181106102fb576102fb610a6d565b602002602001015160200151866103129190610a81565b95506103658c60a00151828151811061032d5761032d610a6d565b60200260200101515f01518d60a00151838151811061034e5761034e610a6d565b60200260200101516020015161062860201b60201c565b600101610238565b506103778161066c565b505b8015610507575f816001600160401b038111156103985761039861083e565b6040519080825280602002602001820160405280156103c1578160200160208202803683370190505b5090505f5b828110156104fb578b60c0015181815181106103e4576103e4610a6d565b60200260200101515f015182828151811061040157610401610a6d565b60200260200101906001600160a01b031690816001600160a01b0316815250505f6001600160a01b03168c60c00151828151811061044157610441610a6d565b60200260200101515f01516001600160a01b0316036104735760405163bd0f3dfd60e01b815260040160405180910390fd5b8b60c00151818151811061048957610489610a6d565b602002602001015160200151856104a09190610a81565b94506104f38c60c0015182815181106104bb576104bb610a6d565b60200260200101515f01518d60c0015183815181106104dc576104dc610a6d565b6020026020010151602001516106a960201b60201c565b6001016103c6565b50610505816106d0565b505b61052f837f91a7fd667a02d876183d5e3c0caf915fa5c0b6847afae1b6a2261f7bce98450055565b610557847fcf56f35f42e69dcdff0b7b1f2e356cc5f92476bed919f8df0cdbf41f78aa1f0055565b5050505083156105a157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050610aa6565b6105b46106f7565b6105bd81610747565b50565b7faf522f71ce1f2b5702c38f667fa2366c184e3c6dd86ab049ad3b02fec741fd0080546001600160a01b0319166001600160a01b0383169081179091556040517f4bba7efe5bb2069dca2b8a042e87efb4b766fc514f70b673ee79de57ba6a4e56905f90a250565b807ff1a2374333eb639fe6654c1bd32856f942f1f785e32d72be0c2e035f2e0f80005b6001600160a01b039093165f90815260209390935260409092209190915550565b807ff1a2374333eb639fe6654c1bd32856f942f1f785e32d72be0c2e035f2e0f80005b60010190805190602001906106a59291906107c7565b5050565b807fc456e86573d79f7b5b60c9eb824345c471d5390facece9407699845c141b2d0061064b565b807fc456e86573d79f7b5b60c9eb824345c471d5390facece9407699845c141b2d0061068f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661074557604051631afcd79f60e31b815260040160405180910390fd5b565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b6106c48061411f83390190565b828054828255905f5260205f2090810192821561081a579160200282015b8281111561081a57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906107e5565b5061082692915061082a565b5090565b5b80821115610826575f815560010161082b565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156108745761087461083e565b60405290565b60405160e081016001600160401b03811182821017156108745761087461083e565b604051601f8201601f191681016001600160401b03811182821017156108c4576108c461083e565b604052919050565b80516001600160a01b03811681146108e2575f80fd5b919050565b5f82601f8301126108f6575f80fd5b81516001600160401b0381111561090f5761090f61083e565b61091e60208260051b0161089c565b8082825260208201915060208360061b86010192508583111561093f575f80fd5b602085015b83811015610988576040818803121561095b575f80fd5b610963610852565b61096c826108cc565b8152602082810151818301529084529290920191604001610944565b5095945050505050565b5f602082840312156109a2575f80fd5b81516001600160401b038111156109b7575f80fd5b820160e081850312156109c8575f80fd5b6109d061087a565b6109d9826108cc565b81526109e7602083016108cc565b60208201526040828101519082015260608083015190820152610a0c608083016108cc565b608082015260a08201516001600160401b03811115610a29575f80fd5b610a35868285016108e7565b60a08301525060c08201516001600160401b03811115610a53575f80fd5b610a5f868285016108e7565b60c083015250949350505050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610aa057634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e05161010051613578610ba75f395f81816103e201528181610657015261098001525f81816103660152818161139b015261177601525f81816103bb01528181610d5f015281816113bc015281816116ab01528181611753015261180301525f81816101d601528181610678015281816108b50152818161095d01528181610a0e01528181610c5e01526111d601525f8181610421015281816108df01528181610c8b01528181610d3701528181610fd1015281816116d501528181611a9101528181611acd01528181612129015281816122340152818161232a015281816123f60152818161257b01526126b601526135785ff3fe608060405234801561000f575f80fd5b50600436106101a5575f3560e01c80639617bcca116100e8578063c842780d11610093578063db99bddd1161006e578063db99bddd1461040c578063e49ef38e14610414578063ead66a071461041c578063edabaf2d14610443575f80fd5b8063c842780d146103b6578063cbc16b98146103dd578063ccd322b014610404575f80fd5b8063bbe7cd24116100c3578063bbe7cd2414610388578063bf7e214f1461039b578063c0dbcd49146103a3575f80fd5b80639617bcca1461031a578063993ba2e014610359578063ade9fb1514610361575f80fd5b80631deddf10116101535780637a9e5e4b1161012e5780637a9e5e4b146102b35780638129fc1c146102c657806387ef0b87146102ce5780638fb36037146102e1575f80fd5b80631deddf101461024b578063679f1df714610295578063766b0ecf1461029d575f80fd5b806311a978291161018357806311a978291461021d57806312f6c6d614610230578063143e908d14610238575f80fd5b8063074c2630146101a957806309f25fc0146101b35780630bd35bb9146101d1575b5f80fd5b6101b161044b565b005b6101bb610467565b6040516101c89190612ea9565b60405180910390f35b6101f87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b6101b161022b366004612f0d565b610574565b6101f86105d8565b6101b1610246366004612f40565b61061c565b6102536106a2565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015163ffffffff9081169183019190915292820151909216908201526060016101c8565b6101b1610762565b6102a5610a50565b6040519081526020016101c8565b6101b16102c1366004612f0d565b610a59565b6101b1610b5e565b6101b16102dc366004612f0d565b610e28565b6102e9610f44565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101c8565b61032d610328366004612fb1565b610fb7565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101c8565b6101bb611206565b6102a57f000000000000000000000000000000000000000000000000000000000000000081565b6101b161039636600461300e565b61130b565b6101f861131f565b6101b16103b1366004612f40565b611360565b6101f87f000000000000000000000000000000000000000000000000000000000000000081565b6102a57f000000000000000000000000000000000000000000000000000000000000000081565b6101b16113e1565b6101b1611466565b6101b1611558565b6101f87f000000000000000000000000000000000000000000000000000000000000000081565b6102a561183c565b61045d610456611845565b5f3661184e565b610465611a8e565b565b60605f610472611c0e565b80519091505f8167ffffffffffffffff81111561049157610491613029565b6040519080825280602002602001820160405280156104d557816020015b604080518082019091525f80825260208201528152602001906001900390816104af5790505b5090505f5b8281101561056c5760405180604001604052808583815181106104ff576104ff613056565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16815260200161054486848151811061053757610537613056565b6020026020010151611c9e565b81525082828151811061055957610559613056565b60209081029190910101526001016104da565b509392505050565b61057f610456611845565b73ffffffffffffffffffffffffffffffffffffffff81166105cc576040517fbd0f3dfd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d581611cec565b50565b5f6106177faf522f71ce1f2b5702c38f667fa2366c184e3c6dd86ab049ad3b02fec741fd005473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b610627610456611845565b61062f610762565b61069e82827fc456e86573d79f7b5b60c9eb824345c471d5390facece9407699845c141b2d007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001611d79565b5050565b604080516060810182525f8082526020820181905291810191909152610617604080516060810182525f80825260208201819052918101919091527fb9423b11a8779228bace4bf919d779502e12a07e11bd2f782c23aeac55439c006040805160608101825291546fffffffffffffffffffffffffffffffff8116835263ffffffff700100000000000000000000000000000000820481166020850152740100000000000000000000000000000000000000009091041690820152919050565b600a6107967ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005467ffffffffffffffff1690565b67ffffffffffffffff16146107d7576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108167faf522f71ce1f2b5702c38f667fa2366c184e3c6dd86ab049ad3b02fec741fd005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1603610863576040517fbd0f3dfd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61086c6122fd565b9050805f036108785750565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610926573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094a9190613083565b9050805f03610957575050565b5f6109a67f000000000000000000000000000000000000000000000000000000000000000083857f00000000000000000000000000000000000000000000000000000000000000006001612326565b9050805f036109b457505050565b5f6109bd611c0e565b80519091505f5b81811080156109d257505f84115b15610a4857610a348382815181106109ec576109ec613056565b60200260200101518587610a0b87868151811061053757610537613056565b8a7f00000000000000000000000000000000000000000000000000000000000000006001612577565b935080610a40816130c7565b9150506109c4565b505050505050565b5f61061761273c565b5f610a62611845565b9050610a6c61131f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aed576040517f068ca9d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163b5f03610b55576040517fc2f31e5e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ae4565b61069e82612763565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600a919068010000000000000000900460ff1680610bad5750805467ffffffffffffffff808416911610155b15610be4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001667ffffffffffffffff831617680100000000000000001781556040517fac4ad8c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063ac4ad8c590610ccf907f00000000000000000000000000000000000000000000000000000000000000009060040173ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b5f604051808303815f87803b158015610ce6575f80fd5b505af1158015610cf8573d5f803e3d5ffd5b50506040517fac4ad8c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000016925063ac4ad8c591506024015f604051808303815f87803b158015610da2575f80fd5b505af1158015610db4573d5f803e3d5ffd5b50505050610dc0611a8e565b80547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15050565b610e33610456611845565b7f68262fe08792a71a690eb5eb2de15df1b0f463dd786bf92bdbd5f0f0d1ae8b005473ffffffffffffffffffffffffffffffffffffffff1615610ea2576040517f2f3873fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f68262fe08792a71a690eb5eb2de15df1b0f463dd786bf92bdbd5f0f0d1ae8b0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905560405173ffffffffffffffffffffffffffffffffffffffff8216907f606f0da67080f7641fd59bdd017702d2842394e653866c86c69bcc879eea2a41905f90a250565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080545f919074010000000000000000000000000000000000000000900460ff16610f8f575f610fb1565b7f8fb36037000000000000000000000000000000000000000000000000000000005b91505090565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611028576040517ffe25cbf700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6110cd604080516060810182525f80825260208201819052918101919091527fb9423b11a8779228bace4bf919d779502e12a07e11bd2f782c23aeac55439c006040805160608101825291546fffffffffffffffffffffffffffffffff8116835263ffffffff700100000000000000000000000000000000820481166020850152740100000000000000000000000000000000000000009091041690820152919050565b80519091506fffffffffffffffffffffffffffffffff165f036110ff576110f3876127f4565b5f8092509250506111fd565b805f01516fffffffffffffffffffffffffffffffff16876fffffffffffffffffffffffffffffffff161161116d57604081015163ffffffff161580159061115f57508060400151816020015161115591906130fe565b63ffffffff164210155b156110f3576110f3876127f4565b5f815f01516fffffffffffffffffffffffffffffffff16886fffffffffffffffffffffffffffffffff166111a19190613120565b90505f6111b988836111b489600a613254565b6128df565b90505f6111c982896127106128df565b90506111d48a6127f4565b7f0000000000000000000000000000000000000000000000000000000000000000955093505050505b94509492505050565b60605f6112116129d7565b80519091505f8167ffffffffffffffff81111561123057611230613029565b60405190808252806020026020018201604052801561127457816020015b604080518082019091525f808252602082015281526020019060019003908161124e5790505b5090505f5b8281101561056c57604051806040016040528085838151811061129e5761129e613056565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020016112e38684815181106112d6576112d6613056565b60200260200101516129ff565b8152508282815181106112f8576112f8613056565b6020908102919091010152600101611279565b611316610456611845565b6105d581612a26565b5f807ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b61136b610456611845565b611373611558565b61069e82827ff1a2374333eb639fe6654c1bd32856f942f1f785e32d72be0c2e035f2e0f80007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f611d79565b600a6114157ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005467ffffffffffffffff1690565b67ffffffffffffffff1614611456576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61145e611558565b610465610762565b611471610456611845565b5f61147a612ac1565b905073ffffffffffffffffffffffffffffffffffffffff81166114c9576040517f20ccb74a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115157f68262fe08792a71a690eb5eb2de15df1b0f463dd786bf92bdbd5f0f0d1ae8b0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f6ca66738059b52d288c52b478cf0710166b7fb2801e9262a896cbacf620cba1d905f90a250565b600a61158c7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005467ffffffffffffffff1690565b67ffffffffffffffff16146115cd576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61160c7faf522f71ce1f2b5702c38f667fa2366c184e3c6dd86ab049ad3b02fec741fd005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1603611659576040517fbd0f3dfd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61166261273c565b9050805f0361166e5750565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561171c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117409190613083565b9050805f0361174d575050565b5f61179b7f000000000000000000000000000000000000000000000000000000000000000083857f00000000000000000000000000000000000000000000000000000000000000005f612326565b9050805f036117a957505050565b5f6117b26129d7565b80519091505f5b81811080156117c757505f84115b15610a48576118288382815181106117e1576117e1613056565b602002602001015185876118008786815181106112d6576112d6613056565b8a7f00000000000000000000000000000000000000000000000000000000000000005f612577565b935080611834816130c7565b9150506117b9565b5f6106176122fd565b5f610617612af4565b5f61185c600482848661325f565b61186591613286565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f87ef0b870000000000000000000000000000000000000000000000000000000014806118f857507fffffffff0000000000000000000000000000000000000000000000000000000081167fdb99bddd00000000000000000000000000000000000000000000000000000000145b15611901573393505b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005f8061194c61192f61131f565b883061193e60045f8b8d61325f565b61194791613286565b612afd565b9150915081611a855763ffffffff811615611a3b5782547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001783556119a661131f565b73ffffffffffffffffffffffffffffffffffffffff166394c7d7ee8888886040518463ffffffff1660e01b81526004016119e2939291906132ec565b5f604051808303815f87803b1580156119f9575f80fd5b505af1158015611a0b573d5f803e3d5ffd5b505084547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16855550611a859050565b6040517f068ca9d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152602401610ae4565b50505050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307a2d13a7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b589190613355565b611b669060ff16600a613254565b6040518263ffffffff1660e01b8152600401611b8491815260200190565b602060405180830381865afa158015611b9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc39190613083565b90508015611bdc576105d5611bd782612c76565b6127f4565b6040517f58fe1e9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60607fc456e86573d79f7b5b60c9eb824345c471d5390facece9407699845c141b2d005b600101805480602002602001604051908101604052809291908181526020018280548015611c9457602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611c69575b5050505050905090565b5f7fc456e86573d79f7b5b60c9eb824345c471d5390facece9407699845c141b2d005b73ffffffffffffffffffffffffffffffffffffffff9092165f90815260209290925250604090205490565b7faf522f71ce1f2b5702c38f667fa2366c184e3c6dd86ab049ad3b02fec741fd0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4bba7efe5bb2069dca2b8a042e87efb4b766fc514f70b673ee79de57ba6a4e56905f90a250565b5f8390505f85600101805480602002602001604051908101604052809291908181526020018280548015611de157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611db6575b505083519394505f925050505b81811015611e4657875f015f848381518110611e0c57611e0c613056565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f90812055600101611dee565b50611e54600188015f612dfa565b5f8867ffffffffffffffff811115611e6e57611e6e613029565b604051908082528060200260200182016040528015611e97578160200160208202803683370190505b5090505f8967ffffffffffffffff811115611eb457611eb4613029565b604051908082528060200260200182016040528015611edd578160200160208202803683370190505b509050895f5b818110156120ae575f8d8d83818110611efe57611efe613056565b611f149260206040909202019081019150612f0d565b73ffffffffffffffffffffffffffffffffffffffff1603611f61576040517fbd0f3dfd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8c8c82818110611f7357611f73613056565b611f899260206040909202019081019150612f0d565b848281518110611f9b57611f9b613056565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508c8c82818110611fe757611fe7613056565b9050604002016020013583828151811061200357612003613056565b6020026020010181815250508c8c8281811061202157612021613056565b905060400201602001358b5f015f8f8f8581811061204157612041613056565b6120579260206040909202019081019150612f0d565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f20558c8c8281811061208f5761208f613056565b90506040020160200135876120a49190613375565b9650600101611ee3565b5082516120c49060018c01906020860190612e15565b505f8760018111156120d8576120d8613388565b036121e8576040517fafb8353100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063afb83531906044015f604051808303815f87803b15801561216a575f80fd5b505af115801561217c573d5f803e3d5ffd5b505050506121a8867fcf56f35f42e69dcdff0b7b1f2e356cc5f92476bed919f8df0cdbf41f78aa1f0055565b7f46a6b8fd5cd56501b3b8d5a5c49801cea4d59daf42d346ec95d689e661a95d518684846040516121db939291906133b5565b60405180910390a16122ef565b6040517f09f75ba000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8981166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016906309f75ba0906044015f604051808303815f87803b158015612275575f80fd5b505af1158015612287573d5f803e3d5ffd5b505050506122b3867f91a7fd667a02d876183d5e3c0caf915fa5c0b6847afae1b6a2261f7bce98450055565b7fcdf46cf41258025ca131bdec889140cde38fb49c1e82dd1e654851481d3e8c998684846040516122e6939291906133b5565b60405180910390a15b505050505050505050505050565b5f7f91a7fd667a02d876183d5e3c0caf915fa5c0b6847afae1b6a2261f7bce9845005b54919050565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612391573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b59190613355565b60ff1690505f6123c682600a613254565b90505f866123d48388613453565b6123de9190613497565b90505f6123ec8983856128df565b90508015612552577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd8b61246f7faf522f71ce1f2b5702c38f667fa2366c184e3c6dd86ab049ad3b02fec741fd005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604481018490526064016020604051808303815f875af11580156124e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906134de565b5061255261254b7faf522f71ce1f2b5702c38f667fa2366c184e3c6dd86ab049ad3b02fec741fd005473ffffffffffffffffffffffffffffffffffffffff1690565b8288612ccf565b80891161255f575f612569565b612569818a613120565b9a9950505050505050505050565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126069190613355565b60ff1690505f61261782600a613254565b90505f86612625838a613453565b61262f9190613497565b90505f61263d8a83856128df565b9050801561272c57808b10156126505750895b61265a818c613120565b9a50801561272c576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528d81166024830152604482018390527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303815f875af11580156126fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272091906134de565b5061272c8c8288612ccf565b50989a9950505050505050505050565b5f7fcf56f35f42e69dcdff0b7b1f2e356cc5f92476bed919f8df0cdbf41f78aa1f00612320565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811782556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90602001610e1c565b7fb9423b11a8779228bace4bf919d779502e12a07e11bd2f782c23aeac55439c0080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff831617815561285842612d89565b815463ffffffff91909116700100000000000000000000000000000000027fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9091161781556040516fffffffffffffffffffffffffffffffff831681527fca98306dd784b8ef0d7ed3faff704873e0e31d34d0c87e33379f4c6176e75f9590602001610e1c565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f03612932578382816129285761292861346a565b04925050506129d0565b80841161296b576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b60607ff1a2374333eb639fe6654c1bd32856f942f1f785e32d72be0c2e035f2e0f8000611c32565b5f7ff1a2374333eb639fe6654c1bd32856f942f1f785e32d72be0c2e035f2e0f8000611cc1565b7fb9423b11a8779228bace4bf919d779502e12a07e11bd2f782c23aeac55439c0080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff84169081029190911782556040519081527f41ebd8af2d3daf6d8bcb4a30797f70d18abe3fbdc652a708f3388cf64c0d321390602001610e1c565b5f80612acb612dd2565b905073ffffffffffffffffffffffffffffffffffffffff8116612aef573391505090565b919050565b5f610617612ac1565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301527fffffffff00000000000000000000000000000000000000000000000000000000831660648301525f91829182918291891690608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb70096130000000000000000000000000000000000000000000000000000000017905251612bdc91906134f7565b5f60405180830381855afa9150503d805f8114612c14576040519150601f19603f3d011682016040523d82523d5f602084013e612c19565b606091505b50915091508115612c6b576040815110612c4b5780806020019051810190612c41919061350d565b9094509250612c6b565b6020815110612c6b5780806020019051810190612c6891906134de565b93505b505094509492505050565b5f6fffffffffffffffffffffffffffffffff821115612ccb576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ae4565b5090565b6001816001811115612ce357612ce3613388565b03612d3d576040805173ffffffffffffffffffffffffffffffffffffffff85168152602081018490527f4da920870f7a5edc67ccc9f6cc4019b324d54267ceef8652ac9ae5e9b924ef8591015b60405180910390a1505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85168152602081018490527fb5a36fd729e09ec7fe13989322bec49d7ae4fcc0ef29ec015d9fd503a3d95dd59101612d30565b5f63ffffffff821115612ccb576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526020600482015260248101839052604401610ae4565b5f807f68262fe08792a71a690eb5eb2de15df1b0f463dd786bf92bdbd5f0f0d1ae8b00611343565b5080545f8255905f5260205f20908101906105d59190612e95565b828054828255905f5260205f20908101928215612e8d579160200282015b82811115612e8d57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612e33565b50612ccb9291505b5b80821115612ccb575f8155600101612e96565b602080825282518282018190525f918401906040840190835b81811015612f02578351805173ffffffffffffffffffffffffffffffffffffffff1684526020908101518185015290930192604090920191600101612ec2565b509095945050505050565b5f60208284031215612f1d575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146129d0575f80fd5b5f8060208385031215612f51575f80fd5b823567ffffffffffffffff811115612f67575f80fd5b8301601f81018513612f77575f80fd5b803567ffffffffffffffff811115612f8d575f80fd5b8560208260061b8401011115612fa1575f80fd5b6020919091019590945092505050565b5f805f8060808587031215612fc4575f80fd5b84356fffffffffffffffffffffffffffffffff81168114612fe3575f80fd5b966020860135965060408601359560600135945092505050565b63ffffffff811681146105d5575f80fd5b5f6020828403121561301e575f80fd5b81356129d081612ffd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613093575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130f7576130f761309a565b5060010190565b63ffffffff818116838216019081111561311a5761311a61309a565b92915050565b8181038181111561311a5761311a61309a565b6001815b600184111561316e578085048111156131525761315261309a565b600184161561316057908102905b60019390931c928002613137565b935093915050565b5f826131845750600161311a565b8161319057505f61311a565b81600181146131a657600281146131b0576131cc565b600191505061311a565b60ff8411156131c1576131c161309a565b50506001821b61311a565b5060208310610133831016604e8410600b84101617156131ef575081810a61311a565b61321a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613133565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561324c5761324c61309a565b029392505050565b5f6129d08383613176565b5f808585111561326d575f80fd5b83861115613279575f80fd5b5050820193919092039150565b80357fffffffff0000000000000000000000000000000000000000000000000000000081169060048410156132e5577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f60208284031215613365575f80fd5b815160ff811681146129d0575f80fd5b8082018082111561311a5761311a61309a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60608201858352606060208401528085518083526080850191506020870192505f5b8181101561340c57835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016133d8565b50508381036040850152845180825260209182019250908501905f5b81811015613446578251845260209384019390920191600101613428565b5091979650505050505050565b808202811582820484141761311a5761311a61309a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826134ca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80518015158114612aef575f80fd5b5f602082840312156134ee575f80fd5b6129d0826134cf565b5f82518060208501845e5f920191825250919050565b5f806040838503121561351e575f80fd5b613527836134cf565b9150602083015161353781612ffd565b80915050925092905056fea26469706673582212204f8b43ceb0573aa922b4f7da662817e85b09e16e8b9f397b7b12f9cbe5646a8a64736f6c634300081a003360a0604052348015600e575f80fd5b506040516106c43803806106c4833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b60805161063a61008a5f395f818160520152818160b50152610128015261063a5ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063ac4ad8c514610038578063ea26266c1461004d575b5f80fd5b61004b61004636600461059c565b61009d565b005b6100747f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461010c576040517fcb56c31f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61016d73ffffffffffffffffffffffffffffffffffffffff82167f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610170565b50565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526101fc848261029f565b610299576040805173ffffffffffffffffffffffffffffffffffffffff851660248201525f6044808301919091528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261028f90859061035a565b610299848261035a565b50505050565b5f805f8473ffffffffffffffffffffffffffffffffffffffff16846040516102c791906105cf565b5f604051808303815f865af19150503d805f8114610300576040519150601f19603f3d011682016040523d82523d5f602084013e610305565b606091505b509150915081801561032f57508051158061032f57508080602001905181019061032f91906105e5565b801561035157505f8573ffffffffffffffffffffffffffffffffffffffff163b115b95945050505050565b5f61037b73ffffffffffffffffffffffffffffffffffffffff8416836103f8565b905080515f1415801561039f57508080602001905181019061039d91906105e5565b155b156103f3576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b505050565b606061040583835f61040c565b9392505050565b60608147101561044a576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016103ea565b5f808573ffffffffffffffffffffffffffffffffffffffff16848660405161047291906105cf565b5f6040518083038185875af1925050503d805f81146104ac576040519150601f19603f3d011682016040523d82523d5f602084013e6104b1565b606091505b50915091506104c18683836104cb565b9695505050505050565b6060826104e0576104db8261055a565b610405565b8151158015610504575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610553576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016103ea565b5080610405565b80511561056a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f602082840312156105ac575f80fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610405575f80fd5b5f82518060208501845e5f920191825250919050565b5f602082840312156105f5575f80fd5b81518015158114610405575f80fdfea2646970667358221220093353f0956ee475e061d19f1167cff633ad3136a30f30a43ec163c171069d9564736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000041cfe273c51e2c1391f9efa5ce7236810323eadc000000000000000000000000c4c00d8b323f37527eeda27c87412378be9f68ec000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000f6a9bd8f6dc537675d499ac1ca14f2c55d8b556900000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000