43 txs
2.2m calls
constructor
constructor(address wethToken_)
functions
balanceOf
viewfunction balanceOf(address, address) view returns (uint256)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
masterContractApproved
viewfunction masterContractApproved(address, address) view returns (bool)
masterContractOf
viewfunction masterContractOf(address) view returns (address)
nonces
viewfunction nonces(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingStrategy
viewfunction pendingStrategy(address) view returns (address)
strategy
viewfunction strategy(address) view returns (address)
strategyData
viewfunction strategyData(address) view returns (uint64 strategyStartDate, uint64 targetPercentage, uint128 balance)
toAmount
viewfunction toAmount(address token, uint256 share, bool roundUp) view returns (uint256 amount)
toShare
viewfunction toShare(address token, uint256 amount, bool roundUp) view returns (uint256 share)
totals
viewfunction totals(address) view returns (uint128 elastic, uint128 base)
whitelistedMasterContracts
viewfunction whitelistedMasterContracts(address) view returns (bool)
batch
payablefunction batch(bytes[] calls, bool revertOnFail) payable returns (bool[] successes, bytes[] results)
batchFlashLoan
nonpayablefunction batchFlashLoan(address borrower, address[] receivers, address[] tokens, uint256[] amounts, bytes data)
claimOwnership
nonpayablefunction claimOwnership()
deploy
payablefunction deploy(address masterContract, bytes data, bool useCreate2) payable returns (address cloneAddress)
deposit
payablefunction deposit(address token_, address from, address to, uint256 amount, uint256 share) payable returns (uint256 amountOut, uint256 shareOut)
flashLoan
nonpayablefunction flashLoan(address borrower, address receiver, address token, uint256 amount, bytes data)
harvest
nonpayablefunction harvest(address token, bool balance, uint256 maxChangeAmount)
permitToken
nonpayablefunction permitToken(address token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
registerProtocol
nonpayablefunction registerProtocol()
setMasterContractApproval
nonpayablefunction setMasterContractApproval(address user, address masterContract, bool approved, uint8 v, bytes32 r, bytes32 s)
setStrategy
nonpayablefunction setStrategy(address token, address newStrategy)
setStrategyTargetPercentage
nonpayablefunction setStrategyTargetPercentage(address token, uint64 targetPercentage_)
transfer
nonpayablefunction transfer(address token, address from, address to, uint256 share)
transferMultiple
nonpayablefunction transferMultiple(address token, address from, address[] tos, uint256[] shares)
transferOwnership
nonpayablefunction transferOwnership(address newOwner, bool direct, bool renounce)
whitelistMasterContract
nonpayablefunction whitelistMasterContract(address masterContract, bool approved)
withdraw
nonpayablefunction withdraw(address token_, address from, address to, uint256 amount, uint256 share) returns (uint256 amountOut, uint256 shareOut)
events
LogDeploy
event LogDeploy(address indexed masterContract, bytes data, address indexed cloneAddress)
LogDeposit
event LogDeposit(address indexed token, address indexed from, address indexed to, uint256 amount, uint256 share)
LogFlashLoan
event LogFlashLoan(address indexed borrower, address indexed token, uint256 amount, uint256 feeAmount, address indexed receiver)
LogRegisterProtocol
event LogRegisterProtocol(address indexed protocol)
LogSetMasterContractApproval
event LogSetMasterContractApproval(address indexed masterContract, address indexed user, bool approved)
LogStrategyDivest
event LogStrategyDivest(address indexed token, uint256 amount)
LogStrategyInvest
event LogStrategyInvest(address indexed token, uint256 amount)
LogStrategyLoss
event LogStrategyLoss(address indexed token, uint256 amount)
LogStrategyProfit
event LogStrategyProfit(address indexed token, uint256 amount)
LogStrategyQueued
event LogStrategyQueued(address indexed token, address indexed strategy)
LogStrategySet
event LogStrategySet(address indexed token, address indexed strategy)
LogStrategyTargetPercentage
event LogStrategyTargetPercentage(address indexed token, uint256 targetPercentage)
LogTransfer
event LogTransfer(address indexed token, address indexed from, address indexed to, uint256 share)
LogWhiteListMasterContract
event LogWhiteListMasterContract(address indexed masterContract, bool approved)
LogWithdraw
event LogWithdraw(address indexed token, address indexed from, address indexed to, uint256 amount, uint256 share)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
errors
No errors.
creation bytecode
0x60e06040523480156200001157600080fd5b50604051620047d5380380620047d5833981016040819052620000349162000116565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a34660a081905262000084816200009e565b6080525060601b6001600160601b03191660c0526200016a565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fd7df266aff736d415a9dc14b4158201d612e70d75b9c7f4e375ccfd20aa5166f8330604051602001620000f9949392919062000146565b604051602081830303815290604052805190602001209050919050565b60006020828403121562000128578081fd5b81516001600160a01b03811681146200013f578182fd5b9392505050565b938452602084019290925260408301526001600160a01b0316606082015260800190565b60805160a05160c05160601c61462c620001a9600039806106c552806109925280611ed052806120b1525080611021525080611056525061462c6000f3fe6080604052600436106101dc5760003560e01c80637c516e9411610102578063d2423b5111610095578063f1676d3711610064578063f1676d3714610555578063f18d03cc14610575578063f483b3da14610595578063f7888aec146105b5576101e3565b8063d2423b51146104d0578063da5139ca146104f1578063df23b45b14610511578063e30c397814610540576101e3565b806397da6d30116100d157806397da6d301461045b578063aee4d1b21461047b578063bafe4f1414610490578063c0a47c93146104b0576101e3565b80637c516e94146103e65780637ecebe00146104065780638da5cb5b1461042657806391e0eab51461043b576101e3565b80633e2a9d4e1161017a5780635662311811610149578063566231181461036657806366c6bb0b1461038657806372cb5d97146103a6578063733a9d7c146103c6576101e3565b80633e2a9d4e146102e35780634e71e0c8146103035780634ffe34db146103185780635108a55814610346576101e3565b806312a90c8a116101b657806312a90c8a146102545780631f54245b14610281578063228bfd9f146102a15780633644e515146102c1576101e3565b806302b9446c146101e8578063078dfbe7146102125780630fca884314610234576101e3565b366101e357005b600080fd5b6101fb6101f6366004613795565b6105d5565b604051610209929190614502565b60405180910390f35b34801561021e57600080fd5b5061023261022d36600461354c565b610a99565b005b34801561024057600080fd5b5061023261024f366004613870565b610b7f565b34801561026057600080fd5b5061027461026f36600461345f565b610e30565b6040516102099190613e01565b61029461028f366004613596565b610e45565b6040516102099190613bc8565b3480156102ad57600080fd5b506102946102bc36600461345f565b611001565b3480156102cd57600080fd5b506102d661101c565b6040516102099190613e0c565b3480156102ef57600080fd5b506102326102fe366004613977565b61107c565b34801561030f57600080fd5b50610232611147565b34801561032457600080fd5b5061033861033336600461345f565b6111d4565b6040516102099291906144e8565b34801561035257600080fd5b5061029461036136600461345f565b6111fa565b34801561037257600080fd5b506102d6610381366004613941565b611215565b34801561039257600080fd5b506102326103a1366004613901565b611269565b3480156103b257600080fd5b506102326103c1366004613733565b611832565b3480156103d257600080fd5b506102326103e136600461351f565b611c90565b3480156103f257600080fd5b506102326104013660046137ef565b611d34565b34801561041257600080fd5b506102d661042136600461345f565b611da8565b34801561043257600080fd5b50610294611dba565b34801561044757600080fd5b5061027461045636600461347b565b611dc9565b34801561046757600080fd5b506101fb610476366004613795565b611de9565b34801561048757600080fd5b506102326121fd565b34801561049c57600080fd5b506102946104ab36600461345f565b612244565b3480156104bc57600080fd5b506102326104cb3660046134b3565b61225f565b6104e36104de3660046135fb565b61256e565b604051610209929190613d67565b3480156104fd57600080fd5b506102d661050c366004613941565b6126fe565b34801561051d57600080fd5b5061053161052c36600461345f565b61274a565b60405161020993929190614524565b34801561054c57600080fd5b50610294612783565b34801561056157600080fd5b506102326105703660046139af565b612792565b34801561058157600080fd5b50610232610590366004613745565b6128e3565b3480156105a157600080fd5b506102326105b0366004613660565b612a87565b3480156105c157600080fd5b506102d66105d0366004613733565b612d47565b600080856001600160a01b03811633148015906105fb57506001600160a01b0381163014155b1561068657336000908152600260205260409020546001600160a01b03168061063f5760405162461bcd60e51b815260040161063690614305565b60405180910390fd5b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff166106845760405162461bcd60e51b815260040161063690614188565b505b6001600160a01b0386166106ac5760405162461bcd60e51b8152600401610636906140ee565b60006001600160a01b038916156106c357886106e5565b7f00000000000000000000000000000000000000000000000000000000000000005b90506106ef613385565b506001600160a01b0381166000908152600760209081526040918290208251808401909352546001600160801b03808216808552600160801b90920416918301919091521515806107b057506000826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561077657600080fd5b505afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190613a1f565b115b6107cc5760405162461bcd60e51b81526004016106369061401c565b85610824576107dd81886000612d64565b95506103e86108026107ee88612dfe565b60208401516001600160801b031690612e2b565b6001600160801b0316101561081f57600080945094505050610a8e565b610833565b61083081876001612e60565b96505b6001600160a01b0389163014158061085257506001600160a01b038a16155b8061087a57508051610876906001600160801b031661087084612edf565b90612f87565b8711155b6108965760405162461bcd60e51b815260040161063690613ee1565b6001600160a01b038083166000908152600660209081526040808320938c16835292905220546108c69087612faa565b6001600160a01b038084166000908152600660209081526040808320938d168352929052205561090c6108f887612dfe565b60208301516001600160801b031690612e2b565b6001600160801b0316602082015261093761092688612dfe565b82516001600160801b031690612e2b565b6001600160801b0390811682526001600160a01b03808416600090815260076020908152604090912084518154928601518516600160801b029085166001600160801b031990931692909217909316179091558a16610a09577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b1580156109eb57600080fd5b505af11580156109ff573d6000803e3d6000fd5b5050505050610a2e565b6001600160a01b0389163014610a2e57610a2e6001600160a01b0383168a308a612fcd565b876001600160a01b0316896001600160a01b0316836001600160a01b03167fb2346165e782564f17f5b7e555c21f4fd96fbc93458572bf0113ea35a958fc558a8a604051610a7d929190614502565b60405180910390a486945085935050505b509550959350505050565b6000546001600160a01b03163314610ac35760405162461bcd60e51b815260040161063690614153565b8115610b5e576001600160a01b038316151580610add5750805b610af95760405162461bcd60e51b815260040161063690613fed565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b031991821617909155600180549091169055610b7a565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b846001600160a01b0381163314801590610ba257506001600160a01b0381163014155b15610c2457336000908152600260205260409020546001600160a01b031680610bdd5760405162461bcd60e51b815260040161063690614305565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff16610c225760405162461bcd60e51b815260040161063690614188565b505b600085858281610c3057fe5b9050602002016020810190610c45919061345f565b6001600160a01b03161415610c6c5760405162461bcd60e51b8152600401610636906140b7565b600084815b81811015610dc8576000888883818110610c8757fe5b9050602002016020810190610c9c919061345f565b9050610d0b878784818110610cad57fe5b90506020020135600660008e6001600160a01b03166001600160a01b031681526020019081526020016000206000846001600160a01b03166001600160a01b0316815260200190815260200160002054612faa90919063ffffffff16565b6001600160a01b03808d16600090815260066020908152604080832093861683529290522055610d56878784818110610d4057fe5b9050602002013585612faa90919063ffffffff16565b9350806001600160a01b03168a6001600160a01b03168c6001600160a01b03167f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a8a8a87818110610da357fe5b90506020020135604051610db79190613e0c565b60405180910390a450600101610c71565b506001600160a01b03808a166000908152600660209081526040808320938c1683529290522054610df99083612f87565b6001600160a01b03998a1660009081526006602090815260408083209b909c16825299909952989097209790975550505050505050565b60046020526000908152604090205460ff1681565b60006001600160a01b038516610e6d5760405162461bcd60e51b815260040161063690614299565b606085901b8215610edf5760008585604051610e8a929190613b72565b60405180910390209050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260148201526e5af43d82803e903d91602b57fd5bf360881b6028820152816037826000f593505050610f24565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09250505b6001600160a01b038281166000818152600260205260409081902080546001600160a01b031916938a16939093179092559051631377d1f560e21b8152634ddf47d4903490610f799089908990600401613e8b565b6000604051808303818588803b158015610f9257600080fd5b505af1158015610fa6573d6000803e3d6000fd5b5050505050816001600160a01b0316866001600160a01b03167fd62166f3c2149208e51788b1401cc356bf5da1fc6c7886a32e18570f57d88b3b8787604051610ff0929190613e8b565b60405180910390a350949350505050565b6008602052600090815260409020546001600160a01b031681565b6000467f000000000000000000000000000000000000000000000000000000000000000081146110545761104f816130c6565b611076565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6000546001600160a01b031633146110a65760405162461bcd60e51b815260040161063690614153565b605f816001600160401b031611156110d05760405162461bcd60e51b81526004016106369061447d565b6001600160a01b0382166000818152600a602052604090819020805467ffffffffffffffff60401b1916600160401b6001600160401b03861602179055517f7543af99b5602c06e62da0631b5308489a5ff859150105a623b6eb15e8deae0b9061113b908490614510565b60405180910390a25050565b6001546001600160a01b03163381146111725760405162461bcd60e51b8152600401610636906141bf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6007602052600090815260409020546001600160801b0380821691600160801b90041682565b6009602052600090815260409020546001600160a01b031681565b6001600160a01b03831660009081526007602090815260408083208151808301909252546001600160801b038082168352600160801b9091041691810191909152611261908484612e60565b949350505050565b61127161339c565b506001600160a01b038381166000818152600a60209081526040808320815160608101835290546001600160401b038082168352600160401b82041682850152600160801b90046001600160801b031681830190815294845260089092528083205493519051630c7e663b60e11b81529194939093169283916318fccc76916112fe9133906004016144c6565b602060405180830381600087803b15801561131857600080fd5b505af115801561132c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113509190613a1f565b90508015801561135e575084155b1561136b57505050610b7a565b6001600160a01b0386166000908152600760205260408120546001600160801b03169082131561142157816113a08282612faa565b91506113ab82612dfe565b6001600160a01b0389166000818152600760205260409081902080546001600160801b0319166001600160801b03949094169390931790925590517f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d290611413908490613e0c565b60405180910390a2506114ef565b60008212156114ef5760008290036114398282612f87565b915061144482612dfe565b6001600160a01b038916600090815260076020526040902080546001600160801b0319166001600160801b039290921691909117905561149a61148682612dfe565b60408701516001600160801b03169061313d565b6001600160801b0316604080870191909152516001600160a01b038916907f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf97906114e5908490613e0c565b60405180910390a2505b85156117ae576000606461151986602001516001600160401b03168461316c90919063ffffffff16565b8161152057fe5b0490508085604001516001600160801b0316101561165b57600061155a86604001516001600160801b031683612f8790919063ffffffff16565b9050861580159061156a57508681115b156115725750855b6115866001600160a01b038a1686836131a3565b6115a661159282612dfe565b60408801516001600160801b031690612e2b565b6001600160801b031660408088019190915251636939aaf560e01b81526001600160a01b03861690636939aaf5906115e2908490600401613e0c565b600060405180830381600087803b1580156115fc57600080fd5b505af1158015611610573d6000803e3d6000fd5b50505050886001600160a01b03167fb18e7e4f6eac147a63a3bb6beb2d9039c88698623aff3efc4febbc20b0164ee58260405161164d9190613e0c565b60405180910390a2506117ac565b8085604001516001600160801b031611156117ac57600061169261167e83612dfe565b60408801516001600160801b03169061313d565b6001600160801b0316905086158015906116ab57508681115b156116b35750855b604051632e1a7d4d60e01b81526000906001600160a01b03871690632e1a7d4d906116e2908590600401613e0c565b602060405180830381600087803b1580156116fc57600080fd5b505af1158015611710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117349190613a1f565b905061175661174282612dfe565b60408901516001600160801b03169061313d565b6001600160801b0316604080890191909152516001600160a01b038b16907f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a906117a1908490613e0c565b60405180910390a250505b505b5050506001600160a01b0384166000908152600a6020908152604091829020835181549285015193909401516001600160801b03908116600160801b026001600160401b03948516600160401b0267ffffffffffffffff60401b199590961667ffffffffffffffff1990941693909317939093169390931791909116179055505050565b6000546001600160a01b0316331461185c5760405162461bcd60e51b815260040161063690614153565b61186461339c565b506001600160a01b038281166000818152600a60209081526040808320815160608101835290546001600160401b038082168352600160401b8204811683860152600160801b9091046001600160801b0316828401529484526009909252909120548151919316911615806118eb5750826001600160a01b0316816001600160a01b031614155b15611975576001600160a01b03848116600090815260096020526040902080546001600160a01b03191691851691909117905561192c621275004201613299565b6001600160401b031682526040516001600160a01b0380851691908616907f6f7ccdf3f86039e5a1dcf6028bf7b4773cbf7a234716ba2e5392b12bb0f8558f90600090a3611c10565b81516001600160401b031615801590611998575081516001600160401b03164210155b6119b45760405162461bcd60e51b81526004016106369061411c565b6001600160a01b038481166000908152600860205260409020541615611b99576001600160a01b0380851660009081526008602052604080822054858201519151637f8661a160e01b815292931691637f8661a191611a15916004016144b2565b602060405180830381600087803b158015611a2f57600080fd5b505af1158015611a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a679190613a1f565b90506000811315611ade576001600160a01b03851660009081526007602052604090208190611a9690826132c2565b50856001600160a01b03167f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d282604051611ad09190613e0c565b60405180910390a250611b52565b6000811215611b52576001600160a01b03851660009081526007602052604081209082900390611b0e9082613306565b50856001600160a01b03167f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf9782604051611b489190613e0c565b60405180910390a2505b846001600160a01b03167f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a8460400151604051611b8f91906144b2565b60405180910390a2505b6001600160a01b03808516600081815260086020908152604080832080548688166001600160a01b0319918216179091558388528782018490528484526009909252808320805490921690915551928616927f03e6352a885adc4cc54767592939c3b1bbd65685658c3beaaba66a888120e2179190a35b506001600160a01b03929092166000908152600a60209081526040918290208451815492860151939095015167ffffffffffffffff199092166001600160401b039586161767ffffffffffffffff60401b1916600160401b9590931694909402919091176001600160801b03908116600160801b91909216021790915550565b6000546001600160a01b03163314611cba5760405162461bcd60e51b815260040161063690614153565b6001600160a01b038216611ce05760405162461bcd60e51b815260040161063690613f18565b6001600160a01b03821660008181526004602052604090819020805460ff1916841515179055517f31a1e0eac44b54ac6c2a2efa87e92c83405ffcf33fceef02a7bca695130e26009061113b908490613e01565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611d6c908a908a908a908a908a908a908a90600401613d0d565b600060405180830381600087803b158015611d8657600080fd5b505af1158015611d9a573d6000803e3d6000fd5b505050505050505050505050565b60056020526000908152604090205481565b6000546001600160a01b031681565b600360209081526000928352604080842090915290825290205460ff1681565b600080856001600160a01b0381163314801590611e0f57506001600160a01b0381163014155b15611e9157336000908152600260205260409020546001600160a01b031680611e4a5760405162461bcd60e51b815260040161063690614305565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff16611e8f5760405162461bcd60e51b815260040161063690614188565b505b6001600160a01b038616611eb75760405162461bcd60e51b8152600401610636906140ee565b60006001600160a01b03891615611ece5788611ef0565b7f00000000000000000000000000000000000000000000000000000000000000005b9050611efa613385565b506001600160a01b0381166000908152600760209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015285611f5257611f4b81886001612d64565b9550611f61565b611f5e81876000612e60565b96505b6001600160a01b038083166000908152600660209081526040808320938d1683529290522054611f919087612f87565b6001600160a01b038084166000908152600660209081526040808320938e1683529290522055611fd4611fc388612dfe565b82516001600160801b03169061313d565b6001600160801b03168152611fff611feb87612dfe565b60208301516001600160801b03169061313d565b6001600160801b0316602082018190526103e811158061202a575060208101516001600160801b0316155b6120465760405162461bcd60e51b815260040161063690613fbd565b6001600160a01b03828116600090815260076020908152604090912083518154928501516001600160801b03199093166001600160801b03918216178116600160801b91909316029190911790558a1661219a57604051632e1a7d4d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d906120e6908a90600401613e0c565b600060405180830381600087803b15801561210057600080fd5b505af1158015612114573d6000803e3d6000fd5b505050506000886001600160a01b03168860405161213190613bc5565b60006040518083038185875af1925050503d806000811461216e576040519150601f19603f3d011682016040523d82523d6000602084013e612173565b606091505b50509050806121945760405162461bcd60e51b81526004016106369061440f565b506121ae565b6121ae6001600160a01b03831689896131a3565b876001600160a01b0316896001600160a01b0316836001600160a01b03167fad9ab9ee6953d4d177f4a03b3a3ac3178ffcb9816319f348060194aa76b144868a8a604051610a7d929190614502565b3360008181526002602052604080822080546001600160a01b03191684179055517fdfb44ffabf0d3a8f650d3ce43eff98f6d050e7ea1a396d5794f014e7dadabacb9190a2565b6002602052600090815260409020546001600160a01b031681565b6001600160a01b0385166122855760405162461bcd60e51b8152600401610636906142ce565b81158015612291575080155b801561229e575060ff8316155b15612340576001600160a01b03861633146122cb5760405162461bcd60e51b815260040161063690613f4f565b6001600160a01b0386811660009081526002602052604090205416156123035760405162461bcd60e51b81526004016106369061422b565b6001600160a01b03851660009081526004602052604090205460ff1661233b5760405162461bcd60e51b8152600401610636906143d8565b6124fa565b6001600160a01b0386166123665760405162461bcd60e51b815260040161063690614371565b600060405180604001604052806002815260200161190160f01b81525061238b61101c565b7f1962bc9f5484cb7a998701b81090e966ee1fce5771af884cceee7c081b14ade2876123d7577fb426802f1f7dc850a7b6b38805edea2442f3992878a9ab985abfe8091d95d0b16123f9565b7f422ac5323fe049241dee67716229a1cc1bc7b313b23dfe3ef6d42ab177a3b2845b6001600160a01b038b1660009081526005602090815260409182902080546001810190915591516124339493928e928e928e929101613e15565b6040516020818303038152906040528051906020012060405160200161245b93929190613b9e565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516124989493929190613e6d565b6020604051602081039080840390855afa1580156124ba573d6000803e3d6000fd5b505050602060405103519050876001600160a01b0316816001600160a01b0316146124f75760405162461bcd60e51b815260040161063690614262565b50505b6001600160a01b038581166000818152600360209081526040808320948b168084529490915290819020805460ff1916881515179055517f5f6ebb64ba012a851c6f014e6cad458ddf213d1512049b31cd06365c2b0592579061255e908890613e01565b60405180910390a3505050505050565b606080836001600160401b038111801561258757600080fd5b506040519080825280602002602001820160405280156125b1578160200160208202803683370190505b509150836001600160401b03811180156125ca57600080fd5b506040519080825280602002602001820160405280156125fe57816020015b60608152602001906001900390816125e95790505b50905060005b848110156126f557600060603088888581811061261d57fe5b905060200281019061262f9190614550565b60405161263d929190613b72565b600060405180830381855af49150503d8060008114612678576040519150601f19603f3d011682016040523d82523d6000602084013e61267d565b606091505b5091509150818061268c575085155b61269582613325565b906126b35760405162461bcd60e51b81526004016106369190613e9f565b50818584815181106126c157fe5b602002602001019015159081151581525050808484815181106126e057fe5b60209081029190910101525050600101612604565b50935093915050565b6001600160a01b03831660009081526007602090815260408083208151808301909252546001600160801b038082168352600160801b9091041691810191909152611261908484612d64565b600a602052600090815260409020546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b6001546001600160a01b031681565b6000620186a06127a385603261316c565b816127aa57fe5b0490506127c16001600160a01b03861687866131a3565b6040516323e30c8b60e01b81526001600160a01b038816906323e30c8b906127f79033908990899087908a908a90600401613ca2565b600060405180830381600087803b15801561281157600080fd5b505af1158015612825573d6000803e3d6000fd5b5050505061285c61283582612dfe565b6001600160a01b0387166000908152600760205260409020906001600160801b03166132c2565b61286586612edf565b10156128835760405162461bcd60e51b8152600401610636906143a8565b856001600160a01b0316856001600160a01b0316886001600160a01b03167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a22320487856040516128d2929190614502565b60405180910390a450505050505050565b826001600160a01b038116331480159061290657506001600160a01b0381163014155b1561298857336000908152600260205260409020546001600160a01b0316806129415760405162461bcd60e51b815260040161063690614305565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff166129865760405162461bcd60e51b815260040161063690614188565b505b6001600160a01b0383166129ae5760405162461bcd60e51b8152600401610636906140ee565b6001600160a01b038086166000908152600660209081526040808320938816835292905220546129de9083612f87565b6001600160a01b03868116600090815260066020908152604080832089851684529091528082209390935590851681522054612a1a9083612faa565b6001600160a01b0380871660008181526006602090815260408083208986168085529252918290209490945551918716917f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a90612a78908790613e0c565b60405180910390a45050505050565b6060856001600160401b0381118015612a9f57600080fd5b50604051908082528060200260200182016040528015612ac9578160200160208202803683370190505b5090508560005b81811015612b98576000878783818110612ae657fe5b905060200201359050620186a0612b0760328361316c90919063ffffffff16565b81612b0e57fe5b04848381518110612b1b57fe5b602002602001018181525050612b8f8c8c84818110612b3657fe5b9050602002016020810190612b4b919061345f565b898985818110612b5757fe5b905060200201358c8c86818110612b6a57fe5b9050602002016020810190612b7f919061345f565b6001600160a01b031691906131a3565b50600101612ad0565b5060405163d9d1762360e01b81526001600160a01b038c169063d9d1762390612bd39033908c908c908c908c908a908d908d90600401613bdc565b600060405180830381600087803b158015612bed57600080fd5b505af1158015612c01573d6000803e3d6000fd5b5050505060005b81811015611d9a576000898983818110612c1e57fe5b9050602002016020810190612c33919061345f565b9050612c7b612c54858481518110612c4757fe5b6020026020010151612dfe565b6001600160a01b0383166000908152600760205260409020906001600160801b03166132c2565b612c8482612edf565b1015612ca25760405162461bcd60e51b8152600401610636906143a8565b8b8b83818110612cae57fe5b9050602002016020810190612cc3919061345f565b6001600160a01b0316816001600160a01b03168e6001600160a01b03167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a2232048b8b87818110612d0d57fe5b90506020020135888781518110612d2057fe5b6020026020010151604051612d36929190614502565b60405180910390a450600101612c08565b600660209081526000928352604080842090915290825290205481565b82516000906001600160801b0316612d7d575081612df7565b835160208501516001600160801b0391821691612d9c9186911661316c565b81612da357fe5b049050818015612de757508284602001516001600160801b0316612ddd86600001516001600160801b03168461316c90919063ffffffff16565b81612de457fe5b04105b15612df757611261816001612faa565b9392505050565b60006001600160801b03821115612e275760405162461bcd60e51b815260040161063690614049565b5090565b8181016001600160801b038083169082161015612e5a5760405162461bcd60e51b815260040161063690614080565b92915050565b600083602001516001600160801b031660001415612e7f575081612df7565b602084015184516001600160801b0391821691612e9e9186911661316c565b81612ea557fe5b049050818015612de757508284600001516001600160801b0316612ddd86602001516001600160801b03168461316c90919063ffffffff16565b6001600160a01b0381166000818152600a60205260408082205490516370a0823160e01b81529192612e5a92600160801b9092046001600160801b0316916370a0823190612f31903090600401613bc8565b60206040518083038186803b158015612f4957600080fd5b505afa158015612f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f819190613a1f565b90612faa565b80820382811115612e5a5760405162461bcd60e51b815260040161063690613eb2565b81810181811015612e5a5760405162461bcd60e51b815260040161063690614080565b60006060856001600160a01b03166323b872dd60e01b868686604051602401612ff893929190613ce9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516130369190613b82565b6000604051808303816000865af19150503d8060008114613073576040519150601f19603f3d011682016040523d82523d6000602084013e613078565b606091505b50915091508180156130a25750805115806130a25750808060200190518101906130a29190613644565b6130be5760405162461bcd60e51b81526004016106369061433c565b505050505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fd7df266aff736d415a9dc14b4158201d612e70d75b9c7f4e375ccfd20aa5166f833060405160200161311f9493929190613e49565b6040516020818303038152906040528051906020012090505b919050565b8082036001600160801b038084169082161115612e5a5760405162461bcd60e51b815260040161063690613eb2565b60008115806131875750508082028282828161318457fe5b04145b612e5a5760405162461bcd60e51b815260040161063690614446565b60006060846001600160a01b031663a9059cbb60e01b85856040516024016131cc929190613d4e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161320a9190613b82565b6000604051808303816000865af19150503d8060008114613247576040519150601f19603f3d011682016040523d82523d6000602084013e61324c565b606091505b50915091508180156132765750805115806132765750808060200190518101906132769190613644565b6132925760405162461bcd60e51b815260040161063690613f86565b5050505050565b60006001600160401b03821115612e275760405162461bcd60e51b8152600401610636906141f4565b60006132e16132d083612dfe565b84546001600160801b031690612e2b565b83546001600160801b0319166001600160801b03919091169081179093555090919050565b60006132e161331483612dfe565b84546001600160801b03169061313d565b606060448251101561336b575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c790000006020820152613138565b60048201915081806020019051810190612e5a9190613a37565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b60008083601f8401126133cd578182fd5b5081356001600160401b038111156133e3578182fd5b60208301915083602080830285010111156133fd57600080fd5b9250929050565b60008083601f840112613415578182fd5b5081356001600160401b0381111561342b578182fd5b6020830191508360208285010111156133fd57600080fd5b8035612e5a816145d0565b803560ff81168114612e5a57600080fd5b600060208284031215613470578081fd5b8135612df7816145d0565b6000806040838503121561348d578081fd5b8235613498816145d0565b915060208301356134a8816145d0565b809150509250929050565b60008060008060008060c087890312156134cb578182fd5b86356134d6816145d0565b955060208701356134e6816145d0565b945060408701356134f6816145e8565b9350613505886060890161344e565b92506080870135915060a087013590509295509295509295565b60008060408385031215613531578182fd5b823561353c816145d0565b915060208301356134a8816145e8565b600080600060608486031215613560578283fd5b833561356b816145d0565b9250602084013561357b816145e8565b9150604084013561358b816145e8565b809150509250925092565b600080600080606085870312156135ab578384fd5b84356135b6816145d0565b935060208501356001600160401b038111156135d0578384fd5b6135dc87828801613404565b90945092505060408501356135f0816145e8565b939692955090935050565b60008060006040848603121561360f578081fd5b83356001600160401b03811115613624578182fd5b613630868287016133bc565b909450925050602084013561358b816145e8565b600060208284031215613655578081fd5b8151612df7816145e8565b600080600080600080600080600060a08a8c03121561367d578687fd5b8935613688816145d0565b985060208a01356001600160401b03808211156136a3578889fd5b6136af8d838e016133bc565b909a50985060408c01359150808211156136c7578485fd5b6136d38d838e016133bc565b909850965060608c01359150808211156136eb578485fd5b6136f78d838e016133bc565b909650945060808c013591508082111561370f578384fd5b5061371c8c828d01613404565b915080935050809150509295985092959850929598565b6000806040838503121561348d578182fd5b6000806000806080858703121561375a578182fd5b8435613765816145d0565b93506020850135613775816145d0565b92506040850135613785816145d0565b9396929550929360600135925050565b600080600080600060a086880312156137ac578283fd5b85356137b7816145d0565b945060208601356137c7816145d0565b935060408601356137d7816145d0565b94979396509394606081013594506080013592915050565b600080600080600080600080610100898b03121561380b578182fd5b8835613816816145d0565b97506020890135613826816145d0565b96506040890135613836816145d0565b955060608901359450608089013593506138538a60a08b0161344e565b925060c0890135915060e089013590509295985092959890939650565b60008060008060008060808789031215613888578384fd5b8635613893816145d0565b955060208701356138a3816145d0565b945060408701356001600160401b03808211156138be578586fd5b6138ca8a838b016133bc565b909650945060608901359150808211156138e2578384fd5b506138ef89828a016133bc565b979a9699509497509295939492505050565b600080600060608486031215613915578081fd5b8335613920816145d0565b92506020840135613930816145e8565b929592945050506040919091013590565b600080600060608486031215613955578081fd5b8335613960816145d0565b925060208401359150604084013561358b816145e8565b60008060408385031215613989578182fd5b8235613994816145d0565b915060208301356001600160401b03811681146134a8578182fd5b60008060008060008060a087890312156139c7578384fd5b86356139d2816145d0565b955060208701356139e2816145d0565b945060408701356139f2816145d0565b93506060870135925060808701356001600160401b03811115613a13578283fd5b6138ef89828a01613404565b600060208284031215613a30578081fd5b5051919050565b600060208284031215613a48578081fd5b81516001600160401b0380821115613a5e578283fd5b818401915084601f830112613a71578283fd5b815181811115613a7f578384fd5b604051601f8201601f191681016020018381118282101715613a9f578586fd5b604052818152838201602001871015613ab6578485fd5b613ac78260208301602087016145a0565b9695505050505050565b6001600160a01b0316815260200190565b6000815180845260208085019450808401835b83811015613b1157815187529582019590820190600101613af5565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452613b5e8160208601602086016145a0565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b60008251613b948184602087016145a0565b9190910192915050565b60008451613bb08184602089016145a0565b91909101928352506020820152604001919050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038916815260a0602080830182905260009183019081613c038b82613e0c565b90508b9250835b8b811015613c3557828401613c2883613c238388613443565b613ad1565b9094509150600101613c0a565b508481036040860152613c488982613e0c565b9250506001600160fb1b03881115613c5e578283fd5b8702613c6b81838b614594565b018281036060840152613c7e8187613ae2565b90508281036080840152613c93818587613b1c565b9b9a5050505050505050505050565b6001600160a01b03878116825286166020820152604081018590526060810184905260a060808201819052600090613cdd9083018486613b1c565b98975050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015613da2578151151584529284019290840190600101613d84565b50505083810382850152808551613db98184613e0c565b91508192508381028201848801865b83811015613df2578583038552613de0838351613b46565b94870194925090860190600101613dc8565b50909998505050505050505050565b901515815260200190565b90815260200190565b95865260208601949094526001600160a01b039283166040860152911660608401521515608083015260a082015260c00190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252611261602083018486613b1c565b600060208252612df76020830184613b46565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b60208082526017908201527f42656e746f426f783a20536b696d20746f6f206d756368000000000000000000604082015260600190565b6020808252601c908201527f4d6173746572434d67723a2043616e6e6f7420617070726f7665203000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a2075736572206e6f742073656e6465720000000000604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526016908201527542656e746f426f783a2063616e6e6f7420656d70747960501b604082015260600190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526013908201527242656e746f426f783a204e6f20746f6b656e7360681b604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20746f5b305d206e6f7420736574000000000000000000604082015260600190565b60208082526014908201527310995b9d1bd09bde0e881d1bc81b9bdd081cd95d60621b604082015260600190565b6020808252601a908201527f53747261746567794d616e616765723a20546f6f206561726c79000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f42656e746f426f783a205472616e73666572206e6f7420617070726f76656400604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526019908201527f4d6173746572434d67723a207573657220697320636c6f6e6500000000000000604082015260600190565b6020808252601d908201527f4d6173746572434d67723a20496e76616c6964205369676e6174757265000000604082015260600190565b6020808252818101527f426f72696e67466163746f72793a204e6f206d6173746572436f6e7472616374604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206d617374657243206e6f74207365740000000000604082015260600190565b6020808252601b908201527f42656e746f426f783a206e6f206d6173746572436f6e74726163740000000000604082015260600190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b6020808252601c908201527f4d6173746572434d67723a20557365722063616e6e6f74206265203000000000604082015260600190565b60208082526016908201527510995b9d1bd09bde0e8815dc9bdb99c8185b5bdd5b9d60521b604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206e6f742077686974656c69737465640000000000604082015260600190565b6020808252601d908201527f42656e746f426f783a20455448207472616e73666572206661696c6564000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f53747261746567794d616e616765723a2054617267657420746f6f2068696768604082015260600190565b6001600160801b0391909116815260200190565b6001600160801b039290921682526001600160a01b0316602082015260400190565b6001600160801b0392831681529116602082015260400190565b918252602082015260400190565b6001600160401b0391909116815260200190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b6000808335601e19843603018112614566578283fd5b8301803591506001600160401b0382111561457f578283fd5b6020019150368190038213156133fd57600080fd5b82818337506000910152565b60005b838110156145bb5781810151838201526020016145a3565b838111156145ca576000848401525b50505050565b6001600160a01b03811681146145e557600080fd5b50565b80151581146145e557600080fdfea2646970667358221220c1f34dbde2920a9b57ede9837acdb33d047fc59405ea848838a92b455f55c95764736f6c634300060c00330000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270