@vechain/vebetterdao-contracts
Version:
Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.
1,481 lines • 90.7 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "VOT3",
"sourceName": "contracts/VOT3.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": [],
"name": "CheckpointUnorderedInsertion",
"type": "error"
},
{
"inputs": [],
"name": "ECDSAInvalidSignature",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "length",
"type": "uint256"
}
],
"name": "ECDSAInvalidSignatureLength",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "ECDSAInvalidSignatureS",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "increasedSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "cap",
"type": "uint256"
}
],
"name": "ERC20ExceededSafeSupply",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientAllowance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC20InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC20InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC20InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "ERC20InvalidSpender",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "ERC2612ExpiredSignature",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "signer",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC2612InvalidSigner",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "timepoint",
"type": "uint256"
},
{
"internalType": "uint48",
"name": "clock",
"type": "uint48"
}
],
"name": "ERC5805FutureLookup",
"type": "error"
},
{
"inputs": [],
"name": "ERC6372InconsistentClock",
"type": "error"
},
{
"inputs": [],
"name": "EnforcedPause",
"type": "error"
},
{
"inputs": [],
"name": "ExpectedPause",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "currentNonce",
"type": "uint256"
}
],
"name": "InvalidAccountNonce",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "bits",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "SafeCastOverflowedUintDowncast",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "expiry",
"type": "uint256"
}
],
"name": "VotesExpiredSignature",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "delegator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "fromDelegate",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "toDelegate",
"type": "address"
}
],
"name": "DelegateChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "delegate",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "previousVotes",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newVotes",
"type": "uint256"
}
],
"name": "DelegateVotesChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EIP712DomainChanged",
"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": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"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": "view",
"type": "function"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PAUSER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"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": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "b3tr",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint32",
"name": "pos",
"type": "uint32"
}
],
"name": "checkpoints",
"outputs": [
{
"components": [
{
"internalType": "uint48",
"name": "_key",
"type": "uint48"
},
{
"internalType": "uint208",
"name": "_value",
"type": "uint208"
}
],
"internalType": "struct Checkpoints.Checkpoint208",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "clock",
"outputs": [
{
"internalType": "uint48",
"name": "",
"type": "uint48"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "convertToB3TR",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "convertToVOT3",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "convertedB3trOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "delegatee",
"type": "address"
}
],
"name": "delegate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "delegatee",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "expiry",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "delegateBySig",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "delegates",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "eip712Domain",
"outputs": [
{
"internalType": "bytes1",
"name": "fields",
"type": "bytes1"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "uint256",
"name": "chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "verifyingContract",
"type": "address"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256[]",
"name": "extensions",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "getNavigatorLockedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "timepoint",
"type": "uint256"
}
],
"name": "getPastQuadraticVotingPower",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "timepoint",
"type": "uint256"
}
],
"name": "getPastTotalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "timepoint",
"type": "uint256"
}
],
"name": "getPastVotes",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "getQuadraticVotingPower",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"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": "address",
"name": "account",
"type": "address"
}
],
"name": "getVotes",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"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": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_admin",
"type": "address"
},
{
"internalType": "address",
"name": "_upgrader",
"type": "address"
},
{
"internalType": "address",
"name": "_pauser",
"type": "address"
},
{
"internalType": "address",
"name": "_b3tr",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_navigatorRegistry",
"type": "address"
}
],
"name": "initializeV2",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "numCheckpoints",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "permit",
"outputs": [],
"stateMutability": "nonpayable",
"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": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "unlockedBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"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": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a536200010460003960008181611c9501528181611cbe0152611e080152613a536000f3fe60806040526004361061022e5760003560e01c806301ffc9a71461023357806306fdde0314610268578063095ea7b31461028a578063114d621e146102aa57806318160ddd146102d857806323b872dd146102ed578063248a9ca31461030d57806329b6eca91461032d5780632f2ff15d1461034f578063313ce5671461036f5780633644e5151461038b57806336568abe146103a05780633a46b1a8146103c05780633f4ba83a146103e05780634bf5d7e9146103f55780634f1ef2861461040a57806352d1902d1461041d57806354fd4d5014610432578063582a486a1461045c578063587cde1e1461047e5780635c19a95c1461049e5780635c975abb146104be5780635e0fac2e146104d35780636fcfff45146104f357806370a08231146105285780637ecebe00146105485780638456cb591461056857806384b0196e1461057d5780638e539e8c146105a557806391d14854146105c557806391ddadf4146105e557806395d89b41146106115780639ab24eb0146106265780639ae05c3514610646578063a217fddf14610666578063a9059cbb1461067b578063ad3cb1cc1461069b578063b0385a12146106cc578063c3cda520146106ec578063c731790a1461070c578063d505accf1461072c578063d547741f1461074c578063dd62ed3e1461076c578063e23285a01461078c578063e63ab1e9146107ac578063f1127ed8146107ce578063f72c0d8b1461081a578063f8c8765e1461083c578063faad86761461085c575b600080fd5b34801561023f57600080fd5b5061025361024e3660046131f0565b61087c565b60405190151581526020015b60405180910390f35b34801561027457600080fd5b5061027d6108b3565b60405161025f919061326a565b34801561029657600080fd5b506102536102a5366004613299565b610954565b3480156102b657600080fd5b506102ca6102c5366004613299565b610967565b60405190815260200161025f565b3480156102e457600080fd5b506102ca610989565b3480156102f957600080fd5b506102536103083660046132c3565b61099e565b34801561031957600080fd5b506102ca6103283660046132ff565b6109b3565b34801561033957600080fd5b5061034d610348366004613318565b6109d3565b005b34801561035b57600080fd5b5061034d61036a366004613333565b610b14565b34801561037b57600080fd5b506040516012815260200161025f565b34801561039757600080fd5b506102ca610b36565b3480156103ac57600080fd5b5061034d6103bb366004613333565b610b45565b3480156103cc57600080fd5b506102ca6103db366004613299565b610b7d565b3480156103ec57600080fd5b5061034d610c00565b34801561040157600080fd5b5061027d610c23565b61034d610418366004613375565b610c9b565b34801561042957600080fd5b506102ca610cba565b34801561043e57600080fd5b506040805180820190915260018152601960f91b602082015261027d565b34801561046857600080fd5b50610471610cd7565b60405161025f9190613436565b34801561048a57600080fd5b50610471610499366004613318565b610cf2565b3480156104aa57600080fd5b5061034d6104b9366004613318565b610d21565b3480156104ca57600080fd5b50610253610d7b565b3480156104df57600080fd5b506102ca6104ee366004613318565b610d90565b3480156104ff57600080fd5b5061051361050e366004613318565b610e43565b60405163ffffffff909116815260200161025f565b34801561053457600080fd5b506102ca610543366004613318565b610e4e565b34801561055457600080fd5b506102ca610563366004613318565b610e79565b34801561057457600080fd5b5061034d610e84565b34801561058957600080fd5b50610592610ea4565b60405161025f979695949392919061344a565b3480156105b157600080fd5b506102ca6105c03660046132ff565b610f4d565b3480156105d157600080fd5b506102536105e0366004613333565b610fb9565b3480156105f157600080fd5b506105fa610fef565b60405165ffffffffffff909116815260200161025f565b34801561061d57600080fd5b5061027d610ff9565b34801561063257600080fd5b506102ca610641366004613318565b611016565b34801561065257600080fd5b5061034d6106613660046132ff565b611057565b34801561067257600080fd5b506102ca600081565b34801561068757600080fd5b50610253610696366004613299565b611204565b3480156106a757600080fd5b5061027d604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156106d857600080fd5b506102ca6106e7366004613318565b611210565b3480156106f857600080fd5b5061034d6107073660046134f1565b6112ac565b34801561071857600080fd5b506102ca610727366004613318565b611369565b34801561073857600080fd5b5061034d610747366004613549565b611396565b34801561075857600080fd5b5061034d610767366004613333565b6114b2565b34801561077857600080fd5b506102ca6107873660046135b3565b6114ce565b34801561079857600080fd5b5061034d6107a73660046132ff565b61150a565b3480156107b857600080fd5b506102ca6000805160206139de83398151915281565b3480156107da57600080fd5b506107ee6107e93660046135dd565b611582565b60408051825165ffffffffffff1681526020928301516001600160d01b0316928101929092520161025f565b34801561082657600080fd5b506102ca60008051602061399e83398151915281565b34801561084857600080fd5b5061034d61085736600461361d565b611594565b34801561086857600080fd5b506102ca610877366004613318565b611818565b60006001600160e01b03198216637965db0b60e01b14806108ad57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060006108bf611834565b90508060030180546108d090613671565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90613671565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b505050505091505090565b60006109608383611858565b9392505050565b600061097b6109768484610b7d565b611870565b61096090633b9aca006136c1565b600080610994611834565b6002015492915050565b60006109ab848484611958565b949350505050565b6000806109be61197c565b60009384526020525050604090206001015490565b60008051602061399e8339815191526109eb816119a0565b600260006109f76119aa565b8054909150600160401b900460ff1680610a1e575080546001600160401b03808416911610155b15610a3c5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b038416610ab65760405162461bcd60e51b815260206004820181905260248201527f564f54333a206e6176696761746f72207265676973747279206973207a65726f60448201526064015b60405180910390fd5b6000610ac06119ce565b60020180546001600160a01b0319166001600160a01b03871617905550805460ff60401b1916815560405160008051602061397e83398151915290610b069084906136d8565b60405180910390a150505050565b610b1d826109b3565b610b26816119a0565b610b3083836119f2565b50505050565b6000610b40611a9a565b905090565b6001600160a01b0381163314610b6e5760405163334bd91960e11b815260040160405180910390fd5b610b788282611aa4565b505050565b600080610b88611b1c565b90506000610b94610fef565b90508065ffffffffffff168410610bc2578381604051637669fc0f60e11b8152600401610aad9291906136ec565b610bee610bce85611b40565b6001600160a01b0387166000908152600185016020526040902090611b72565b6001600160d01b031695945050505050565b6000805160206139de833981519152610c18816119a0565b610c20611c28565b50565b6060610c2d611c7f565b65ffffffffffff16610c3d610fef565b65ffffffffffff1614610c63576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b610ca3611c8a565b610cac82611d31565b610cb68282611d49565b5050565b6000610cc4611dfd565b506000805160206139be83398151915290565b600080610ce26119ce565b546001600160a01b031692915050565b600080610cfd611b1c565b6001600160a01b039384166000908152602091909152604090205490921692915050565b610d29610d7b565b15610d715760405162461bcd60e51b81526020600482015260186024820152771593d50cce8818dbdb9d1c9858dd081a5cc81c185d5cd95960421b6044820152606401610aad565b610c203382611e46565b600080610d86611ecd565b5460ff1692915050565b600080610d9b6119ce565b60028101549091506001600160a01b0316610db95761096083610e4e565b600281015460405163039f535760e11b81526000916001600160a01b03169063073ea6ae90610dec908790600401613436565b602060405180830381865afa158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2d9190613702565b905080610e3985610e4e565b6109ab919061371b565b60006108ad82611ef1565b600080610e59611834565b6001600160a01b0390931660009081526020939093525050604090205490565b60006108ad82611f23565b6000805160206139de833981519152610e9c816119a0565b610c20611f2e565b6000606080600080600060606000610eba611f75565b8054909150158015610ece57506001810154155b610f125760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610aad565b610f1a611f99565b610f22611fb6565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b600080610f58611b1c565b90506000610f64610fef565b90508065ffffffffffff168410610f92578381604051637669fc0f60e11b8152600401610aad9291906136ec565b610fa8610f9e85611b40565b6002840190611b72565b6001600160d01b0316949350505050565b600080610fc461197c565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b6000610b40611c7f565b60606000611005611834565b90508060040180546108d090613671565b600080611021611b1c565b6001600160a01b0384166000908152600182016020526040902090915061104790611fc2565b6001600160d01b03169392505050565b60006110616119ce565b90508161106d33610e4e565b10156110b65760405162461bcd60e51b8152602060048201526018602482015277496e73756666696369656e7420566f743320546f6b656e7360401b6044820152606401610aad565b3360009081526001820160205260409020548211156111225760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e7420636f6e766572746564204233545220746f6b656044820152616e7360f01b6064820152608401610aad565b61112c3383611ffb565b3360009081526001820160205260408120805484929061114d90849061371b565b9091555050805460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611183903390869060040161372e565b6020604051808303816000875af11580156111a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c69190613747565b610cb65760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610aad565b60006109608383612031565b60008061121b6119ce565b60028101549091506001600160a01b03166112395750600092915050565b600281015460405163039f535760e11b81526001600160a01b039091169063073ea6ae9061126b908690600401613436565b602060405180830381865afa158015611288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109609190613702565b834211156112d057604051632341d78760e11b815260048101859052602401610aad565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061134a906113429060a0016040516020818303038152906040528051906020012061203f565b85858561206c565b9050611356818761209a565b6113608188611e46565b50505050505050565b6000806113746119ce565b6001600160a01b03909316600090815260019093016020525050604090205490565b834211156113ba5760405163313c898160e11b815260048101859052602401610aad565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886113e98c6120cb565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006114448261203f565b905060006114548287878761206c565b9050896001600160a01b0316816001600160a01b03161461149b576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610aad565b6114a68a8a8a6120fe565b50505050505050505050565b6114bb826109b3565b6114c4816119a0565b610b308383611aa4565b6000806114d9611834565b6001600160a01b03948516600090815260019190910160209081526040808320959096168252939093525050205490565b60006115146119ce565b9050611520338361210b565b33600090815260018201602052604081208054849290611541908490613769565b909155505080546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401611183565b61158a6131d9565b6109608383612141565b600061159e6119aa565b805490915060ff600160401b82041615906001600160401b03166000811580156115c55750825b90506000826001600160401b031660011480156115e15750303b155b9050811580156115ef575080155b1561160d5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561163657845460ff60401b1916600160401b1785555b61167860405180604001604052806004815260200163564f543360e01b81525060405180604001604052806004815260200163564f543360e01b81525061217a565b61168061218c565b61168861219c565b6116ad60405180604001604052806004815260200163564f543360e01b8152506121a4565b6116b561219c565b6116bd61219c565b6116c561219c565b60006116cf6119ce565b90506001600160a01b038a166117275760405162461bcd60e51b815260206004820152601f60248201527f564f54333a2041646d696e20616464726573732063616e6e6f742062652030006044820152606401610aad565b61173260008b6119f2565b5061174b60008051602061399e8339815191528a6119f2565b506117646000805160206139de833981519152896119f2565b506001600160a01b0387166117bb5760405162461bcd60e51b815260206004820152601e60248201527f564f54333a204233545220616464726573732063616e6e6f74206265203000006044820152606401610aad565b80546001600160a01b0319166001600160a01b038816179055831561180d57845460ff60401b1916855560405160008051602061397e83398151915290611804906001906136d8565b60405180910390a15b505050505050505050565b600061182661097683611016565b6108ad90633b9aca006136c1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0090565b6000336118668185856120fe565b5060019392505050565b60008160000361188257506000919050565b6000600161188f846121cf565b901c6001901b905060018184816118a8576118a861377c565b048201901c905060018184816118c0576118c061377c565b048201901c905060018184816118d8576118d861377c565b048201901c905060018184816118f0576118f061377c565b048201901c905060018184816119085761190861377c565b048201901c905060018184816119205761192061377c565b048201901c905060018184816119385761193861377c565b048201901c9050610960818285816119525761195261377c565b04612263565b600033611966858285612279565b6119718585856122c6565b506001949350505050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b610c208133612325565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b7f8af7882bba84ab51775aa801e199e7d1dfd5f5ff08dcfbb73c614b3313e4cb0090565b6000806119fd61197c565b9050611a098484610fb9565b611a89576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611a3f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108ad565b60009150506108ad565b5092915050565b6000610b40612350565b600080611aaf61197c565b9050611abb8484610fb9565b15611a89576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108ad565b7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0090565b600065ffffffffffff821115611b6e576030826040516306dfcc6560e41b8152600401610aad929190613792565b5090565b815460009081816005811115611bd1576000611b8d84611870565b611b97908561371b565b60008881526020902090915081015465ffffffffffff9081169087161015611bc157809150611bcf565b611bcc816001613769565b92505b505b6000611bdf878785856123c4565b90508015611c1a57611c0487611bf660018461371b565b600091825260209091200190565b54600160301b90046001600160d01b0316611c1d565b60005b979650505050505050565b611c30612426565b6000611c3a611ecd565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611c749190613436565b60405180910390a150565b6000610b4043611b40565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d1157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d056000805160206139be833981519152546001600160a01b031690565b6001600160a01b031614155b15611d2f5760405163703e46dd60e11b815260040160405180910390fd5b565b60008051602061399e833981519152610cb6816119a0565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611da3575060408051601f3d908101601f19168201909252611da091810190613702565b60015b611dc25781604051634c9c8ce360e01b8152600401610aad9190613436565b6000805160206139be8339815191528114611df357604051632a87526960e21b815260048101829052602401610aad565b610b78838361244b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611d2f5760405163703e46dd60e11b815260040160405180910390fd5b6000611e50611b1c565b90506000611e5d84610cf2565b6001600160a01b0385811660008181526020869052604080822080546001600160a01b031916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610b308184611ec8876124a1565b6124ac565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b600080611efc611b1c565b6001600160a01b038416600090815260018201602052604090205490915061096090612605565b60006108ad82612631565b611f3661263c565b6000611f40611ecd565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c673390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000611fa5611f75565b90508060020180546108d090613671565b606060006108bf611f75565b80546000908015611ff257611fdc83611bf660018461371b565b54600160301b90046001600160d01b0316610960565b60009392505050565b6001600160a01b038216612025576000604051634b637e8f60e11b8152600401610aad9190613436565b610cb682600083612662565b6000336118668185856122c6565b60006108ad61204c611a9a565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061207e888888886127d8565b92509250925061208e828261289d565b50909695505050505050565b60006120a5836120cb565b9050808214610b785782816040516301d4b62360e61b8152600401610aad92919061372e565b6000806120d6612956565b6001600160a01b03909316600090815260209390935250506040902080546001810190915590565b610b78838383600161297a565b6001600160a01b03821661213557600060405163ec442f0560e01b8152600401610aad9190613436565b610cb660008383612662565b6121496131d9565b6000612153611b1c565b6001600160a01b038516600090815260018201602052604090209091506109ab9084612a5f565b612182612ac3565b610cb68282612ae8565b612194612ac3565b611d2f612b19565b611d2f612ac3565b6121ac612ac3565b610c2081604051806040016040528060018152602001603160f81b815250612b36565b600080608083901c156121e457608092831c92015b604083901c156121f657604092831c92015b602083901c1561220857602092831c92015b601083901c1561221a57601092831c92015b600883901c1561222c57600892831c92015b600483901c1561223e57600492831c92015b600283901c1561225057600292831c92015b600183901c156108ad5760010192915050565b60008183106122725781610960565b5090919050565b600061228584846114ce565b90506000198114610b3057818110156122b757828183604051637dc7a0d960e11b8152600401610aad939291906137a5565b610b308484848403600061297a565b6001600160a01b0383166122f0576000604051634b637e8f60e11b8152600401610aad9190613436565b6001600160a01b03821661231a57600060405163ec442f0560e01b8152600401610aad9190613436565b610b78838383612662565b61232f8282610fb9565b610cb657808260405163e2517d3f60e01b8152600401610aad92919061372e565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61237b612b77565b612383612bde565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60005b8183101561241e5760006123db8484612c1f565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561240a57809250612418565b612415816001613769565b93505b506123c7565b509392505050565b61242e610d7b565b611d2f57604051638dfc202b60e01b815260040160405180910390fd5b61245482612c3a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561249957610b788282612c96565b610cb6612d0c565b60006108ad82610e4e565b60006124b6611b1c565b9050826001600160a01b0316846001600160a01b0316141580156124da5750600082115b15610b30576001600160a01b03841615612572576001600160a01b03841660009081526001820160205260408120819061251f90612d2b61251a87612d37565b612d66565b6001600160d01b031691506001600160d01b03169150856001600160a01b0316600080516020