8 txs
8 calls
constructor
constructor(address _protocolAdmin, address _shekelToken, address _shekelStakingContract, address _lockerFactory, address _cbBTCAddress, address deployer, uint256 initialCreationFee, uint256 initialStakingRequirement, uint256 initialPersonalFundCreationFee, uint256 initialPersonalFundStakingRequirement)
functions
getCbBTCAddress
viewfunction getCbBTCAddress() view returns (address)
getCreationFee
viewfunction getCreationFee() view returns (uint256)
getDeployer
viewfunction getDeployer() view returns (address)
getGlobalParams
viewfunction getGlobalParams() view returns (tuple)
getPersonalFundCreationFee
viewfunction getPersonalFundCreationFee() view returns (uint256)
getPersonalFundStakingRequirement
viewfunction getPersonalFundStakingRequirement() view returns (uint256)
getStakingRequirement
viewfunction getStakingRequirement() view returns (uint256)
isFundContract
viewfunction isFundContract(address contractAddress) view returns (bool)
owner
viewfunction owner() view returns (address)
createFund
nonpayablefunction createFund(uint256 fundraisingGoal, string name, string symbol, uint256 fundraisingDeadline, uint256 fundExpiry, address kosherManager, uint256 maxWhitelistAmount, uint256 maxPublicContributionAmount, bool isCbBTCFund, uint256 stakeRequiredPerContribution) returns (address)
createPersonalizedFunds
nonpayablefunction createPersonalizedFunds(bool isCbBTCFund, address aiWallet) returns (address)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateCbBTCAddress
nonpayablefunction updateCbBTCAddress(address newCbBTCAddress)
updateCreationFee
nonpayablefunction updateCreationFee(uint256 newFee)
updateDeployer
nonpayablefunction updateDeployer(address newDeployer)
updateGlobalParams
nonpayablefunction updateGlobalParams(tuple newParams)
updateLockerFactory
nonpayablefunction updateLockerFactory(address newLockerFactory)
updatePersonalFundCreationFee
nonpayablefunction updatePersonalFundCreationFee(uint256 newFee)
updatePersonalFundStakingRequirement
nonpayablefunction updatePersonalFundStakingRequirement(uint256 newRequirement)
updateProtocolAdmin
nonpayablefunction updateProtocolAdmin(address newProtocolAdmin)
updateShekelStakingContract
nonpayablefunction updateShekelStakingContract(address newShekelStakingContract)
updateShekelToken
nonpayablefunction updateShekelToken(address newShekelToken)
updateStakingRequirement
nonpayablefunction updateStakingRequirement(uint256 newRequirement)
withdrawFees
nonpayablefunction withdrawFees()
events
CbBTCAddressUpdated
event CbBTCAddressUpdated(address newCbBTCAddress)
CreationFeeUpdated
event CreationFeeUpdated(uint256 oldFee, uint256 newFee)
DeployerUpdated
event DeployerUpdated(address oldDeployer, address newDeployer)
FundCreated
event FundCreated(address indexed fundAddress, string name, string symbol)
GlobalParamsUpdated
event GlobalParamsUpdated((address protocolAdmin, address shekelToken, address shekelStakingContract, address lockerFactory, address cbBTCAddress) newParams)
LockerFactoryUpdated
event LockerFactoryUpdated(address newLockerFactory)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PersonalFundCreated
event PersonalFundCreated(address indexed fundAddress, address indexed owner, bool isCbBTCFund)
PersonalFundCreationFeeUpdated
event PersonalFundCreationFeeUpdated(uint256 oldFee, uint256 newFee)
PersonalFundStakingRequirementUpdated
event PersonalFundStakingRequirementUpdated(uint256 oldRequirement, uint256 newRequirement)
ProtocolAdminUpdated
event ProtocolAdminUpdated(address newProtocolAdmin)
ShekelStakingContractUpdated
event ShekelStakingContractUpdated(address newShekelStakingContract)
ShekelTokenUpdated
event ShekelTokenUpdated(address newShekelToken)
StakingRequirementUpdated
event StakingRequirementUpdated(uint256 oldRequirement, uint256 newRequirement)
errors
DeploymentFailed
error DeploymentFailed()
FeeTransferFailed
error FeeTransferFailed()
FundAlreadyExists
error FundAlreadyExists()
InsufficientFee
error InsufficientFee()
InsufficientStake
error InsufficientStake()
InvalidAddress
error InvalidAddress()
InvalidDeadline
error InvalidDeadline()
InvalidFundExpiry
error InvalidFundExpiry()
InvalidFundraisingGoal
error InvalidFundraisingGoal()
InvalidStakeRequirement
error InvalidStakeRequirement()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
Unauthorized
error Unauthorized()
creation bytecode
0x608060405234801561001057600080fd5b5060405161609538038061609583398101604081905261002f91610264565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e816101f8565b50600180556001600160a01b038a1661008a5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0389166100b15760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0388166100d85760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0387166100ff5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166101265760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b03851661014d5760405163e6c4247b60e01b815260040160405180910390fd5b6040805160a0810182526001600160a01b039b8c168082529a8c1660208201819052998c16918101829052978b1660608901819052968b166080909801889052600280546001600160a01b0319908116909b179055600380548b16909917909855600480548a16909817909755600580548916909517909455600680548816909517909455600b80549096169190961617909355600793909355600892909255600955600a55610306565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461025f57600080fd5b919050565b6000806000806000806000806000806101408b8d03121561028457600080fd5b61028d8b610248565b995061029b60208c01610248565b98506102a960408c01610248565b97506102b760608c01610248565b96506102c560808c01610248565b95506102d360a08c01610248565b60c08c015160e08d01516101008e0151610120909e01519c9f9b9e50999c989b979a919990989097909650945092505050565b615d80806103156000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636fa23795116100de578063a20d837311610097578063ea264f7711610071578063ea264f77146103c4578063eb637b14146103d7578063f2d853ce146103ea578063f2fde38b146103fd57600080fd5b8063a20d8373146103a1578063c1d3be8b146103a9578063db07b68e146103bc57600080fd5b80636fa2379514610340578063715018a614610353578063718527101461035b578063726305311461036e5780638da5cb5b1461037f57806397871fa21461039057600080fd5b80634b25fb80116101305780634b25fb80146102265780634d413e7d1461023957806354eb31b21461024c578063644d466e1461025f57806365a7f0c0146102725780636b3222e61461027a57600080fd5b8063022fc40e146101785780630ceb1f671461018d57806318b07ca2146101ce5780633797389b146101e157806339d064a3146101f3578063476343ee1461021e575b600080fd5b61018b61018636600461126d565b610410565b005b6101b961019b36600461126d565b6001600160a01b03166000908152600c602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61018b6101dc36600461126d565b610494565b6009545b6040519081526020016101c5565b61020661020136600461134f565b610511565b6040516001600160a01b0390911681526020016101c5565b61018b61088f565b61018b61023436600461126d565b6109e9565b61018b61024736600461126d565b610a66565b61018b61025a36600461141b565b610af7565b61018b61026d36600461126d565b610b3d565b6008546101e5565b6102f16040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526002546001600160a01b0390811682526003548116602083015260045481169282019290925260055482166060820152600654909116608082015290565b6040516101c5919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61018b61034e36600461141b565b610bba565b61018b610c00565b61018b61036936600461141b565b610c14565b600b546001600160a01b0316610206565b6000546001600160a01b0316610206565b6006546001600160a01b0316610206565b600a546101e5565b61018b6103b736600461126d565b610c5a565b6007546101e5565b61018b6103d236600461141b565b610cd7565b6102066103e5366004611434565b610d1d565b61018b6103f836600461146d565b610ff5565b61018b61040b36600461126d565b611156565b610418611194565b6001600160a01b03811661043f5760405163e6c4247b60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff557bdcdfe8b1184f10c6fe9ac7189955b6b8089703e203dfa50743216ade04a906020015b60405180910390a150565b61049c611194565b6001600160a01b0381166104c35760405163e6c4247b60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f9eede2b97f6e764caab5e2e33dfed38de6b083a3a863094daa0e868e3c6fae6b90602001610489565b600061051b6111c1565b8a60000361053c57604051632d47cb8f60e11b815260040160405180910390fd5b42881161055c57604051631da7447960e21b815260040160405180910390fd5b87871161057c57604051639ae7e6a760e01b815260040160405180910390fd5b8160000361059d5760405163c195a09760e01b815260040160405180910390fd5b6001600160a01b0386166105c45760405163e6c4247b60e01b815260040160405180910390fd5b600480546040516326d352ab60e11b815233928101929092526000916001600160a01b0390911690634da6a55690602401602060405180830381865afa158015610612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106369190611488565b905060085481101561065b576040516378de4a6960e11b815260040160405180910390fd5b6003546007546040516323b872dd60e01b815233600482015230602482015260448101919091526000916001600160a01b0316906323b872dd906064016020604051808303816000875af11580156106b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106db91906114a1565b9050806106fb57604051634033e4e360e01b815260040160405180910390fd5b604080516101c0810182528e8152602081018e90528082018d9052606081018c9052608081018b90526001600160a01b03808b1660a083015260c082018a9052600254811660e08301526101008201899052871515610120830152610140820187905260035481166101608301526004548116610180830152600554166101a08201529051600090829061078e9061123b565b6107989190611504565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b506001600160a01b0381166000908152600c602052604090205490915060ff16156107f25760405163065ddb1960e21b815260040160405180910390fd5b6001600c6000836001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550806001600160a01b03167faac40c8ecf116edb56b3915e304904e16086b229e0cc4d0db093edc816513c1d8f8f60405161086b929190611621565b60405180910390a2935050505061088160018055565b9a9950505050505050505050565b610897611194565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156108e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109049190611488565b9050600081116109515760405162461bcd60e51b81526020600482015260136024820152724e6f206665657320746f20776974686472617760681b60448201526064015b60405180910390fd5b6003546001600160a01b031663a9059cbb6109746000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156109c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e591906114a1565b5050565b6109f1611194565b6001600160a01b038116610a185760405163e6c4247b60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f85fd02827b52938b46618cf0daa3e7bb12d3d0685da78cbd4b7ca66edb6ce92890602001610489565b610a6e611194565b6001600160a01b038116610a955760405163e6c4247b60e01b815260040160405180910390fd5b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4590909f6ea280ffff8f32337577f35ec6cbec73ab17ad9723c587bf0af57d6691015b60405180910390a15050565b610aff611194565b600880549082905560408051828152602081018490527f0c3453b502a059562b2bb38e06ab018bf9990d0ae002b05c34a5ba2d0cd539e79101610aeb565b610b45611194565b6001600160a01b038116610b6c5760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040519081527fcf408869205d9189df3f690f4cdd2c44ff53a360bbe7a26fe9f9cc890edbc7ed90602001610489565b610bc2611194565b600780549082905560408051828152602081018490527f5de302eeb1c80d4fb0c0953b692353f09ddf431411b8eb2034d5e857695619129101610aeb565b610c08611194565b610c1260006111eb565b565b610c1c611194565b600a80549082905560408051828152602081018490527ffc92e0edf16d7033d8d2906b76f3d270faa613855852c9e547318fd65cbe500d9101610aeb565b610c62611194565b6001600160a01b038116610c895760405163e6c4247b60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f1af81a401acf01a36af32532151690df1252f468decdeb32a9252e7e15d0a30f90602001610489565b610cdf611194565b600980549082905560408051828152602081018490527f89aa4e952160c521708c0f3e6f9264bb26645ef6c8914952ad0ff5531de78a189101610aeb565b6000610d276111c1565b6001600160a01b038216610d4e5760405163e6c4247b60e01b815260040160405180910390fd5b600480546040516326d352ab60e11b815233928101929092526000916001600160a01b0390911690634da6a55690602401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc09190611488565b9050600a54811015610de5576040516378de4a6960e11b815260040160405180910390fd5b6003546009546040516323b872dd60e01b815233600482015230602482015260448101919091526000916001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6591906114a1565b905080610e8557604051634033e4e360e01b815260040160405180910390fd5b600b546002546006546040516361a16fb360e11b81523360048201526001600160a01b039283166024820152881515604482015287831660648201529082166084820152600092919091169063c342df669060a4016020604051808303816000875af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061164f565b90506001600160a01b038116610f4657604051633011642560e01b815260040160405180910390fd5b6001600160a01b0381166000908152600c602052604090205460ff1615610f805760405163065ddb1960e21b815260040160405180910390fd5b6001600160a01b0381166000818152600c602052604090819020805460ff19166001179055513391907f3e610b94d8de02093025e922cd925a9bea9541f9a26f8ab80cf72a906ae65d2590610fda908a1515815260200190565b60405180910390a392505050610fef60018055565b92915050565b610ffd611194565b600061100c602083018361126d565b6001600160a01b0316036110335760405163e6c4247b60e01b815260040160405180910390fd5b6000611045604083016020840161126d565b6001600160a01b03160361106c5760405163e6c4247b60e01b815260040160405180910390fd5b600061107e606083016040840161126d565b6001600160a01b0316036110a55760405163e6c4247b60e01b815260040160405180910390fd5b60006110b7608083016060840161126d565b6001600160a01b0316036110de5760405163e6c4247b60e01b815260040160405180910390fd5b60006110f060a083016080840161126d565b6001600160a01b0316036111175760405163e6c4247b60e01b815260040160405180910390fd5b806002611124828261168c565b9050507fa7763c7b78f2d0fe8fa5dc853b07ffa5263a46325575b2d4a36359cfc82cee23816040516104899190611716565b61115e611194565b6001600160a01b03811661118857604051631e4fbdf760e01b815260006004820152602401610948565b611191816111eb565b50565b6000546001600160a01b03163314610c125760405163118cdaa760e01b8152336004820152602401610948565b6002600154036111e457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6145a0806117ab83390190565b6001600160a01b038116811461119157600080fd5b803561126881611248565b919050565b60006020828403121561127f57600080fd5b813561128a81611248565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126112b857600080fd5b813567ffffffffffffffff8111156112d2576112d2611291565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561130157611301611291565b60405281815283820160200185101561131957600080fd5b816020850160208301376000918101602001919091529392505050565b801515811461119157600080fd5b803561126881611336565b6000806000806000806000806000806101408b8d03121561136f57600080fd5b8a35995060208b013567ffffffffffffffff81111561138d57600080fd5b6113998d828e016112a7565b99505060408b013567ffffffffffffffff8111156113b657600080fd5b6113c28d828e016112a7565b98505060608b0135965060808b013595506113df60a08c0161125d565b945060c08b0135935060e08b013592506113fc6101008c01611344565b915060006101208c01359050809150509295989b9194979a5092959850565b60006020828403121561142d57600080fd5b5035919050565b6000806040838503121561144757600080fd5b823561145281611336565b9150602083013561146281611248565b809150509250929050565b600060a082840312801561148057600080fd5b509092915050565b60006020828403121561149a57600080fd5b5051919050565b6000602082840312156114b357600080fd5b815161128a81611336565b6000815180845260005b818110156114e4576020818501810151868301820152016114c8565b506000602082860101526020601f19601f83011685010191505092915050565b6020815281516020820152600060208301516101c0604084015261152c6101e08401826114be565b90506040840151601f1984830301606085015261154982826114be565b91505060608401516080840152608084015160a084015260a084015161157a60c08501826001600160a01b03169052565b5060c084015160e084015260e08401516115a06101008501826001600160a01b03169052565b506101008401516101208401526101208401516115c261014085018215159052565b506101408401516101608401526101608401516115eb6101808501826001600160a01b03169052565b506101808401516001600160a01b0381166101a0850152506101a08401516001600160a01b0381166101c0850152509392505050565b60408152600061163460408301856114be565b828103602084015261164681856114be565b95945050505050565b60006020828403121561166157600080fd5b815161128a81611248565b80546001600160a01b0319166001600160a01b0392909216919091179055565b813561169781611248565b6116a1818361166c565b5060208201356116b081611248565b6116bd816001840161166c565b5060408201356116cc81611248565b6116d9816002840161166c565b5060608201356116e881611248565b6116f5816003840161166c565b50608082013561170481611248565b611711816004840161166c565b505050565b60a08101823561172581611248565b6001600160a01b03168252602083013561173e81611248565b6001600160a01b03166020830152604083013561175a81611248565b6001600160a01b03166040830152606083013561177681611248565b6001600160a01b03166060830152608083013561179281611248565b6001600160a01b03166080929092019190915291905056fe6101a060405262127500608052683635c9adc5dea0000060a05261271060c0526a52b7d2dcc80cd2e400000060e0526b033b2e3c9fd0803ce8000000610100526002805460ff60a01b1916604b60a01b17905534801561005e57600080fd5b506040516145a03803806145a083398101604081905261007d916105f1565b60a08101516001600160a01b0381166100b057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100b981610481565b506001805580516000036100e057604051632d47cb8f60e11b815260040160405180910390fd5b4281606001511161010457604051631da7447960e21b815260040160405180910390fd5b806060015181608001511161012c576040516302a0464f60e51b815260040160405180910390fd5b8061014001516000036101525760405163c195a09760e01b815260040160405180910390fd5b6101608101516001600160a01b031661017e5760405163e6c4247b60e01b815260040160405180910390fd5b6101808101516001600160a01b03166101aa5760405163e6c4247b60e01b815260040160405180910390fd5b6101a08101516001600160a01b03166101d65760405163e6c4247b60e01b815260040160405180910390fd5b610160808201516001600160a01b03908116610120526101808301518116610140526101a0830151169052602081015160119061021390826107c1565b50604081015160129061022690826107c1565b5080516005556060810151600755608081015160085560c0810151600a5560e0810151600380546001600160a01b0319166001600160a01b03909216919091179055610100810151600b55610120810151600d805460ff60a01b1916600160a01b92151583021790819055610140830151600c55336101805260ff91900416156102d157600280546001600160a01b03191673cbb7c0000ab88b473b1f5afd9ef808440eed33bf1790555b61016081015160035460085460405163fddaec4960e01b81526001600160a01b03938416600482015292909116602483015260448201527349549b81c1e89f568196566a31c89fee432c15b99063fddaec49906064016020604051808303816000875af1158015610346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036a919061087f565b600f80546001600160a01b0319166001600160a01b039290921691821790556040519081527f4d034e7999b73c980126bf84dde16d9a4c8432586a8e50e56c93bb965f4b974b9060200160405180910390a160e081015160c082015160a0830151604051631b36797d60e31b81526001600160a01b03938416600482015260248101929092529190911660448201527349549b81c1e89f568196566a31c89fee432c15b99063d9b3cbe8906064016020604051808303816000875af1158015610437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045b919061087f565b601080546001600160a01b0319166001600160a01b0392909216919091179055506108a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b6040516101c081016001600160401b038111828210171561050a5761050a6104d1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610538576105386104d1565b604052919050565b600082601f83011261055157600080fd5b81516001600160401b0381111561056a5761056a6104d1565b61057d601f8201601f1916602001610510565b81815284602083860101111561059257600080fd5b60005b828110156105b157602081860181015183830182015201610595565b506000918101602001919091529392505050565b80516001600160a01b03811681146105dc57600080fd5b919050565b805180151581146105dc57600080fd5b60006020828403121561060357600080fd5b81516001600160401b0381111561061957600080fd5b82016101c0818503121561062c57600080fd5b6106346104e7565b8151815260208201516001600160401b0381111561065157600080fd5b61065d86828501610540565b60208301525060408201516001600160401b0381111561067c57600080fd5b61068886828501610540565b60408301525060608281015190820152608080830151908201526106ae60a083016105c5565b60a082015260c082810151908201526106c960e083016105c5565b60e082015261010082810151908201526106e661012083016105e1565b610120820152610140828101519082015261070461016083016105c5565b61016082015261071761018083016105c5565b61018082015261072a6101a083016105c5565b6101a0820152949350505050565b600181811c9082168061074c57607f821691505b60208210810361076c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156107bc57806000526020600020601f840160051c810160208510156107995750805b601f840160051c820191505b818110156107b957600081556001016107a5565b50505b505050565b81516001600160401b038111156107da576107da6104d1565b6107ee816107e88454610738565b84610772565b6020601f821160018114610822576000831561080a5750848201515b600019600385901b1c1916600184901b1784556107b9565b600084815260208120601f198516915b828110156108525787850151825560209485019460019092019101610832565b50848210156108705786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561089157600080fd5b61089a826105c5565b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161018051613c506109506000396000818161069001526112ff01526000612af40152600061126801526000818161187601528181611ecc01528181611f58015281816124850152818161280f015261293f01526000818161169b01526125570152600081816124d801526129a401526000818161283a015261296801526000612700015260006126da0152613c506000f3fe60806040526004361061024a5760003560e01c806374c515ae11610139578063c1cbbca7116100b6578063d1e56e541161007a578063d1e56e54146106f0578063d962904914610705578063ed3655eb14610723578063f0c5d54914610741578063f2fde38b14610756578063f47586861461077657600080fd5b8063c1cbbca714610656578063c2b7d79f14610669578063c45a01551461067e578063c6e5546c146106b2578063d07f8482146106d257600080fd5b80638da5cb5b116100fd5780638da5cb5b146105d9578063947fe812146105f757806395d89b41146106175780639f5502931461062c578063bb2e37e51461064157600080fd5b806374c515ae1461054557806375d8d68d146105645780638153f8f81461057957806383694cf01461059957806384d4875e146105b957600080fd5b80633f2ff8bd116101c7578063590e1ae31161018b578063590e1ae3146104c857806364e9a9b6146104dd57806366a10368146104f2578063715018a61461051057806372e041a01461052557600080fd5b80633f2ff8bd14610413578063421aef371461043a578063541d45e71461046857806356e1b2cf1461047d57806357fbcda51461049257600080fd5b80632109db591161020e5780632109db591461037f57806327c5425c1461039f5780632b517d21146103be5780632ea44681146103d35780633a008606146103f357600080fd5b806306fdde0314610294578063150b7a02146102bf5780631aadcf46146103045780631af1a502146103365780631b8df5861461035657600080fd5b3661028f57600654610100900460ff16158015610268575060075442105b801561027e5750600d54600160a01b900460ff16155b1561028d5761028d600061078e565b005b600080fd5b3480156102a057600080fd5b506102a9610b48565b6040516102b691906130d5565b60405180910390f35b3480156102cb57600080fd5b506102eb6102da3660046130fd565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016102b6565b34801561031057600080fd5b50600f546001600160a01b03165b6040516001600160a01b0390911681526020016102b6565b34801561034257600080fd5b5061028d61035136600461319e565b610bd6565b34801561036257600080fd5b50600654610100900460ff165b60405190151581526020016102b6565b34801561038b57600080fd5b5061028d61039a36600461319e565b610c9f565b3480156103ab57600080fd5b50600d54600160a01b900460ff1661036f565b3480156103ca57600080fd5b5061028d610d74565b3480156103df57600080fd5b5061028d6103ee36600461319e565b610e20565b3480156103ff57600080fd5b5061028d61040e36600461319e565b610ee7565b34801561041f57600080fd5b507349549b81c1e89f568196566a31c89fee432c15b961031e565b34801561044657600080fd5b5061045a6104553660046131b7565b611196565b6040519081526020016102b6565b34801561047457600080fd5b5060085461045a565b34801561048957600080fd5b5061028d6112fd565b34801561049e57600080fd5b5061045a6104ad3660046131b7565b6001600160a01b031660009081526016602052604090205490565b3480156104d457600080fd5b5061028d611512565b3480156104e957600080fd5b5060075461045a565b3480156104fe57600080fd5b50600d546001600160a01b031661031e565b34801561051c57600080fd5b5061028d61161f565b34801561053157600080fd5b5061028d6105403660046131e3565b611631565b34801561055157600080fd5b50601054600160a01b900460ff1661036f565b34801561057057600080fd5b5061028d611724565b34801561058557600080fd5b5061028d61059436600461319e565b6117ad565b3480156105a557600080fd5b5061028d6105b436600461319e565b611814565b3480156105c557600080fd5b5061028d6105d436600461319e565b61194d565b3480156105e557600080fd5b506000546001600160a01b031661031e565b34801561060357600080fd5b5061028d610612366004613270565b611996565b34801561062357600080fd5b506102a9611b3c565b34801561063857600080fd5b5060045461045a565b34801561064d57600080fd5b5061028d611b49565b61028d61066436600461319e565b61078e565b34801561067557600080fd5b5060055461045a565b34801561068a57600080fd5b5061031e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106be57600080fd5b5061028d6106cd366004613316565b61201e565b3480156106de57600080fd5b506009546001600160a01b031661031e565b3480156106fc57600080fd5b50600c5461045a565b34801561071157600080fd5b506010546001600160a01b031661031e565b34801561072f57600080fd5b50600e546001600160a01b031661031e565b34801561074d57600080fd5b50600b5461045a565b34801561076257600080fd5b5061028d6107713660046131b7565b6121a6565b34801561078257600080fd5b5060065460ff1661036f565b6107966121e1565b600654610100900460ff16156107bf57604051631df969b760e01b815260040160405180910390fd5b60075442106107e15760405163e478792360e01b815260040160405180910390fd5b600d54600090600160a01b900460ff1615610855573415610814576040516248c6b960e61b815260040160405180910390fd5b816000036108355760405163244d19c360e21b815260040160405180910390fd5b506002548190610850906001600160a01b031633308461220b565b610898565b346000036108765760405163652122d960e01b815260040160405180910390fd5b81156108955760405163652122d960e01b815260040160405180910390fd5b50345b600a541561096b57601054604051633af32abf60e01b81523360048201526001600160a01b0390911690633af32abf90602401602060405180830381865afa1580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c9190613338565b61092957604051630b094f2760e31b815260040160405180910390fd5b600a5433600090815260166020526040902054610947908390613370565b11156109665760405163a6bd512160e01b815260040160405180910390fd5b6109b7565b600061097633611196565b336000908152601660205260409020549091508190610996908490613370565b11156109b55760405163613abeb360e11b815260040160405180910390fd5b505b6005546004548291906109cb908390613370565b1115610a54576004546005546109e19190613383565b600d54909150600160a01b900460ff1615610a1c57610a1733610a048385613383565b6002546001600160a01b03169190612278565b610a54565b336108fc610a2a8385613383565b6040518115909202916000818181858888f19350505050158015610a52573d6000803e3d6000fd5b505b336000908152601660205260408120549003610aad57601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b031916331790555b3360009081526016602052604081208054839290610acc908490613370565b925050819055508060046000828254610ae59190613370565b909155505060405181815233907f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b9060200160405180910390a260055460045403610b3a576006805461ff0019166101001790555b5050610b4560018055565b50565b60118054610b5590613396565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8190613396565b8015610bce5780601f10610ba357610100808354040283529160200191610bce565b820191906000526020600020905b815481529060010190602001808311610bb157829003601f168201915b505050505081565b610bde6122ae565b6008548111610c0057604051639ae7e6a760e01b815260040160405180910390fd5b6008819055600d54604051630d78d28160e11b8152600481018390526001600160a01b0390911690631af1a50290602401600060405180830381600087803b158015610c4b57600080fd5b505af1158015610c5f573d6000803e3d6000fd5b505050507f4e5dd36969507fae1e69607cd3b2492dafc0c3ae1bf1c50f921a5642847fa30981604051610c9491815260200190565b60405180910390a150565b6000546001600160a01b03163314801590610cc557506003546001600160a01b03163314155b15610ce35760405163ea8e4eb560e01b815260040160405180910390fd5b600654610100900460ff1615610d0c57604051631df969b760e01b815260040160405180910390fd5b6007548111610d2e5760405163d71c2da560e01b815260040160405180910390fd5b600780549082905560408051828152602081018490527fcf8355056cd2d0cfbb80a34af77420d1e6eceacc85186e561d75a1a210179a9191015b60405180910390a15050565b610d7c6121e1565b610d846122ae565b600f546001600160a01b0316610dad5760405163a86ab33d60e01b815260040160405180910390fd5b600f60009054906101000a90046001600160a01b03166001600160a01b031663a69df4b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610dfd57600080fd5b505af1158015610e11573d6000803e3d6000fd5b50505050610e1e60018055565b565b610e286122ae565b60065460ff1615610e4c57604051631c6cb8d360e21b815260040160405180910390fd5b80600003610e6d57604051632d47cb8f60e11b815260040160405180910390fd5b600454811015610e905760405163447f926160e01b815260040160405180910390fd5b60058054908290556004546006805461ff0019169184146101000291909117905560408051828152602081018490527f961c8b414cced5fba2600265359474975f844fcadb7ee9d50f7f9d19ff1711ea9101610d68565b610eef6121e1565b600854421015610f125760405163f6bc0a2960e01b815260040160405180910390fd5b80600003610f3357604051636c8dbc8560e01b815260040160405180910390fd5b6009546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fae9190613338565b50600954604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d91906133d0565b6040516370a0823160e01b815230600482015290915060009073cbb7c0000ab88b473b1f5afd9ef808440eed33bf906370a0823190602401602060405180830381865afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109691906133d0565b90506000826110a583866133e9565b6110af9190613416565b9050806000036110d25760405163136cc93360e11b815260040160405180910390fd5b60405163a9059cbb60e01b81523360048201526024810182905273cbb7c0000ab88b473b1f5afd9ef808440eed33bf9063a9059cbb906044016020604051808303816000875af115801561112a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114e9190613338565b50604080518581526020810183905233917f14a63150777b38b4fc5ed9116132ab2a2bc8357bbbc698378fd605b9eaa65907910160405180910390a2505050610b4560018055565b600a546000901561124657601054604051633af32abf60e01b81526001600160a01b03848116600483015290911690633af32abf90602401602060405180830381865afa1580156111eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120f9190613338565b61121a576000611240565b6001600160a01b038216600090815260166020526040902054600a546112409190613383565b92915050565b6040516326d352ab60e11b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000090911690634da6a55690602401602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d591906133d0565b90506000600c54826112e79190613416565b90506112f581600b546122db565b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f9190613448565b6001600160a01b0316336001600160a01b0316146113b05760405163ea8e4eb560e01b815260040160405180910390fd5b60065460ff16156113d45760405163475a253560e01b815260040160405180910390fd5b600d54600160a01b900460ff1615611478576002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561142f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145391906133d0565b90508015610b4557600354600254610b45916001600160a01b03918216911683612278565b6003546040516000916001600160a01b03169047908381818185875af1925050503d80600081146114c5576040519150601f19603f3d011682016040523d82523d6000602084013e6114ca565b606091505b5050905080610b455760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b61151a6121e1565b600654610100900460ff161561154357604051630b4d698160e01b815260040160405180910390fd5b600754421161156557604051630b4d698160e01b815260040160405180910390fd5b336000908152601660205260408120549003611594576040516307e3a5c760e01b815260040160405180910390fd5b3360009081526016602052604081208054919055600d54600160a01b900460ff16156115d6576002546115d1906001600160a01b03163383612278565b6115e0565b6115e033826122ee565b60405181815233907fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d9060200160405180910390a250610e1e60018055565b6116276122ae565b610e1e600061238c565b6116396122ae565b600654610100900460ff16611661576040516378c754c960e01b815260040160405180910390fd5b60065460ff16156116855760405163475a253560e01b815260040160405180910390fd5b6000611690826123dc565b6004549091506116c87f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a76400006133e9565b6116d29190613416565b6015556116de81612631565b6116e98185856127e2565b604051600181527fe64f408051437053caebc2ec8b10a45148f5acee3a6922908871b997f80d335d906020015b60405180910390a150505050565b61172c6121e1565b6117346122ae565b600f546001600160a01b031661175d5760405163a86ab33d60e01b815260040160405180910390fd5b600f60009054906101000a90046001600160a01b03166001600160a01b031663c4c77bda6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610dfd57600080fd5b6117b56122ae565b806000036117d65760405163c195a09760e01b815260040160405180910390fd5b600c80549082905560408051828152602081018490527f290cd4e7df75ba05266ada6bd18ad0cf12aa3ff31e30c6af92166d26c27e267e9101610d68565b61181c6121e1565b6118246122ae565b600f546001600160a01b031661184d5760405163a86ab33d60e01b815260040160405180910390fd5b600f5460405163095ea7b360e01b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af11580156118c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e59190613338565b50600f5460405163083694cf60e41b8152600481018390526001600160a01b03909116906383694cf090602401600060405180830381600087803b15801561192c57600080fd5b505af1158015611940573d6000803e3d6000fd5b50505050610b4560018055565b6000546001600160a01b0316331480159061197357506003546001600160a01b03163314155b156119915760405163ea8e4eb560e01b815260040160405180910390fd5b600b55565b61199e6122ae565b60065460ff166119c157604051633e79acbd60e11b815260040160405180910390fd5b84831415806119d05750828114155b156119ee57604051636ed7379360e11b815260040160405180910390fd5b60005b85811015611b33576000878783818110611a0d57611a0d613465565b9050602002016020810190611a2291906131b7565b6001600160a01b031603611a495760405163e6c4247b60e01b815260040160405180910390fd5b6000878783818110611a5d57611a5d613465565b9050602002016020810190611a7291906131b7565b6001600160a01b0316848484818110611a8d57611a8d613465565b90506020020135878785818110611aa657611aa6613465565b9050602002810190611ab8919061347b565b604051611ac69291906134c2565b60006040518083038185875af1925050503d8060008114611b03576040519150601f19603f3d011682016040523d82523d6000602084013e611b08565b606091505b5050905080611b2a57604051632b3f6d1160e21b815260040160405180910390fd5b506001016119f1565b50505050505050565b60128054610b5590613396565b611b516121e1565b611b596122ae565b600854421015611b7c576040516360c1868d60e01b815260040160405180910390fd5b601054600160a01b900460ff1615611ba7576040516356968a7d60e11b815260040160405180910390fd5b600d54604051632614965760e21b81527303a520b32c04bf3beef7beb72e919cf822ed34f160048201526000916001600160a01b031690639852595c90602401602060405180830381865afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2891906133d0565b9050600d60009054906101000a90046001600160a01b03166001600160a01b03166386d1a69f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c7a57600080fd5b505af1158015611c8e573d6000803e3d6000fd5b505060405163133f757160e31b815260048101849052600092507303a520b32c04bf3beef7beb72e919cf822ed34f191506399fbab889060240161018060405180830381865afa158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190613507565b50506040805160a0810182528d81526001600160801b038086166020830190815260008385018181526060850182815242608087019081529651630624e65f60e11b815295516004870152925190931660248501529151604484015251606483015291516084820152939b5099508998507303a520b32c04bf3beef7beb72e919cf822ed34f19750630c49ccbe96505060a49091019350611daa92505050565b60408051808303816000875af1158015611dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dec91906135e9565b6040805160808101825287815230602082019081526001600160801b0382840181815260608401828152945163fc6f786560e01b81529351600485015291516001600160a01b031660248401529051811660448301529151909116606482015291935091507303a520b32c04bf3beef7beb72e919cf822ed34f19063fc6f78659060840160408051808303816000875af1158015611e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb291906135e9565b50506040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3f91906133d0565b604051630852cd8d60e31b8152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611fa457600080fd5b505af1158015611fb8573d6000803e3d6000fd5b50506010805460ff60a01b1916600160a01b179055505060408051868152602081018590529081018390527fdf0c1a545ab645f93aa68abd4aa321caaf9091cc92b18e72bd3d385cbaba62719060600160405180910390a15050505050610e1e60018055565b6120266121e1565b60065460ff1661204957604051633e79acbd60e11b815260040160405180910390fd5b60155460000361206c5760405163438fb48f60e11b815260040160405180910390fd5b601354821061208e576040516392c4425960e01b815260040160405180910390fd5b60135481111561209d57506013545b8082106120bd576040516392f1b43560e01b815260040160405180910390fd5b6009546001600160a01b0316825b82811015612197576000601382815481106120e8576120e8613465565b60009182526020808320909101546001600160a01b0316808352601490915260409091205490915060ff1661218e576015546001600160a01b0382166000908152601660205260408120549091670de0b6b3a76400009161214991906133e9565b6121539190613416565b90506121696001600160a01b0385168383612278565b506001600160a01b0381166000908152601460205260409020805460ff191660011790555b506001016120cb565b50506121a260018055565b5050565b6121ae6122ae565b6001600160a01b0381166121d857604051631e4fbdf760e01b815260006004820152602401611509565b610b458161238c565b60026001540361220457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6040516001600160a01b0384811660248301528381166044830152606482018390526122729186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612cee565b50505050565b6040516001600160a01b038381166024830152604482018390526122a991859182169063a9059cbb90606401612240565b505050565b6000546001600160a01b03163314610e1e5760405163118cdaa760e01b8152336004820152602401611509565b60008282188284100282185b9392505050565b804710156123185760405163cf47918160e01b815247600482015260248101829052604401611509565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612365576040519150601f19603f3d011682016040523d82523d6000602084013e61236a565b606091505b50509050806122a95760405163d6bda27560e01b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405163bef8de1f60e01b815260009081907349549b81c1e89f568196566a31c89fee432c15b99063bef8de1f9061241e9060119060129088906004016136b0565b6020604051808303816000875af115801561243d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124619190613448565b600980546001600160a01b0319166001600160a01b038381169182179092559192507f000000000000000000000000000000000000000000000000000000000000000016116124c357604051631b97c67d60e21b815260040160405180910390fd5b6040516340c10f1960e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015281906001600160a01b038216906340c10f1990604401600060405180830381600087803b15801561252c57600080fd5b505af1158015612540573d6000803e3d6000fd5b50506040516340c10f1960e01b81523060048201527f000000000000000000000000000000000000000000000000000000000000000060248201526001600160a01b03841692506340c10f199150604401600060405180830381600087803b1580156125ab57600080fd5b505af11580156125bf573d6000803e3d6000fd5b50506006805460ff191660011790555050604080516338a80c5360e11b815290516001600160a01b0383169163715018a691600480830192600092919082900301818387803b15801561261157600080fd5b505af1158015612625573d6000803e3d6000fd5b50939695505050505050565b60007349549b81c1e89f568196566a31c89fee432c15b96001600160a01b031663aded63bb6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190613448565b604080516001600160a01b038516602482015273cbb7c0000ab88b473b1f5afd9ef808440eed33bf60448201527f000000000000000000000000000000000000000000000000000000000000000060648201527f00000000000000000000000000000000000000000000000000000000000000006084808301919091528251808303909101815260a490910182526020810180516001600160e01b031663eb990c5960e01b1790529051919250906000908390839061276990613082565b6127749291906136e6565b604051809103906000f080158015612790573d6000803e3d6000fd5b50600e80546001600160a01b0319166001600160a01b0383169081179091556040519081529091507faf264c47e57edc70c48b9909cc631216bca721afc6cc9b5a3c1489731b1523b490602001611716565b60006127f08360020b612d5f565b60405163a167129560e01b81526001600160a01b0380871660048301527f000000000000000000000000000000000000000000000000000000000000000016602482015262ffffff7f00000000000000000000000000000000000000000000000000000000000000001660448201529091506000907333128a8fc17869897dce68ed026d694621f6fdfd9063a1671295906064016020604051808303816000875af11580156128a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c79190613448565b60405163f637731d60e01b81526001600160a01b0384811660048301529192509082169063f637731d90602401600060405180830381600087803b15801561290e57600080fd5b505af1158015612922573d6000803e3d6000fd5b505060408051610160810182526001600160a01b038981168083527f000000000000000000000000000000000000000000000000000000000000000090911660208301527f000000000000000000000000000000000000000000000000000000000000000062ffffff1682840152600289810b606084015288900b60808301527f000000000000000000000000000000000000000000000000000000000000000060a08301819052600060c0840181905260e084018190526101008401523061012084015242610140840152925163095ea7b360e01b81527303a520b32c04bf3beef7beb72e919cf822ed34f160048201526024810193909352909350915063095ea7b3906044016020604051808303816000875af1158015612a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6d9190613338565b50604051634418b22b60e11b81526000907303a520b32c04bf3beef7beb72e919cf822ed34f190638831645690612aa890859060040161370a565b6080604051808303816000875af1158015612ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aeb91906137ce565b505050905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166376b5c47d7303a520b32c04bf3beef7beb72e919cf822ed34f1612b486000546001600160a01b031690565b6008546002546040516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909216602484015267ffffffffffffffff1660448301526064820186905260ff600160a01b9091041660848201523060a482015260c4016020604051808303816000875af1158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed9190613448565b604051632142170760e11b81523060048201526001600160a01b0382166024820152604481018490529091507303a520b32c04bf3beef7beb72e919cf822ed34f1906342842e0e90606401600060405180830381600087803b158015612c5257600080fd5b505af1158015612c66573d6000803e3d6000fd5b50506040516367a4d1c360e01b8152600481018590526001600160a01b03841692506367a4d1c39150602401600060405180830381600087803b158015612cac57600080fd5b505af1158015612cc0573d6000803e3d6000fd5b5050600d80546001600160a01b0319166001600160a01b039490941693909317909255505050505050505050565b600080602060008451602086016000885af180612d11576040513d6000823e3d81fd5b50506000513d91508115612d29578060011415612d36565b6001600160a01b0384163b155b1561227257604051635274afe760e01b81526001600160a01b0385166004820152602401611509565b60008060008360020b12612d76578260020b612d7e565b8260020b6000035b9050620d89e8811115612da4576040516315e4079d60e11b815260040160405180910390fd5b600081600116600003612dbb57600160801b612dcd565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615612e01576ffff97272373d413259a46990580e213a0260801c5b6004821615612e20576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e3f576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e5e576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612e7d576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612e9c576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612ebb576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612edb576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612efb576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f1b576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f3b576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f5b576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612f7b576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612f9b576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fbb576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612fdc576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612ffc576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561301b576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613038576b048a170391f7dc42444e8fa20260801c5b60008460020b131561305957806000198161305557613055613400565b0490505b64010000000081061561306d576001613070565b60005b60ff16602082901c0192505050919050565b6104108061380b83390190565b6000815180845260005b818110156130b557602081850181015186830182015201613099565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006122e7602083018461308f565b6001600160a01b0381168114610b4557600080fd5b60008060008060006080868803121561311557600080fd5b8535613120816130e8565b94506020860135613130816130e8565b935060408601359250606086013567ffffffffffffffff81111561315357600080fd5b8601601f8101881361316457600080fd5b803567ffffffffffffffff81111561317b57600080fd5b88602082840101111561318d57600080fd5b959894975092955050506020019190565b6000602082840312156131b057600080fd5b5035919050565b6000602082840312156131c957600080fd5b81356122e7816130e8565b8060020b8114610b4557600080fd5b6000806000606084860312156131f857600080fd5b8335613203816131d4565b92506020840135613213816131d4565b929592945050506040919091013590565b60008083601f84011261323657600080fd5b50813567ffffffffffffffff81111561324e57600080fd5b6020830191508360208260051b850101111561326957600080fd5b9250929050565b6000806000806000806060878903121561328957600080fd5b863567ffffffffffffffff8111156132a057600080fd5b6132ac89828a01613224565b909750955050602087013567ffffffffffffffff8111156132cc57600080fd5b6132d889828a01613224565b909550935050604087013567ffffffffffffffff8111156132f857600080fd5b61330489828a01613224565b979a9699509497509295939492505050565b6000806040838503121561332957600080fd5b50508035926020909101359150565b60006020828403121561334a57600080fd5b815180151581146122e757600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156112405761124061335a565b818103818111156112405761124061335a565b600181811c908216806133aa57607f821691505b6020821081036133ca57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156133e257600080fd5b5051919050565b80820281158282048414176112405761124061335a565b634e487b7160e01b600052601260045260246000fd5b60008261343357634e487b7160e01b600052601260045260246000fd5b500490565b8051613443816130e8565b919050565b60006020828403121561345a57600080fd5b81516122e7816130e8565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261349257600080fd5b83018035915067ffffffffffffffff8211156134ad57600080fd5b60200191503681900382131561326957600080fd5b8183823760009101908152919050565b805162ffffff8116811461344357600080fd5b8051613443816131d4565b80516001600160801b038116811461344357600080fd5b6000806000806000806000806000806000806101808d8f03121561352a57600080fd5b8c516bffffffffffffffffffffffff8116811461354657600080fd5b9b5061355460208e01613438565b9a5061356260408e01613438565b995061357060608e01613438565b985061357e60808e016134d2565b975061358c60a08e016134e5565b965061359a60c08e016134e5565b95506135a860e08e016134f0565b6101008e01516101208f0151919650945092506135c86101408e016134f0565b91506135d76101608e016134f0565b90509295989b509295989b509295989b565b600080604083850312156135fc57600080fd5b505080516020909101519092909150565b8054600090600181811c9082168061362657607f821691505b60208210810361364657634e487b7160e01b600052602260045260246000fd5b818652602086018180156136615760018114613677576136a5565b60ff198516825283151560051b820195506136a5565b60008781526020902060005b8581101561369f57815484820152600190910190602001613683565b83019650505b505050505092915050565b6060815260006136c3606083018661360d565b82810360208401526136d5818661360d565b915050826040830152949350505050565b6001600160a01b03831681526040602082018190526000906112f59083018461308f565b81516001600160a01b031681526101608101602083015161373660208401826001600160a01b03169052565b50604083015161374d604084018262ffffff169052565b506060830151613762606084018260020b9052565b506080830151613777608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e08301526101008301516101008301526101208301516137be6101208401826001600160a01b03169052565b5061014092830151919092015290565b600080600080608085870312156137e457600080fd5b845193506137f4602086016134f0565b604086015160609096015194979096509250505056fe608060405260405161041038038061041083398101604081905261002291610268565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b919061033c565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b038111156102ae57600080fd5b8301601f810185136102bf57600080fd5b80516001600160401b038111156102d8576102d861022e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103065761030661022e565b60405281815282820160200187101561031e57600080fd5b61032f826020830160208601610244565b8093505050509250929050565b6000825161034e818460208701610244565b9190910192915050565b60aa806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea2646970667358221220dcea5be7727728b321a6567a485cb0436c1c5ae9f51a138b242fa3b34ee7125c64736f6c634300081c0033a26469706673582212200d97d8cc8366a7c90fed5fda7a6e2e1add0528d71275b210491ea5ddcb5b982664736f6c634300081c0033a264697066735822122048c2aff51a3fe1a8c6164e19bb4fc57815538c3761e314c846754db1d6647e6864736f6c634300081c003300000000000000000000000058230e0c6918a018a28bf97185eff02c2edeb8600000000000000000000000005f6a682a58854c7fbe228712aeeffccde0008ac0000000000000000000000000ad5b6c09a4edabb2c1be1ff4ab98ea59c4071fff000000000000000000000000255fb6c2854a48f6ddedf508d57450b143e2c601000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf0000000000000000000000005ec25b96e14a050317d695ec44cde76c410c6b42000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152d02c7e14af6800000