UNPKG

@vechain/vebetterdao-contracts

Version:

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

1,461 lines 96.6 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Emissions", "sourceName": "contracts/Emissions.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": "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": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newDuration", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldDuration", "type": "uint256" } ], "name": "EmissionCycleDurationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "cycle", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "xAllocations", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vote2Earn", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "treasury", "type": "uint256" } ], "name": "EmissionDistributed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "cycle", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "xAllocations", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vote2Earn", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "treasury", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "gm", "type": "uint256" } ], "name": "EmissionDistributedV2", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newPercentage", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldPercentage", "type": "uint256" } ], "name": "GMPercentageUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newDecay", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldDecay", "type": "uint256" } ], "name": "MaxVote2EarnDecayUpdated", "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": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "TreasuryAddressUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newPercentage", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldPercentage", "type": "uint256" } ], "name": "TreasuryPercentageUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "Vote2EarnAddressUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newPeriod", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldPeriod", "type": "uint256" } ], "name": "Vote2EarnDecayPeriodUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newDecay", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldDecay", "type": "uint256" } ], "name": "Vote2EarnDecayUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "XAllocationsAddressUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newPeriod", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldPeriod", "type": "uint256" } ], "name": "XAllocationsDecayPeriodUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newDecay", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "oldDecay", "type": "uint256" } ], "name": "XAllocationsDecayUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "oldAddress", "type": "address" } ], "name": "XAllocationsGovernorAddressUpdated", "type": "event" }, { "inputs": [], "name": "CONTRACTS_ADDRESS_MANAGER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DECAY_SETTINGS_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": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "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": [], "name": "b3tr", "outputs": [ { "internalType": "contract IB3TR", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bootstrap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "cycleDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "distribute", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "cycle", "type": "uint256" } ], "name": "emissions", "outputs": [ { "internalType": "uint256", "name": "xAllocationsAmount", "type": "uint256" }, { "internalType": "uint256", "name": "vote2EarnAmount", "type": "uint256" }, { "internalType": "uint256", "name": "treasuryAmount", "type": "uint256" }, { "internalType": "uint256", "name": "gmAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCurrentCycle", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "cycle", "type": "uint256" } ], "name": "getGMAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNextCycleBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRemainingEmissions", "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": "uint256", "name": "cycle", "type": "uint256" } ], "name": "getTreasuryAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "cycle", "type": "uint256" } ], "name": "getVote2EarnAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "cycle", "type": "uint256" } ], "name": "getXAllocationAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gmPercentage", "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": [], "name": "initialXAppAllocation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "upgrader", "type": "address" }, { "internalType": "address", "name": "contractsAddressManager", "type": "address" }, { "internalType": "address", "name": "decaySettingsManager", "type": "address" }, { "internalType": "address", "name": "b3trAddress", "type": "address" }, { "internalType": "address[4]", "name": "destinations", "type": "address[4]" }, { "internalType": "uint256", "name": "migrationAmount", "type": "uint256" }, { "internalType": "uint256", "name": "initialXAppAllocation", "type": "uint256" }, { "internalType": "uint256", "name": "cycleDuration", "type": "uint256" }, { "internalType": "uint256[4]", "name": "decaySettings", "type": "uint256[4]" }, { "internalType": "uint256", "name": "treasuryPercentage", "type": "uint256" }, { "internalType": "uint256", "name": "maxVote2EarnDecay", "type": "uint256" } ], "internalType": "struct Emissions.InitializationData", "name": "data", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_isEmissionsNotAligned", "type": "bool" } ], "name": "initializeV2", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_gmPercentage", "type": "uint256" } ], "name": "initializeV3", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "cycle", "type": "uint256" } ], "name": "isCycleDistributed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "cycle", "type": "uint256" } ], "name": "isCycleEnded", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isEmissionsNotAligned", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isNextCycleDistributable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastEmissionBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxVote2EarnDecay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextCycle", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "_cycleDuration", "type": "uint256" } ], "name": "setCycleDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_percentage", "type": "uint256" } ], "name": "setGmPercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxVote2EarnDecay", "type": "uint256" } ], "name": "setMaxVote2EarnDecay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "treasuryAddress", "type": "address" } ], "name": "setTreasuryAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_percentage", "type": "uint256" } ], "name": "setTreasuryPercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "vote2EarnAddress", "type": "address" } ], "name": "setVote2EarnAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_decay", "type": "uint256" } ], "name": "setVote2EarnDecay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_period", "type": "uint256" } ], "name": "setVote2EarnDecayPeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_decay", "type": "uint256" } ], "name": "setXAllocationsDecay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_period", "type": "uint256" } ], "name": "setXAllocationsDecayPeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_xAllocationsGovernor", "type": "address" } ], "name": "setXAllocationsGovernorAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "xAllocationAddress", "type": "address" } ], "name": "setXallocationsAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "start", "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": "totalEmissions", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "treasuryPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "vote2Earn", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vote2EarnDecay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vote2EarnDecayPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "xAllocations", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "xAllocationsDecay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "xAllocationsDecayPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "xAllocationsGovernor", "outputs": [ { "internalType": "contract IXAllocationVotingGovernor", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613f6162000104600039600081816131df0152818161320801526133390152613f616000f3fe6080604052600436106102c85760003560e01c806301ffc9a7146102cd5780630b236bf714610302578063100e550a1461032557806311c2e55d1461034757806319a66974146103695780631e2272c514610389578063248a9ca31461039e578063273364ef146103be578063289de0c1146103de5780632f2ff15d146103fe578063323fe7b51461041e578063324462031461043e5780633542e9031461045357806336568abe14610473578063367df424146104935780633af03ea8146104a85780633c3d8410146104c85780633fe0a055146104e857806341f6659b146104fd578063450db90b1461051d5780634553e60a146105325780634bdd36ce146105525780634f1ef286146105675780634f228ec21461057a5780634f4eeeaa1461058f57806352d1902d146105af57806354fd4d50146105c4578063582a486a146105f75780635bec4cb41461060c5780635ecf68e91461062157806361d027b3146106365780636605bfda1461064b5780636b6923b81461066b57806373e96a33146106805780637ab56083146106955780638cc23934146106aa5780638e083b03146106ca5780638ffa2d0e146106ea57806391d148541461070a578063952f21331461072a5780639be1f1491461074c5780639e6fd7e61461076c578063a217fddf1461078c578063a465fb0a146107a1578063a66bc817146107b6578063a9a5aa56146107d6578063ad3cb1cc146107eb578063be26ed7f1461081c578063be9a655514610831578063c66966b714610846578063cb6da6701461085b578063cf7ee5fd1461088b578063d5391393146108a0578063d547741f146108c2578063dcb74b3f146108e2578063e4fc6b6d14610904578063e52ef17f14610919578063e7b685cf14610939578063e95e824a1461094e578063eb3585341461096e578063ef4cadc51461098e578063f72c0d8b146109a5578063fb969b0a146109c7575b600080fd5b3480156102d957600080fd5b506102ed6102e836600461377d565b6109dc565b60405190151581526020015b60405180910390f35b34801561030e57600080fd5b50610317610a13565b6040519081526020016102f9565b34801561033157600080fd5b5061033a610a26565b6040516102f991906137a7565b34801561035357600080fd5b506103676103623660046137bb565b610a42565b005b34801561037557600080fd5b506103676103843660046137f0565b610b0a565b34801561039557600080fd5b506102ed610c09565b3480156103aa57600080fd5b506103176103b93660046137bb565b610c33565b3480156103ca57600080fd5b506103176103d93660046137bb565b610c53565b3480156103ea57600080fd5b506103676103f93660046137bb565b610cb7565b34801561040a57600080fd5b5061036761041936600461380b565b610d76565b34801561042a57600080fd5b50610367610439366004613964565b610d98565b34801561044a57600080fd5b50610317611518565b34801561045f57600080fd5b5061031761046e3660046137bb565b61153f565b34801561047f57600080fd5b5061036761048e36600461380b565b61159c565b34801561049f57600080fd5b506103176115d4565b3480156104b457600080fd5b506103676104c33660046137f0565b6115e7565b3480156104d457600080fd5b506103676104e33660046137bb565b611770565b3480156104f457600080fd5b5061031761188d565b34801561050957600080fd5b50610367610518366004613a58565b6118a0565b34801561052957600080fd5b50610317611953565b34801561053e57600080fd5b5061036761054d3660046137bb565b611966565b34801561055e57600080fd5b50610317611a37565b610367610575366004613a75565b611acc565b34801561058657600080fd5b50610317611aeb565b34801561059b57600080fd5b506103676105aa3660046137bb565b611afe565b3480156105bb57600080fd5b50610317611b7f565b3480156105d057600080fd5b506040805180820190915260018152603360f81b60208201525b6040516102f99190613b3e565b34801561060357600080fd5b5061033a611b9c565b34801561061857600080fd5b50610317611bb5565b34801561062d57600080fd5b5061033a611bc8565b34801561064257600080fd5b5061033a611be4565b34801561065757600080fd5b506103676106663660046137f0565b611c00565b34801561067757600080fd5b50610317611cfc565b34801561068c57600080fd5b50610317611d0f565b3480156106a157600080fd5b50610317611d22565b3480156106b657600080fd5b506103676106c53660046137bb565b611d35565b3480156106d657600080fd5b506103676106e53660046137f0565b611e4a565b3480156106f657600080fd5b506103676107053660046137bb565b611f47565b34801561071657600080fd5b506102ed61072536600461380b565b612003565b34801561073657600080fd5b50610317600080516020613ecc83398151915281565b34801561075857600080fd5b506103176107673660046137bb565b612039565b34801561077857600080fd5b506103676107873660046137bb565b61209f565b34801561079857600080fd5b50610317600081565b3480156107ad57600080fd5b5061033a612173565b3480156107c257600080fd5b506102ed6107d13660046137bb565b61218f565b3480156107e257600080fd5b506102ed6121b1565b3480156107f757600080fd5b506105ea604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561082857600080fd5b506103176121c7565b34801561083d57600080fd5b50610367612239565b34801561085257600080fd5b50610317612430565b34801561086757600080fd5b5061087b6108763660046137bb565b612443565b6040516102f99493929190613b71565b34801561089757600080fd5b506103176124a9565b3480156108ac57600080fd5b50610317600080516020613eac83398151915281565b3480156108ce57600080fd5b506103676108dd36600461380b565b6124bc565b3480156108ee57600080fd5b50610317600080516020613e0c83398151915281565b34801561091057600080fd5b506103676124d8565b34801561092557600080fd5b506102ed6109343660046137bb565b612921565b34801561094557600080fd5b5061031761298b565b34801561095a57600080fd5b506103676109693660046137bb565b61299e565b34801561097a57600080fd5b506103176109893660046137bb565b612a5b565b34801561099a57600080fd5b50610317620f424081565b3480156109b157600080fd5b50610317600080516020613e6c83398151915281565b3480156109d357600080fd5b50610367612ac4565b60006001600160e01b03198216637965db0b60e01b1480610a0d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000610a1d612e22565b60090154905090565b6000610a30612e22565b600301546001600160a01b0316919050565b600080516020613e0c833981519152610a5a81612e46565b612710821115610ac25760405162461bcd60e51b815260206004820152603a6024820152600080516020613dec8339815191526044820152790757374206265206265747765656e203020616e642031303030360341b60648201526084015b60405180910390fd5b6000610acc612e22565b905080600f0154837f0deeffbb4509f1ce2d10e6be0a39dd765796271e488c93b2f455d4f86f55bba760405160405180910390a3600f019190915550565b600080516020613ecc833981519152610b2281612e46565b6001600160a01b038216610b995760405162461bcd60e51b815260206004820152603860248201527f456d697373696f6e733a2078416c6c6f636174696f6e416464726573732063616044820152776e6e6f7420626520746865207a65726f206164647265737360401b6064820152608401610ab9565b6000610ba3612e22565b60028101546040519192506001600160a01b0390811691908516907f3e77e17725ad6388690c6b478b505741b36c387ddd1625044d8597cabe0790b590600090a360020180546001600160a01b0319166001600160a01b03939093169290921790915550565b600080610c14612e22565b905080600801548160100154610c2a9190613ba2565b43101591505090565b600080610c3e612e50565b60009384526020525050604090206001015490565b600080610c5e612e22565b90508060070154831115610c845760405162461bcd60e51b8152600401610ab990613bb5565b610c8d8361218f565b610c9e57610c99612e74565b610cb0565b60008381526011820160205260409020545b9392505050565b600080516020613e0c833981519152610ccf81612e46565b6064821115610d2e5760405162461bcd60e51b81526020600482015260376024820152600080516020613eec83398151915260448201527607374206265206265747765656e203020616e642031303604c1b6064820152608401610ab9565b6000610d38612e22565b90508060090154837f3a1ff98d8ba06af5b7cd7bb19bca111f6fa1fba9552b8f15dd2b3f86dfbe202260405160405180910390a36009019190915550565b610d7f82610c33565b610d8881612e46565b610d92838361301f565b50505050565b6000610da26130c0565b805490915060ff600160401b82041615906001600160401b0316600081158015610dc95750825b90506000826001600160401b03166001148015610de55750303b155b905081158015610df3575080155b15610e115760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610e3a57845460ff60401b1916600160401b1785555b600086610100015111610eb15760405162461bcd60e51b815260206004820152603960248201527f456d697373696f6e733a20496e697469616c207841707020616c6c6f6361746960448201527806f6e206d7573742062652067726561746572207468616e203603c1b6064820152608401610ab9565b600086610120015111610ed65760405162461bcd60e51b8152600401610ab990613bea565b6000866101600151118015610ef2575061271086610160015111155b610f4f5760405162461bcd60e51b815260206004820152603a6024820152600080516020613dec8339815191526044820152790757374206265206265747765656e203120616e642031303030360341b6064820152608401610ab9565b6101408601515115801590610f6b575061014086015151606410155b610fc55760405162461bcd60e51b81526020600482015260376024820152600080516020613eec83398151915260448201527607374206265206265747765656e203120616e642031303604c1b6064820152608401610ab9565b6101408601516020015115801590610fe7575061014086015160200151606410155b61103e5760405162461bcd60e51b81526020600482015260346024820152600080516020613e4c83398151915260448201527306265206265747765656e203120616e64203130360641b6064820152608401610ab9565b610140860151604001516110b75760405162461bcd60e51b815260206004820152603a60248201527f456d697373696f6e733a2078416c6c6f636174696f6e7320646563617920646560448201527906c6179206d7573742062652067726561746572207468616e20360341b6064820152608401610ab9565b6101408601516060015161112d5760405162461bcd60e51b815260206004820152603760248201527f456d697373696f6e733a20766f7465324561726e2064656361792064656c61796044820152760206d7573742062652067726561746572207468616e203604c1b6064820152608401610ab9565b60008661018001511180156111485750606486610180015111155b6111645760405162461bcd60e51b8152600401610ab990613c3a565b60c0860151516001600160a01b03166111e25760405162461bcd60e51b815260206004820152603a60248201527f456d697373696f6e733a2058416c6c6f636174696f6e732064657374696e6174604482015279696f6e2063616e6e6f74206265207a65726f206164647265737360301b6064820152608401610ab9565b60c0860151602001516001600160a01b03166112605760405162461bcd60e51b815260206004820152603760248201527f456d697373696f6e733a20566f7465324561726e2064657374696e6174696f6e6044820152762063616e6e6f74206265207a65726f206164647265737360481b6064820152608401610ab9565b60c0860151604001516001600160a01b03166112dd5760405162461bcd60e51b815260206004820152603660248201527f456d697373696f6e733a2054726561737572792064657374696e6174696f6e2060448201527563616e6e6f74206265207a65726f206164647265737360501b6064820152608401610ab9565b60208601516001600160a01b031661134f5760405162461bcd60e51b815260206004820152602f60248201527f456d697373696f6e733a2041646d696e20616464726573732063616e6e6f742060448201526e6265207a65726f206164647265737360881b6064820152608401610ab9565b6113576130e4565b61135f6130ec565b6113676130e4565b6000611371612e22565b60a088015181546001600160a01b03199081166001600160a01b0392831617835560c08a0151805160028501805484169185169190911790556020808201516003860180548516918616919091179055604080830151600487018054861691871691909117905560609283015160058701805490951695169490941790925560e08b015160068501556101208b015160088501556101408b01518051600986015580830151600a86015592830151600c8501559190910151600d830155610100890151600e830155610160890151600f830155610180890151600b8301558801519091506114619060009061301f565b5061147e600080516020613eac833981519152886000015161301f565b5061149b600080516020613e6c833981519152886040015161301f565b506114b8600080516020613ecc833981519152886060015161301f565b506114d5600080516020613e0c833981519152886080015161301f565b5050831561151057845460ff60401b19168555604051600080516020613e2c8339815191529061150790600190613c92565b60405180910390a15b505050505050565b600080611523612e22565b9050806008015481601001546115399190613ba2565b91505090565b60008061154a612e22565b905080600701548311156115705760405162461bcd60e51b8152600401610ab990613bb5565b6115798361218f565b61158557610c996130fc565b600092835260110160205250604090206001015490565b6001600160a01b03811633146115c55760405163334bd91960e11b815260040160405180910390fd5b6115cf828261315c565b505050565b60006115de612e22565b600b0154905090565b600080516020613ecc8339815191526115ff81612e46565b6001600160a01b0382166116795760405162461bcd60e51b815260206004820152603b60248201527f456d697373696f6e733a205f78416c6c6f636174696f6e73476f7665726e6f7260448201527a2063616e6e6f7420626520746865207a65726f206164647265737360281b6064820152608401610ab9565b611681611bb5565b826001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e39190613ca6565b106117005760405162461bcd60e51b8152600401610ab990613cbf565b600061170a612e22565b60018101546040519192506001600160a01b0390811691908516907fd9365634b1542359685e4d736b69f8a87476421f69da0f3f8054668ab19af12990600090a360010180546001600160a01b0319166001600160a01b03939093169290921790915550565b6003600061177c6130c0565b8054909150600160401b900460ff16806117a3575080546001600160401b03808416911610155b156117c15760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b17815560006117ea612e22565b90506127108411156118515760405162461bcd60e51b815260206004820152603c6024820152600080516020613f0c83398151915260448201527b0206c657373207468616e206f7220657175616c20746f2031303030360241b6064820152608401610ab9565b601401839055805460ff60401b19168155604051600080516020613e2c83398151915290611880908490613c92565b60405180910390a1505050565b6000611897612e22565b600e0154905090565b600260006118ac6130c0565b8054909150600160401b900460ff16806118d3575080546001600160401b03808416911610155b156118f15760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b178155600061191a612e22565b601301805460ff191685151517905550805460ff60401b19168155604051600080516020613e2c83398151915290611880908490613c92565b600061195d612e22565b60120154905090565b600080516020613e0c83398151915261197e81612e46565b600082116119ef5760405162461bcd60e51b815260206004820152603860248201527f456d697373696f6e733a20766f7465324561726e20646563617920706572696f604482015277064206d7573742062652067726561746572207468616e20360441b6064820152608401610ab9565b60006119f9612e22565b905080600d0154837fabd78647c007c6d1d6eecf4716e5a72a4d9bd9567a40c1bff6744afaea572e1960405160405180910390a3600d019190915550565b600080611a42612e22565b905080601201548160000160009054906101000a90046001600160a01b03166001600160a01b031663355274ea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac29190613ca6565b6115399190613d18565b611ad46131d4565b611add82613262565b611ae7828261327a565b5050565b6000611af5612e22565b600c0154905090565b600080516020613e0c833981519152611b1681612e46565b6064821115611b375760405162461bcd60e51b8152600401610ab990613c3a565b6000611b41612e22565b905080600b0154837f25926bb56f58bd134092558734add1eb03c0cd4d2ed23753bc592d341efd1ef460405160405180910390a3600b019190915550565b6000611b8961332e565b50600080516020613e8c83398151915290565b6000611ba6612e22565b546001600160a01b0316919050565b6000611bbf612e22565b60080154905090565b6000611bd2612e22565b600101546001600160a01b0316919050565b6000611bee612e22565b600401546001600160a01b0316919050565b600080516020613ecc833981519152611c1881612e46565b6001600160a01b038216611c8c5760405162461bcd60e51b815260206004820152603560248201527f456d697373696f6e733a207472656173757279416464726573732063616e6e6f6044820152747420626520746865207a65726f206164647265737360581b6064820152608401610ab9565b6000611c96612e22565b60048101546040519192506001600160a01b0390811691908516907f430359a6d97ced2b6f93c77a91e7ce9dfd43252eb91e916adba170485cd8a6a490600090a360040180546001600160a01b0319166001600160a01b03939093169290921790915550565b6000611d06612e22565b60070154905090565b6000611d19612e22565b600a0154905090565b6000611d2c612e22565b600f0154905090565b600080516020613e0c833981519152611d4d81612e46565b60008211611d6d5760405162461bcd60e51b8152600401610ab990613bea565b6000611d77612e22565b9050828160010160009054906101000a90046001600160a01b03166001600160a01b03166302a251a36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df39190613ca6565b10611e105760405162461bcd60e51b8152600401610ab990613cbf565b600881015460405184907f7c897ff56bcd3a056ab27ca141deca9ce9a09fe7b851715a4c03b369fd70ad6290600090a36008019190915550565b600080516020613ecc833981519152611e6281612e46565b6001600160a01b038216611ed75760405162461bcd60e51b815260206004820152603660248201527f456d697373696f6e733a20766f7465324561726e416464726573732063616e6e6044820152756f7420626520746865207a65726f206164647265737360501b6064820152608401610ab9565b6000611ee1612e22565b60038101546040519192506001600160a01b0390811691908516907f69a718f328110240051382af8d9230bd304c4f60d5c5c5c73b37629ba594c12b90600090a360030180546001600160a01b0319166001600160a01b03939093169290921790915550565b600080516020613e0c833981519152611f5f81612e46565b6064821115611fbb5760405162461bcd60e51b81526020600482015260346024820152600080516020613e4c83398151915260448201527306265206265747765656e203020616e64203130360641b6064820152608401610ab9565b6000611fc5612e22565b905080600a0154837f15aab0e25dd2072455ecac370347ecad5df8a13656d8bde714e0314ac71c541660405160405180910390a3600a019190915550565b60008061200e612e50565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600080612044612e22565b9050806007015483111561206a5760405162461bcd60e51b8152600401610ab990613bb5565b6120738361218f565b1561208c57600092835260150160205250604090205490565b6000612096613377565b95945050505050565b600080516020613e0c8339815191526120b781612e46565b6000821161212b5760405162461bcd60e51b815260206004820152603b60248201527f456d697373696f6e733a2078416c6c6f636174696f6e7320646563617920706560448201527a072696f64206d7573742062652067726561746572207468616e203602c1b6064820152608401610ab9565b6000612135612e22565b905080600c0154837f36ad3c0b2a12e3b2cdd1d93564f27f8b4a45b28fd15338f0bb82b6cfbdd384f360405160405180910390a3600c019190915550565b600061217d612e22565b600201546001600160a01b0316919050565b60008061219a612e22565b600093845260110160205250506040902054151590565b60006121bb612e22565b6013015460ff16919050565b6000806121d2612e22565b905060008160070154116122285760405162461bcd60e51b815260206004820152601f60248201527f456d697373696f6e733a206e6f7420626f6f74737472617070656420796574006044820152606401610ab9565b600181600701546115399190613d18565b600080516020613eac83398151915261225181612e46565b6122596133f7565b6000612263612e22565b805460408051635c975abb60e01b815290519293506001600160a01b0390911691635c975abb916004808201926020929091908290030181865afa1580156122af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d39190613d2b565b156123205760405162461bcd60e51b815260206004820152601f60248201527f456d697373696f6e733a204233545220746f6b656e20697320706175736564006044820152606401610ab9565b80600701546001146123945760405162461bcd60e51b815260206004820152603760248201527f456d697373696f6e733a2043616e206f6e6c7920737461727420656d697373696044820152766f6e73207768656e206e657874206379636c65203d203160481b6064820152608401610ab9565b436010820155600181015460408051632f61652360e21b815290516001600160a01b039092169163bd85948c9160048082019260209290919082900301816000875af11580156123e8573d6000803e3d6000fd5b505050506040513d6