@vechain/vebetterdao-contracts
Version:
Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.
1,112 lines • 83.8 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "XAllocationPool",
"sourceName": "contracts/XAllocationPool.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": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"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": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "appId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "totalAmount",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unallocatedAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "teamAllocationAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "rewardsAllocationAmount",
"type": "uint256"
}
],
"name": "AllocationRewardsClaimed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldContractAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newContractAddress",
"type": "address"
}
],
"name": "EmissionsContractSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bool",
"name": "isDisabled",
"type": "bool"
}
],
"name": "QuadraticFundingToggled",
"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": "oldContractAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newContractAddress",
"type": "address"
}
],
"name": "TreasuryContractSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldContractAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newContractAddress",
"type": "address"
}
],
"name": "UnallocatedFundsReceiverSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldContractAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newContractAddress",
"type": "address"
}
],
"name": "X2EarnAppsContractSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldContractAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newContractAddress",
"type": "address"
}
],
"name": "XAllocationVotingSet",
"type": "event"
},
{
"inputs": [],
"name": "CLOCK_MODE",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "CONTRACTS_ADDRESS_MANAGER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PERCENTAGE_PRECISION_SCALING_FACTOR",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"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": "uint256",
"name": "roundId",
"type": "uint256"
}
],
"name": "allFundsClaimed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "b3tr",
"outputs": [
{
"internalType": "contract IB3TR",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
}
],
"name": "baseAllocationAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "appId",
"type": "bytes32"
}
],
"name": "claim",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "appId",
"type": "bytes32"
}
],
"name": "claimableAmount",
"outputs": [
{
"internalType": "uint256",
"name": "totalAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unallocatedAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "teamAllocationAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "x2EarnRewardsPoolAmount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "appId",
"type": "bytes32"
}
],
"name": "claimed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "clock",
"outputs": [
{
"internalType": "uint48",
"name": "",
"type": "uint48"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "appId",
"type": "bytes32"
}
],
"name": "currentRoundEarnings",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "emissions",
"outputs": [
{
"internalType": "contract IEmissions",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "appId",
"type": "bytes32"
}
],
"name": "getAppShares",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
}
],
"name": "getMaxAppAllocation",
"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": "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": "contractsAddressManager",
"type": "address"
},
{
"internalType": "address",
"name": "_b3trAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_treasury",
"type": "address"
},
{
"internalType": "address",
"name": "_x2EarnApps",
"type": "address"
},
{
"internalType": "address",
"name": "_x2EarnRewardsPool",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "roundIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "initializeV7",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "isQuadraticFundingDisabledForCurrentRound",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
}
],
"name": "isQuadraticFundingDisabledForRound",
"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": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "appId",
"type": "bytes32"
}
],
"name": "roundEarnings",
"outputs": [
{
"internalType": "uint256",
"name": "totalAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unallocatedAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "teamAllocationAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "x2EarnRewardsPoolAmount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
}
],
"name": "scaledAppSharesCap",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "emissions_",
"type": "address"
}
],
"name": "setEmissionsAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_receiverAddress",
"type": "address"
}
],
"name": "setUnallocatedFundsReceiverAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "x2EarnApps_",
"type": "address"
}
],
"name": "setX2EarnAppsAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "xAllocationVoting_",
"type": "address"
}
],
"name": "setXAllocationVotingAddress",
"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": "toggleQuadraticFunding",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "roundId",
"type": "uint256"
}
],
"name": "unallocatedFunds",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "unallocatedFundsReceiver",
"outputs": [
{
"internalType": "contract ITreasury",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"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"
},
{
"inputs": [],
"name": "x2EarnApps",
"outputs": [
{
"internalType": "contract IX2EarnApps",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "xAllocationVoting",
"outputs": [
{
"internalType": "contract IXAllocationVotingGovernor",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a3962000104600039600081816128e50152818161290e0152612a560152613a396000f3fe6080604052600436106101d65760003560e01c806301ffc9a7146101db5780632267716c14610210578063248a9ca3146102325780632f2ff15d1461026057806331d144571461028257806333653f5d146102a2578063348a94dd146102b757806335876476146102d757806336568abe146102f75780633bb18a7614610317578063440bc19f146103375780634705bdbd146103575780634bf5d7e9146103775780634f1ef286146103c657806352d1902d146103d957806354fd4d50146103ee578063571816091461041857806357abb9d114610438578063582a486a1461045857806368575f101461046d578063738640d61461048257806391d14854146104b057806391ddadf4146104d0578063952f2133146104fc578063a217fddf1461051e578063ad3cb1cc14610533578063c048f6c914610564578063c4b933c814610584578063ca20db6e146105a4578063cc04e757146105c4578063cc46ed11146105d9578063d2f8aa27146105ee578063d39b3e8514610604578063d41fc65314610644578063d547741f14610664578063dbfa0f6114610684578063e205aeb0146106a4578063e9a585d8146106b9578063f70e4760146106d9578063f72c0d8b146106f9578063fd0aac5e1461071b575b600080fd5b3480156101e757600080fd5b506101fb6101f6366004613301565b61073b565b60405190151581526020015b60405180910390f35b34801561021c57600080fd5b50610225610772565b604051610207919061332b565b34801561023e57600080fd5b5061025261024d36600461333f565b610790565b604051908152602001610207565b34801561026c57600080fd5b5061028061027b36600461336d565b6107b0565b005b34801561028e57600080fd5b5061028061029d36600461339d565b6107d2565b3480156102ae57600080fd5b5061022561100d565b3480156102c357600080fd5b506101fb6102d236600461333f565b61102b565b3480156102e357600080fd5b506102806102f23660046133bf565b611129565b34801561030357600080fd5b5061028061031236600461336d565b6114a5565b34801561032357600080fd5b50610280610332366004613455565b6114dd565b34801561034357600080fd5b50610280610352366004613455565b6115d4565b34801561036357600080fd5b5061025261037236600461333f565b6116cf565b34801561038357600080fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c7400000060208201525b6040516102079190613496565b6102806103d436600461350f565b611825565b3480156103e557600080fd5b50610252611840565b3480156103fa57600080fd5b506040805180820190915260018152603760f81b60208201526103b9565b34801561042457600080fd5b50610280610433366004613455565b61185d565b34801561044457600080fd5b5061025261045336600461333f565b611944565b34801561046457600080fd5b506102256119c7565b34801561047957600080fd5b506102806119e5565b34801561048e57600080fd5b506104a261049d36600461339d565b611a81565b6040516102079291906135b6565b3480156104bc57600080fd5b506101fb6104cb36600461336d565b611d7e565b3480156104dc57600080fd5b506104e5611db4565b60405165ffffffffffff9091168152602001610207565b34801561050857600080fd5b506102526000805160206139e483398151915281565b34801561052a57600080fd5b50610252600081565b34801561053f57600080fd5b506103b9604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561057057600080fd5b5061028061057f366004613455565b611dc3565b34801561059057600080fd5b506101fb61059f36600461333f565b611e5f565b3480156105b057600080fd5b506102526105bf36600461333f565b611f07565b3480156105d057600080fd5b506101fb611f3d565b3480156105e557600080fd5b50610225611fe6565b3480156105fa57600080fd5b5061025261271081565b34801561061057600080fd5b5061062461061f36600461339d565b612004565b604080519485526020850193909352918301526060820152608001610207565b34801561065057600080fd5b5061062461065f36600461339d565b6120e8565b34801561067057600080fd5b5061028061067f36600461336d565b612347565b34801561069057600080fd5b5061028061069f366004613652565b612363565b3480156106b057600080fd5b506102256124fd565b3480156106c557600080fd5b506102526106d436600461333f565b612518565b3480156106e557600080fd5b506101fb6106f436600461339d565b612538565b34801561070557600080fd5b506102526000805160206139a483398151915281565b34801561072757600080fd5b5061025261073636600461333f565b612565565b60006001600160e01b03198216637965db0b60e01b148061076c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008061077d612617565b600101546001600160a01b031692915050565b60008061079b61263b565b60009384526020525050604090206001015490565b6107b982610790565b6107c28161265f565b6107cc838361266c565b50505050565b6107da61270d565b60006107e4612617565b6000838152600682016020908152604080832087845290915290205490915060ff161561087e5760405162461bcd60e51b815260206004820152603f60248201527f58416c6c6f636174696f6e506f6f6c3a207265776172647320616c726561647960448201527f20636c61696d656420666f7220746869732061707020616e6420726f756e640060648201526084015b60405180910390fd5b6108866124fd565b6001600160a01b03166382afd23b846040518263ffffffff1660e01b81526004016108b391815260200190565b602060405180830381865afa1580156108d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f491906136b5565b1561094d5760405162461bcd60e51b8152602060048201526024808201527f58416c6c6f636174696f6e506f6f6c3a20726f756e64206e6f7420656e646564604482015263081e595d60e21b6064820152608401610875565b60048181015460405163181efec960e21b81529182018490526001600160a01b03169063607bfb2490602401602060405180830381865afa158015610996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ba91906136b5565b610a125760405162461bcd60e51b815260206004820152602360248201527f58416c6c6f636174696f6e506f6f6c3a2061707020646f6573206e6f742065786044820152621a5cdd60ea1b6064820152608401610875565b600080600080610a228787612004565b60008a815260068a01602090815260408083208e84529091529020805460ff191660011790559296509094509250905082610a5d82846136ed565b610a6791906136ed565b60028601546040516370a0823160e01b81526001600160a01b03909116906370a0823190610a9990309060040161332b565b602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada9190613700565b1015610b405760405162461bcd60e51b815260206004820152602f60248201527f58416c6c6f636174696f6e506f6f6c3a20496e73756666696369656e7420667560448201526e1b991cc81bdb8818dbdb9d1c9858dd608a1b6064820152608401610875565b600485810154604051631772503b60e01b81529182018890526000916001600160a01b0390911690631772503b90602401602060405180830381865afa158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb29190613719565b600287015460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb90610be79084908790600401613736565b6020604051808303816000875af1158015610c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2a91906136b5565b610c8e5760405162461bcd60e51b815260206004820152602f60248201527f58416c6c6f636174696f6e506f6f6c3a207472616e7366657220746f2074656160448201526e1b481dd85b1b195d0819985a5b1959608a1b6064820152608401610875565b6002860154600587015460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610cc8929116908690600401613736565b6020604051808303816000875af1158015610ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0b91906136b5565b610d895760405162461bcd60e51b815260206004820152604360248201527f58416c6c6f636174696f6e506f6f6c3a20417070726f76616c206f662042335460448201527f5220746f6b656e20746f2078324561726e52657761726473506f6f6c206661696064820152621b195960ea1b608482015260a401610875565b6005860154604051630c9630cb60e41b81526001600160a01b039091169063c9630cb090610dbd9085908b906004016135b6565b6020604051808303816000875af1158015610ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0091906136b5565b610e855760405162461bcd60e51b815260206004820152604a60248201527f58416c6c6f636174696f6e506f6f6c3a204465706f736974206f66207265776160448201527f72647320616c6c6f636174696f6e20746f2078324561726e52657761726473506064820152691bdbdb0819985a5b195960b21b608482015260a401610875565b8315610f9a576002860154600387015460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92610ec5929116908890600401613736565b6020604051808303816000875af1158015610ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0891906136b5565b610f745760405162461bcd60e51b815260206004820152603760248201527f58416c6c6f636174696f6e506f6f6c3a205472616e73666572206f6620756e616044820152761b1b1bd8d85d1959081c995dd85c991cc819985a5b1959604a1b6064820152608401610875565b600088815260088701602052604081208054869290610f949084906136ed565b90915550505b60408051898152602081018790523381830152606081018690526080810185905260a0810184905290516001600160a01b0383169189917f21c83a4a400e6919b7607b7d561c696fbed4080d691d738eae21d7a4bdb03b2a9181900360c00190a3505050505050611009612743565b5050565b600080611018612617565b600401546001600160a01b031692915050565b600080611036612617565b8054604051637ace248560e01b8152600481018690529192506000916001600160a01b0390911690637ace248590602401600060405180830381865afa158015611084573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110ac919081019061374f565b905060005b815181101561111e578260060160008383815181106110d2576110d26137d4565b6020908102919091018101518252818101929092526040908101600090812088825290925290205460ff1661110c57506000949350505050565b80611116816137ea565b9150506110b1565b506001949350505050565b6000611133612754565b805490915060ff600160401b82041615906001600160401b031660008115801561115a5750825b90506000826001600160401b031660011480156111765750303b155b905081158015611184575080155b156111a25760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156111cb57845460ff60401b1916600160401b1785555b6001600160a01b0389166112375760405162461bcd60e51b815260206004820152602d60248201527f58416c6c6f636174696f6e506f6f6c3a206e657720623374722069732074686560448201526c207a65726f206164647265737360981b6064820152608401610875565b6001600160a01b0388166112a75760405162461bcd60e51b815260206004820152603160248201527f58416c6c6f636174696f6e506f6f6c3a206e657720747265617375727920697360448201527020746865207a65726f206164647265737360781b6064820152608401610875565b6001600160a01b0387166112cd5760405162461bcd60e51b815260040161087590613803565b6001600160a01b0386166113465760405162461bcd60e51b815260206004820152603a60248201527f58416c6c6f636174696f6e506f6f6c3a206e65772078324561726e52657761726044820152796473506f6f6c20697320746865207a65726f206164647265737360301b6064820152608401610875565b61134e612778565b611356612782565b61135e612778565b6000611368612617565b6002810180546001600160a01b03199081166001600160a01b038e81169190911790925560038301805482168d841617905560048301805482168c84161790556005830180549091168a83161790559091508d1661141f5760405162461bcd60e51b815260206004820152602e60248201527f58416c6c6f636174696f6e506f6f6c3a206e65772061646d696e20697320746860448201526d65207a65726f206164647265737360901b6064820152608401610875565b61142a60008e61266c565b506114436000805160206139a48339815191528d61266c565b5061145c6000805160206139e48339815191528c61266c565b5050831561149757845460ff60401b191685556040516000805160206139848339815191529061148e90600190613856565b60405180910390a15b505050505050505050505050565b6001600160a01b03811633146114ce5760405163334bd91960e11b815260040160405180910390fd5b6114d88282612792565b505050565b6000805160206139e48339815191526114f58161265f565b6001600160a01b03821661156e5760405162461bcd60e51b815260206004820152603a60248201527f58416c6c6f636174696f6e506f6f6c3a206e65772078416c6c6f636174696f6e604482015279566f74696e6720697320746865207a65726f206164647265737360301b6064820152608401610875565b6000611578612617565b80546001600160a01b0319166001600160a01b03851690811782556040519192507f71004d26dc692e8d5005fb307953a5ce05000120035aa3f83615abc6c6fbba2e916115c79190869061386a565b60405180910390a1505050565b6000805160206139e48339815191526115ec8161265f565b6001600160a01b0382166116605760405162461bcd60e51b815260206004820152603560248201527f58416c6c6f636174696f6e506f6f6c3a207265636569766572206164647265736044820152747320697320746865207a65726f206164647265737360581b6064820152608401610875565b600061166a612617565b6003810180546001600160a01b038681166001600160a01b031983161790925560405192935016907f1ed2c10649133a04ad7c6468724a9e30c9d030895523a45472d0489696c654b5906116c1908390879061386a565b60405180910390a150505050565b6000806116da6124fd565b90506001600160a01b0381166117025760405162461bcd60e51b815260040161087590613884565b600061170d8461280a565b604051637ace248560e01b8152600481018690529091506000906001600160a01b03841690637ace248590602401600060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611780919081019061374f565b905060006064846001600160a01b0316630eca87fb886040518263ffffffff1660e01b81526004016117b491815260200190565b602060405180830381865afa1580156117d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f59190613700565b6117ff90856138ce565b61180991906138fb565b9050600082518261181a91906138fb565b979650505050505050565b61182d6128da565b6118368261297f565b6110098282612997565b600061184a612a4b565b506000805160206139c483398151915290565b6000805160206139e48339815191526118758161265f565b6001600160a01b0382166118e65760405162461bcd60e51b815260206004820152603260248201527f58416c6c6f636174696f6e506f6f6c3a206e657720656d697373696f6e7320696044820152717320746865207a65726f206164647265737360701b6064820152608401610875565b60006118f0612617565b6001810180546001600160a01b0319166001600160a01b0386169081179091556040519192507f0c4e40f9b8842fc7e1d8e529109dcebad1ad36cea4ef437522deb3ae27571243916115c79190869061386a565b600061194e6124fd565b6001600160a01b0316630a0e74ef836040518263ffffffff1660e01b815260040161197b91815260200190565b602060405180830381865afa158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc9190613700565b61076c9060646138ce565b6000806119d2612617565b600201546001600160a01b031692915050565b60006119f08161265f565b60006119fa612617565b90506000611a13611a09611db4565b6007840190612a94565b6001600160d01b03166001149050600081611a2f576001611a32565b60005b60ff169050611a4d611a42611db4565b600785019083612b49565b50506040518215907f2b43d88a3bdd9854ab27c30e8ece4fd10557c123742887b6343ae77bc1fe6e5d90600090a250505050565b6000806000611a8e6124fd565b90506001600160a01b038116611ab65760405162461bcd60e51b815260040161087590613884565b604051636b45a61b60e11b81526001600160a01b0382169063d68b4c3690611ae490879089906004016135b6565b602060405180830381865afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2591906136b5565b611b36576000809250925050611d77565b600080611b4287611e5f565b15611c295760405163033cdc2b60e31b8152600481018890526001600160a01b038416906319e6e15890602401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb09190613700565b6040516325da8c0d60e11b81529092506001600160a01b03841690634bb5181a90611be1908a908a906004016135b6565b602060405180830381865afa158015611bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c229190613700565b9050611d15565b60405163fb03ec6f60e01b8152600481018890526001600160a01b0384169063fb03ec6f90602401602060405180830381865afa158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190613700565b91506000836001600160a01b031663bed7301089896040518363ffffffff1660e01b8152600401611cc49291906135b6565b602060405180830381865afa158015611ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d059190613700565b9050611d1181806138ce565b9150505b81600003611d2c5760008094509450505050611d77565b600082611d3b612710846138ce565b611d4591906138fb565b9050600080611d538a611944565b905080831115611d6d57611d67818461391d565b91508092505b5090955093505050505b9250929050565b600080611d8961263b565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b6000611dbe612b64565b905090565b6000805160206139e4833981519152611ddb8161265f565b6001600160a01b038216611e015760405162461bcd60e51b815260040161087590613803565b6000611e0b612617565b6004810180546001600160a01b0319166001600160a01b0386169081179091556040519192507f7ccde7e0475442e95ab2e158122d49ae6dca103483fd66385ac6d81444b0d794916115c79190869061386a565b600080611e6a612617565b80546040516368377f6d60e11b815260048101869052919250600091611ee3916001600160a01b03169063d06efeda90602401602060405180830381865afa158015611eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ede9190613700565b612b6b565b9050611ef26007830182612a94565b6001600160d01b031660011492505050919050565b600080611f13836116cf565b90506000611f2984611f2486611944565b612ba2565b9050611f3581836136ed565b949350505050565b600080611f48612617565b905060008160000160009054906101000a90046001600160a01b03166001600160a01b031663561b64ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc59190613700565b9050611fd3611a0982612b6b565b6001600160d01b03166001149250505090565b600080611ff1612617565b600301546001600160a01b031692915050565b6000806000806000612014612617565b600087815260068201602090815260408083208b845290915290205490915060ff16806120b257506120446124fd565b6001600160a01b03166382afd23b886040518263ffffffff1660e01b815260040161207191815260200190565b602060405180830381865afa15801561208e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b291906136b5565b156120cb576000806000809450945094509450506120df565b6120d587876120e8565b9450945094509450505b92959194509250565b60008060008060006120f86124fd565b90506001600160a01b0381166121205760405162461bcd60e51b815260040161087590613884565b604051636b45a61b60e11b81526001600160a01b0382169063d68b4c369061214e9089908b906004016135b6565b602060405180830381865afa15801561216b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218f91906136b5565b6121a7576000806000809450945094509450506120df565b604051631f27a4f360e11b81526004810188905260009081906001600160a01b03841690633e4f49e690602401602060405180830381865afa1580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122159190613930565b9050600081600281111561222b5761222b613951565b14806122485750600281600281111561224657612246613951565b145b15612255578891506122e0565b886001146122db576001600160a01b038316633009737761227760018c61391d565b6040518263ffffffff1660e01b815260040161229591815260200190565b602060405180830381865afa1580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d69190613700565b6122dd565b885b91505b6000806122ed848b611a81565b9150915060006122fc8c6116cf565b9050600061230a8d85612ba2565b9050821561231f5761231c8d84612ba2565b99505b61232981836136ed565b9a506123358c8c612c68565b9b9e9a9d509b50505050505050505050565b61235082610790565b6123598161265f565b6107cc8383612792565b6000805160206139a483398151915261237b8161265f565b60076000612387612754565b8054909150600160401b900460ff16806123ae575080546001600160401b03808416911610155b156123cc5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b178155835185511461244c5760405162461bcd60e51b815260206004820152602760248201527f58416c6c6f636174696f6e506f6f6c3a20617272617973206c656e677468206d6044820152660d2e6dac2e8c6d60cb1b6064820152608401610875565b6000612456612617565b905060005b86518110156124c357858181518110612476576124766137d4565b6020026020010151826008016000898481518110612496576124966137d4565b602002602001015181526020019081526020016000208190555080806124bb906137ea565b91505061245b565b5050805460ff60401b19168155604051600080516020613984833981519152906124ee908490613856565b60405180910390a15050505050565b600080612508612617565b546001600160a01b031692915050565b600080612523612617565b60009384526008016020525050604090205490565b600080612543612617565b6000938452600601602090815260408085209585529490525050205460ff1690565b6000806125706124fd565b90506001600160a01b0381166125985760405162461bcd60e51b815260040161087590613884565b6000816001600160a01b0316639cbe5efd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fc9190613700565b9050600061260a82866120e8565b5091979650505050505050565b7fba46220259871765522240056f76631a28aa19c5092d6dd51d6b858b4ebcb30090565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b6126698133612d1f565b50565b60008061267761263b565b90506126838484611d7e565b612703576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556126b93390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061076c565b600091505061076c565b6000612717612d4a565b80549091506001190161273d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b600061274d612d4a565b6001905550565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b612780612d6e565b565b61278a612d6e565b612780612d93565b60008061279d61263b565b90506127a98484611d7e565b15612703576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061076c565b600080612815610772565b90506001600160a01b03811661286a5760405162461bcd60e51b815260206004820152601a602482015279115b5a5cdcda5bdb9cc818dbdb9d1c9858dd081b9bdd081cd95d60321b6044820152606401610875565b60405163273364ef60e01b8152600481018490526001600160a01b0382169063273364ef90602401602060405180830381865afa1580156128af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d39190613700565b9392505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061296157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166129556000805160206139c4833981519152546001600160a01b031690565b6001600160a01b031614155b156127805760405163703e46dd60e11b815260040160405180910390fd5b6000805160206139a48339815191526110098161265f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156129f1575060408051601f3d908101601f191682019092526129ee91810190613700565b60015b612a105781604051634c9c8ce360e01b8152600401610875919061332b565b6000805160206139c48339815191528114612a4157604051632a87526960e21b815260048101829052602401610875565b6114d88383612d9b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146127805760405163703e46dd60e11b815260040160405180910390fd5b815460009081816005811115612af3576000612aaf84612df1565b612ab9908561391d565b60008881526020902090915081015465ffffffffffff9081169087161015612ae357809150612af1565b612aee8160016136ed565b92505b505b6000612b0187878585612ed9565b90508015612b3c57612b2687612b1860018461391d565b600091825260209091200190565b54600160301b90046001600160d01b031661181a565b6000979650505050505050565b600080612b57858585612f3b565b915091505b935093915050565b6000611dbe435b600065ffffffffffff821115612b9e576040516306dfcc6560e41b81526030600482015260248101839052604401610875565b5090565b600080612bae8461280a565b90506000612bba6124fd565b6001600160a01b0316630eca87fb866040518263ffffffff1660e01b8152600401612be791815260200190565b602060405180830381865afa158015612c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c289190613700565b612c3390606461391d565b905060006064612c4383856138ce565b612c4d91906138fb565b90506000612710612c5e87846138ce565b61181a91906138fb565b6000806000612c75612617565b600481810154604051634135cd2760e11b81529182018890529192506000916001600160a01b03169063826b9a4e90602401602060405180830381865afa158015612cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce89190613700565b905060006064612cf883886138ce565b612d0291906138fb565b90506000612d10828861391d565b91989197509095505050505050565b612d298282611d7e565b61100957808260405163e2517d3f60e01b8152600401610875929190613736565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b612d766130b5565b61278057604051631afcd79f60e31b815260040160405180910390fd5b612743612d6e565b612da4826130cf565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612de9576114d8828261312b565b6110096131a1565b600081600003612e0357506000919050565b60006001612e10846131c0565b901c6001901b90506001818481612e2957612e296138e5565b048201901c90506001818481612e4157612e416138e5565b048201901c90506001818481612e5957612e596138e5565b048201901c90506001818481612e7157612e716138e5565b048201901c90506001818481612e8957612e896138e5565b048201901c90506001818481612ea157612ea16138e5565b048201901c90506001818481612eb957612eb96138e5565b048201901c90506128d381828581612ed357612ed36138e5565b04613254565b60005b81831015612f33576000612ef0848461326a565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff161115612f1f57809250612f2d565b612f2a8160016136ed565b93505b50612edc565b509392505050565b82546000908190801561305a576000612f5987612b1860018561391d565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015612fad57604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612ff95784612fd088612b1860018661391d565b80546001600160d01b0392909216600160301b0265ffffffffffff90921691909117905561304a565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150612b5c9050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081612b5c565b60006130bf612754565b54600160401b900460ff16919050565b806001600160a01b03163b6000036130fc5780604051634c9c8ce360e01b8152600401610875919061332b565b6000805160206139c483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516131489190613967565b600060405180830381855af49150503d8060008114613183576040519150601f19603f3d011682016040523d82523d6000602084013e613188565b606091505b5091509150613198858383613285565b95945050505050565b34156127805760405163b398979f60e01b815260040160405180910390fd5b600080608083901c156131d557608092831c92015b604083901c156131e757604092831c92015b602083901c156131f957602092831c92015b601083901c1561320b57601092831c92015b600883901c1561321d57600892831c92015b600483901c1561322f57600492831c92015b600283901c1561324157600292831c92015b600183901c1561076c5760010192915050565b600081831061326357816128d3565b5090919050565b600061327960028484186138fb565b6128d3908484166136ed565b606