UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

1,337 lines 106 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Stargate", "sourceName": "contracts/mocks/Stargate/Stargate.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [], "name": "DelegationExitAlreadyRequested", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "DelegationNotFound", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "contractBalance", "type": "uint256" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "InsufficientContractBalance", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "enum IStargate.DelegationStatus", "name": "status", "type": "uint8" } ], "name": "InvalidDelegationStatus", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidInitializationParams", "type": "error" }, { "inputs": [], "name": "InvalidMaxClaimablePeriods", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "InvalidToken", "type": "error" }, { "inputs": [], "name": "MaxClaimablePeriodsExceeded", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "OnlyStargateNFTAndProtocolStaker", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenAlreadyDelegated", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenUnderMaturityPeriod", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "UnauthorizedUser", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "validator", "type": "address" } ], "name": "ValidatorNotActiveOrQueued", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "levelId", "type": "uint8" }, { "internalType": "uint256", "name": "required", "type": "uint256" }, { "internalType": "uint256", "name": "provided", "type": "uint256" } ], "name": "VetAmountMismatch", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "VetTransferFailed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "validator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "delegationId", "type": "uint256" }, { "indexed": false, "internalType": "uint48", "name": "exitBlock", "type": "uint48" } ], "name": "DelegationExitRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "validator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "delegationId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint8", "name": "levelId", "type": "uint8" }, { "indexed": false, "internalType": "uint8", "name": "probabilityMultiplier", "type": "uint8" } ], "name": "DelegationInitiated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "delegationId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint32", "name": "firstClaimedPeriod", "type": "uint32" }, { "indexed": false, "internalType": "uint32", "name": "lastClaimedPeriod", "type": "uint32" } ], "name": "DelegationRewardsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "validator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "delegationId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint8", "name": "levelId", "type": "uint8" } ], "name": "DelegationWithdrawn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PROB_MULTIPLIER_NODE", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PROB_MULTIPLIER_X_NODE", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VTHO_TOKEN", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "claimableDelegationPeriods", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" }, { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "claimableRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint32", "name": "_batch", "type": "uint32" } ], "name": "claimableRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_validator", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getDelegationDetails", "outputs": [ { "components": [ { "internalType": "uint256", "name": "delegationId", "type": "uint256" }, { "internalType": "address", "name": "validator", "type": "address" }, { "internalType": "uint256", "name": "stake", "type": "uint256" }, { "internalType": "uint8", "name": "probabilityMultiplier", "type": "uint8" }, { "internalType": "uint32", "name": "startPeriod", "type": "uint32" }, { "internalType": "uint32", "name": "endPeriod", "type": "uint32" }, { "internalType": "bool", "name": "isLocked", "type": "bool" }, { "internalType": "enum IStargate.DelegationStatus", "name": "status", "type": "uint8" } ], "internalType": "struct IStargate.Delegation", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getDelegationIdOfToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getDelegationStatus", "outputs": [ { "internalType": "enum IStargate.DelegationStatus", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_validator", "type": "address" }, { "internalType": "uint32", "name": "_period", "type": "uint32" } ], "name": "getDelegatorsEffectiveStake", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getEffectiveStake", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaxClaimablePeriods", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "hasRequestedExit", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "protocolStakerContract", "type": "address" }, { "internalType": "address", "name": "stargateNFTContract", "type": "address" }, { "internalType": "uint32", "name": "maxClaimablePeriods", "type": "uint32" } ], "internalType": "struct Stargate.InitializeV1Params", "name": "params", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "lockedRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "migrate", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_validator", "type": "address" } ], "name": "migrateAndDelegate", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "requestDelegationExit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_maxClaimablePeriods", "type": "uint32" } ], "name": "setMaxClaimablePeriods", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_levelId", "type": "uint8" } ], "name": "stake", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_levelId", "type": "uint8" }, { "internalType": "address", "name": "_validator", "type": "address" } ], "name": "stakeAndDelegate", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "stargateNFT", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "unstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614a646200010460003960008181612de701528181612e100152612f580152614a646000f3fe6080604052600436106101e55760003560e01c806301ffc9a71461024357806307a9bbbb1461027857806308bbb824146102a65780630962ef79146102c65780630f20d6f8146102e657806315fa1bdf1461030657806317f7f2ea14610319578063248a9ca3146103395780632e17de78146103595780632f2ff15d1461037957806336568abe146103995780633f4ba83a146103b9578063454b0608146103ce5780634bf5d7e9146103e15780634f1ef28614610403578063505279b41461041657806352d1902d1461043d57806354fd4d5014610452578063584a983f146104665780635c975abb146104795780635d21e15b1461048e578063604f2177146104a357806366980b27146104b657806369e79b7d146104d857806371569e2f146104f85780638456cb591461051857806391d148541461052d57806391ddadf41461054d5780639835fc7e1461056f5780639af02d9d1461058f578063a217fddf146105af578063ad3cb1cc146105c4578063b0d76cad146105f5578063c728b7401461061f578063d547741f1461063f578063e27351341461065f578063eabfa0441461067f578063f040812e146106ac578063f18ac150146106e9578063f2d804ef146106fe578063f4655cd11461071e578063f72c0d8b1461074b57600080fd5b3661023e5760006101f461076d565b60018101549091506001600160a01b0316331480159061021e575080546001600160a01b03163314155b1561023c576040516380c6edb160e01b815260040160405180910390fd5b005b600080fd5b34801561024f57600080fd5b5061026361025e366004613f67565b610791565b60405190151581526020015b60405180910390f35b34801561028457600080fd5b50610298610293366004613f91565b6107c8565b60405190815260200161026f565b3480156102b257600080fd5b5061023c6102c1366004613fbf565b6107e8565b3480156102d257600080fd5b5061023c6102e1366004613f91565b6108d5565b3480156102f257600080fd5b50610298610301366004613f91565b610907565b610298610314366004613ffe565b61091a565b34801561032557600080fd5b5061023c6103343660046140ac565b610ad5565b34801561034557600080fd5b50610298610354366004613f91565b610cb8565b34801561036557600080fd5b5061023c610374366004613f91565b610cd8565b34801561038557600080fd5b5061023c610394366004613fbf565b61113d565b3480156103a557600080fd5b5061023c6103b4366004613fbf565b611159565b3480156103c557600080fd5b5061023c611191565b61023c6103dc366004613f91565b6111a4565b3480156103ed57600080fd5b506103f66113c1565b60405161026f9190614154565b61023c6104113660046141ae565b611439565b34801561042257600080fd5b5061043065456e6572677981565b60405161026f9190614240565b34801561044957600080fd5b50610298611458565b34801561045e57600080fd5b506001610298565b61023c610474366004613fbf565b611475565b34801561048557600080fd5b5061026361169d565b34801561049a57600080fd5b506104306116b2565b6102986104b1366004614254565b6116d0565b3480156104c257600080fd5b506104cb606481565b60405161026f9190614271565b3480156104e457600080fd5b5061023c6104f3366004613f91565b611820565b34801561050457600080fd5b50610263610513366004613f91565b611c7e565b34801561052457600080fd5b5061023c611cc9565b34801561053957600080fd5b50610263610548366004613fbf565b611cdc565b34801561055957600080fd5b50610562611d12565b60405161026f919061427f565b34801561057b57600080fd5b5061029861058a366004613f91565b611d81565b34801561059b57600080fd5b5061023c6105aa366004614292565b611d96565b3480156105bb57600080fd5b50610298600081565b3480156105d057600080fd5b506103f6604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561060157600080fd5b5061060a611df0565b60405163ffffffff909116815260200161026f565b34801561062b57600080fd5b5061029861063a366004613f91565b611e09565b34801561064b57600080fd5b5061023c61065a366004613fbf565b611e75565b34801561066b57600080fd5b5061029861067a3660046142af565b611e91565b34801561068b57600080fd5b5061069f61069a366004613f91565b611ea5565b60405161026f919061430c565b3480156106b857600080fd5b506106cc6106c7366004613f91565b611ebe565b6040805163ffffffff93841681529290911660208301520161026f565b3480156106f557600080fd5b506104cb609681565b34801561070a57600080fd5b50610298610719366004614388565b611edb565b34801561072a57600080fd5b5061073e610739366004613f91565b611f1e565b60405161026f91906143b6565b34801561075757600080fd5b506102986000805160206149cf83398151915281565b7faf70fbb7e0f95b3e16b002fff11ff1ea2145b66dd31261eff20d74fda974970090565b60006001600160e01b03198216637965db0b60e01b14806107c257506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000806107d361076d565b60009384526002016020525050604090205490565b6107f0611f31565b8160006107fb61076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087091906143c4565b90506001600160a01b03811633146108a6573360405163ea93ab6d60e01b815260040161089d9190614240565b60405180910390fd5b6108ae611f59565b60006108b861076d565b90506108c5818787611f8f565b506108ce6126cc565b5050505050565b6108dd611f31565b6108e5611f59565b60006108ef61076d565b90506108fb81836126dd565b506109046126cc565b50565b60006107c261091461076d565b8361286d565b6000610924611f31565b61092c611f59565b600061093661076d565b6001810154604051636d77999160e01b81529192506000916001600160a01b0390911690636d7799919061096e908890600401614271565b600060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b39190810190614455565b90508060a0015134146109e25760a0810151604051636b78e9ed60e01b815261089d9187913490600401614517565b6001820154604051631efdd7db60e21b81526001600160a01b0390911690637bf75f6c90610a169088903390600401614532565b6020604051808303816000875af1158015610a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a59919061454e565b600183015460405163996fa25560e01b81529194506001600160a01b03169063996fa25590610a8e9033908790600401614567565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b50505050610acb828486611f8f565b50506107c26126cc565b6000610adf61298c565b805490915060ff600160401b82041615906001600160401b0316600081158015610b065750825b90506000826001600160401b03166001148015610b225750303b155b905081158015610b30575080155b15610b4e5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610b7757845460ff60401b1916600160401b1785555b60208601516001600160a01b03161580610b99575085516001600160a01b0316155b80610baf575060408601516001600160a01b0316155b80610bc25750606086015163ffffffff16155b15610be057604051637676b39760e01b815260040160405180910390fd5b610be86129b0565b610bf06129b0565b610bf86129b8565b8551610c06906000906129c8565b506000610c1161076d565b602088015181546001600160a01b039182166001600160a01b031991821617835560408a015160018401805491909316911617905560608801516005909101805463ffffffff90921663ffffffff19909216919091179055508315610cb057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600080610cc3612a70565b60009384526020525050604090206001015490565b610ce0611f31565b806000610ceb61076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6091906143c4565b90506001600160a01b0381163314610d8d573360405163ea93ab6d60e01b815260040161089d9190614240565b610d95611f59565b6000610d9f61076d565b90506000610dad8287612a94565b6001830154604051631c96a19760e31b8152600481018990529192506000916001600160a01b039091169063e4b50cb89060240160a060405180830381865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190614596565b905060028260e001516003811115610e3c57610e3c6142d4565b03610e5f5786600260405163d5a996d160e01b815260040161089d929190614617565b60008260e001516003811115610e7757610e776142d4565b14610f255782548251604051636f87183d60e11b81526001600160a01b039092169163df0e307a91610eaf9160040190815260200190565b600060405180830381600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b50505050816000015182602001516001600160a01b0316886000805160206149af83398151915285604001518560200151604051610f1c92919061462b565b60405180910390a45b60018260e001516003811115610f3d57610f3d6142d4565b03610fe857816000015182602001516001600160a01b031688600080516020614a0f83398151915273__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd2919061463c565b604051610fdf919061427f565b60405180910390a45b610ff28388612c70565b156110105760405163462cd83f60e01b815260040160405180910390fd5b61101a83886126dd565b6110248388612cd8565b6001830154604051630852cd8d60e31b8152600481018990526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561106c57600080fd5b505af1158015611080573d6000803e3d6000fd5b5050505080606001514710156110b857606081015160405163b7ddd88b60e01b8152476004820152602481019190915260440161089d565b606081015160405160009133918381818185875af1925050503d80600081146110fd576040519150601f19603f3d011682016040523d82523d6000602084013e611102565b606091505b505090508061112b5760608201516040516376ac9b2760e11b815261089d913391600401614567565b505050506111376126cc565b50505050565b61114682610cb8565b61114f81612d03565b61113783836129c8565b6001600160a01b03811633146111825760405163334bd91960e11b815260040160405180910390fd5b61118c8282612d0d565b505050565b600061119c81612d03565b610904612d85565b6111ac611f31565b6111b4611f59565b60006111be61076d565b905060008160010160009054906101000a90046001600160a01b03166001600160a01b03166359c87d146040518163ffffffff1660e01b8152600401602060405180830381865afa158015611217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123b91906143c4565b6001600160a01b031663a574cea4846040518263ffffffff1660e01b815260040161126891815260200190565b60e060405180830381865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190614657565b5050506001860154604051636d77999160e01b8152939550600094506001600160a01b031692636d77999192506112e591508590600401614271565b600060405180830381865afa158015611302573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261132a9190810190614455565b60a00151905080341461135657818134604051636b78e9ed60e01b815260040161089d93929190614517565b60018301546040516308a960c160e31b8152600481018690526001600160a01b039091169063454b060890602401600060405180830381600087803b15801561139e57600080fd5b505af11580156113b2573d6000803e3d6000fd5b505050505050506109046126cc565b606073__$7df4da9b1a17d9d425275d1becdd020933$__634bf5d7e96040518163ffffffff1660e01b8152600401600060405180830381865af415801561140c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261143491908101906146e2565b905090565b611441612ddc565b61144a82612e81565b6114548282612e99565b5050565b6000611462612f4d565b506000805160206149ef83398151915290565b61147d611f31565b611485611f59565b600061148f61076d565b905060008160010160009054906101000a90046001600160a01b03166001600160a01b03166359c87d146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150c91906143c4565b6001600160a01b031663a574cea4856040518263ffffffff1660e01b815260040161153991815260200190565b60e060405180830381865afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a9190614657565b5050506001860154604051636d77999160e01b8152939550600094506001600160a01b031692636d77999192506115b691508590600401614271565b600060405180830381865afa1580156115d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115fb9190810190614455565b60a00151905080341461162757818134604051636b78e9ed60e01b815260040161089d93929190614517565b60018301546040516308a960c160e31b8152600481018790526001600160a01b039091169063454b060890602401600060405180830381600087803b15801561166f57600080fd5b505af1158015611683573d6000803e3d6000fd5b50505050611692838686611f8f565b5050506114546126cc565b6000806116a8612f96565b5460ff1692915050565b6000806116bd61076d565b600101546001600160a01b031692915050565b60006116da611f31565b6116e2611f59565b60006116ec61076d565b6001810154604051636d77999160e01b81529192506000916001600160a01b0390911690636d77999190611724908790600401614271565b600060405180830381865afa158015611741573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117699190810190614455565b90508060a0015134146117985760a0810151604051636b78e9ed60e01b815261089d9186913490600401614517565b6001820154604051631efdd7db60e21b81526001600160a01b0390911690637bf75f6c906117cc9087903390600401614532565b6020604051808303816000875af11580156117eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180f919061454e565b9250505061181b6126cc565b919050565b611828611f31565b80600061183361076d565b60018101546040516331a9108f60e11b8152600481018590529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a891906143c4565b90506001600160a01b03811633146118d5573360405163ea93ab6d60e01b815260040161089d9190614240565b6118dd611f59565b60006118e761076d565b600086815260028201602052604081205491925081900361191e57604051630b14099f60e31b81526004810187905260240161089d565b600061192a8388612a94565b905060018160e001516003811115611944576119446142d4565b03611a5e578254604051636f87183d60e11b8152600481018490526001600160a01b039091169063df0e307a90602401600060405180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b50505050602081015160408083015160018601549151633404591760e21b8152600481018b905285936001600160a01b03908116938c936000805160206149af8339815191529390929091169063d011645c90602401602060405180830381865afa158015611a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a399190614716565b604051611a4792919061462b565b60405180910390a4611a598388612cd8565b611b28565b60028160e001516003811115611a7657611a766142d4565b03611b085760a081015163ffffffff90811614611aa6576040516337bd14f160e11b815260040160405180910390fd5b825460405163ce88abbd60e01b8152600481018490526001600160a01b039091169063ce88abbd90602401600060405180830381600087803b158015611aeb57600080fd5b505af1158015611aff573d6000803e3d6000fd5b50505050611b28565b60e081015160405163d5a996d160e01b815261089d918991600401614617565b82546020820151604051630d4f10ad60e11b81526000926001600160a01b031691631a9e215a91611b5c9190600401614240565b608060405180830381865afa158015611b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9d9190614733565b87546040516307a5b63360e11b815260048101899052919550600094506001600160a01b03169250630f4b6c6691506024016040805180830381865afa158015611beb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0f9190614792565b915050611c308584602001518b856002611c2991906147d7565b6000612fba565b8383602001516001600160a01b03168a600080516020614a0f83398151915284604051611c69919063ffffffff91909116815260200190565b60405180910390a450505050506111376126cc565b600080611c8961076d565b600084815260028201602052604090205490915015801590611cc2575063ffffffff611cb58285612a94565b60a0015163ffffffff1614155b9392505050565b6000611cd481612d03565b610904613055565b600080611ce7612a70565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600073__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611434919061463c565b60006107c2611d8e61076d565b83600061309c565b6000611da181612d03565b8163ffffffff16600003611dc85760405163874e74df60e01b815260040160405180910390fd5b81611dd161076d565b600501805463ffffffff191663ffffffff929092169190911790555050565b6000611dfa61076d565b6005015463ffffffff16919050565b600080611e1461076d565b90506000611e228285613181565b90506002816003811115611e3857611e386142d4565b14611e47575060009392505050565b6000611e5383866134bf565b9150611e6c90508386611e678460016147d7565b613739565b95945050505050565b611e7e82610cb8565b611e8781612d03565b6111378383612d0d565b6000611cc2611e9e61076d565b848461309c565b611ead613f25565b6107c2611eb861076d565b83612a94565b600080611ed2611ecc61076d565b846134bf565b91509150915091565b600080611ee661076d565b6001600160a01b03851660009081526004820160205260409020909150611f0d90846138b5565b6001600160e01b0316949350505050565b60006107c2611f2b61076d565b83613181565b611f3961169d565b15611f575760405163d93c066560e01b815260040160405180910390fd5b565b6000611f63613902565b805490915060011901611f8957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000611f9b8484613181565b90506002816003811115611fb157611fb16142d4565b03611fd2576040516331bbcc6f60e01b81526004810184905260240161089d565b83546040516327cd4de160e01b81526000916001600160a01b0316906327cd4de190612002908690600401614240565b60c060405180830381865afa15801561201f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204391906147f4565b508954604051630d4f10ad60e11b8152919650600095506001600160a01b03169350631a9e215a925061207b91508790600401614240565b608060405180830381865afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614733565b509250505060ff82166002148015906120d9575060ff8216600114155b806120ea575063ffffffff81811614155b1561210a57836040516315a36a6960e11b815260040161089d9190614240565b6001860154604051636b10a8bf60e11b8152600481018790526001600160a01b039091169063d621517e90602401602060405180830381865afa158015612155573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612179919061485e565b1561219a5760405163258643a160e11b81526004810186905260240161089d565b6001860154604051631c96a19760e31b8152600481018790526000916001600160a01b03169063e4b50cb89060240160a060405180830381865afa1580156121e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220a9190614596565b9050806020015160ff166000036122375760405163124bad6360e31b81526004810187905260240161089d565b6000868152600288016020526040902054600385600381111561225c5761225c6142d4565b148061227957506001856003811115612277576122776142d4565b145b15612440578754604051630dd3570160e01b8152600481018390526000916001600160a01b031690630dd3570190602401608060405180830381865afa1580156122c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122eb9190614879565b50508a54604051636f87183d60e11b8152600481018690529293506001600160a01b03169163df0e307a9150602401600060405180830381600087803b15801561233457600080fd5b505af1158015612348573d6000803e3d6000fd5b5050505081816001600160a01b0316896000805160206149af8339815191528660600151876020015160405161237f92919061462b565b60405180910390a4600186600381111561239b5761239b6142d4565b0361243e5781816001600160a01b031689600080516020614a0f83398151915273__$7df4da9b1a17d9d425275d1becdd020933$__6391ddadf46040518163ffffffff1660e01b8152600401602060405180830381865af4158015612404573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612428919061463c565b604051612435919061427f565b60405180910390a45b505b8015612478576124508888612c70565b1561246e5760405163462cd83f60e01b815260040160405180910390fd5b61247888886126dd565b600188015460405163f057248560e01b8152600481018990526000916001600160a01b03169063f057248590602401602060405180830381865afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e8919061485e565b6124f35760646124f6565b60965b895460608501516040516312fe610b60e21b81526001600160a01b038b8116600483015260ff8516602483015293945060009390921691634bf9842c919060440160206040518083038185885af1158015612555573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061257a919061454e565b8a54604051630d4f10ad60e11b81529192506000916001600160a01b0390911690631a9e215a906125af908c90600401614240565b608060405180830381865afa1580156125cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f09190614733565b9350505050818b60020160008c81526020019081526020016000208190555080600161261c91906147d7565b60008b815260038d0160205260409020805463ffffffff191663ffffffff9290921691909117905561265c8b8a8c6126558560026147d7565b6001612fba565b81896001600160a01b03168b7fa0286778706a77850b9dd59b02210d97bb93f749fdde710fa08088f5a6bb962688606001518960200151886040516126b79392919092835260ff918216602084015216604082015260600190565b60405180910390a45050505050505050505050565b60006126d6613902565b6001905550565b6000806126ea84846134bf565b915091506126f88484612c70565b156127225760058401546001906127159063ffffffff16846147d7565b61271f91906148cb565b90505b60006127308585600061309c565b905080600003612741575050505050565b60018501546040516331a9108f60e11b8152600481018690526000916001600160a01b031690636352211e90602401602060405180830381865afa15801561278d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b191906143c4565b60008681526003880160205260409020805463ffffffff191663ffffffff868116919091179091559091506127f29065456e65726779908390859061392616565b8560020160008681526020019081526020016000205485826001600160a01b03167ff4cde2b5a31835b3dac5ba586238b7160063a46803ccbf2322db0933efe694ed85888860405161285d9392919092835263ffffffff918216602084015216604082015260600190565b60405180910390a4505050505050565b6001820154604051631c96a19760e31b81526004810183905260009182916001600160a01b039091169063e4b50cb89060240160a060405180830381865afa1580156128bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e19190614596565b60018501546020820151604051636d77999160e01b81529293506000926001600160a01b0390921691636d7799919161291c91600401614271565b600060405180830381865afa158015612939573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129619190810190614455565b9050606481608001516001600160401b0316836060015161298291906148e8565b611e6c91906148ff565b7ff0c57e16840df040f15088dc2f81fe3