ETH Price: $2,592.76 (-16.64%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute210656552024-10-28 17:34:5997 days ago1730136899IN
0x54B7235d...3b7d39856
0 ETH0.0022394825.16162707
Vote210656502024-10-28 17:33:5997 days ago1730136839IN
0x54B7235d...3b7d39856
0 ETH0.0019668422.84634332
Proposal210298522024-10-23 17:42:23102 days ago1729705343IN
0x54B7235d...3b7d39856
0 ETH0.0045243721.82829071
Proposal206844232024-09-05 12:35:59150 days ago1725539759IN
0x54B7235d...3b7d39856
0 ETH0.000673933.31312888
Execute199698512024-05-28 17:26:59250 days ago1716917219IN
0x54B7235d...3b7d39856
0 ETH0.0013907616.33980271
Vote199698302024-05-28 17:22:47250 days ago1716916967IN
0x54B7235d...3b7d39856
0 ETH0.0014467816.80544437
Vote199575162024-05-27 0:05:35252 days ago1716768335IN
0x54B7235d...3b7d39856
0 ETH0.000279293.86995611
Vote199370422024-05-24 3:25:35255 days ago1716521135IN
0x54B7235d...3b7d39856
0 ETH0.000484546.71407807
Vote199331232024-05-23 14:16:59255 days ago1716473819IN
0x54B7235d...3b7d39856
0 ETH0.0011690116.20599263
Vote199311372024-05-23 7:37:35256 days ago1716449855IN
0x54B7235d...3b7d39856
0 ETH0.0008150611.29387677
Vote199260202024-05-22 14:29:23256 days ago1716388163IN
0x54B7235d...3b7d39856
0 ETH0.0018253220.14837005
Proposal199195002024-05-21 16:33:47257 days ago1716309227IN
0x54B7235d...3b7d39856
0 ETH0.0065235732.17496461
Execute196684142024-04-16 13:42:59292 days ago1713274979IN
0x54B7235d...3b7d39856
0 ETH0.0009611412.83448049
Vote196677252024-04-16 11:24:23292 days ago1713266663IN
0x54B7235d...3b7d39856
0 ETH0.0007603310.53550391
Vote196676292024-04-16 11:05:11292 days ago1713265511IN
0x54B7235d...3b7d39856
0 ETH0.0009165212.69964853
Vote196671902024-04-16 9:35:47292 days ago1713260147IN
0x54B7235d...3b7d39856
0 ETH0.000453688.9992662
Vote196671872024-04-16 9:35:11292 days ago1713260111IN
0x54B7235d...3b7d39856
0 ETH0.000684058.99886863
Vote196664342024-04-16 7:03:59293 days ago1713251039IN
0x54B7235d...3b7d39856
0 ETH0.000660229.14833619
Vote196664222024-04-16 7:01:35293 days ago1713250895IN
0x54B7235d...3b7d39856
0 ETH0.000694779.62704164
Vote196664162024-04-16 7:00:23293 days ago1713250823IN
0x54B7235d...3b7d39856
0 ETH0.000668679.26534324
Vote196650952024-04-16 2:33:11293 days ago1713234791IN
0x54B7235d...3b7d39856
0 ETH0.000620838.60252034
Vote196650162024-04-16 2:17:11293 days ago1713233831IN
0x54B7235d...3b7d39856
0 ETH0.000597128.2739189
Vote196646412024-04-16 1:01:47293 days ago1713229307IN
0x54B7235d...3b7d39856
0 ETH0.000595388.24994085
Vote196644252024-04-16 0:17:47293 days ago1713226667IN
0x54B7235d...3b7d39856
0 ETH0.000547767.58998062
Vote196642692024-04-15 23:45:59293 days ago1713224759IN
0x54B7235d...3b7d39856
0 ETH0.000577358
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ArcadeCoreVoting

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion
File 1 of 5 : ArcadeCoreVoting.sol
// SPDX-License-Identifier: Apache-2.0

/* solhint-disable */

pragma solidity 0.8.18;

import "./external/council/interfaces/IVotingVault.sol";
import "./external/council/libraries/Authorizable.sol";
import "./external/council/libraries/ReentrancyBlock.sol";
import "./external/council/interfaces/ICoreVoting.sol";

contract ArcadeCoreVoting is Authorizable, ReentrancyBlock, ICoreVoting {
    // if a function selector does not have a set quorum we use this default quorum
    uint256 public baseQuorum;

    // Assumes avg block time of 12.06 seconds. May be longer or shorter due
    // to ice ages or short term changes in hash power.
    uint256 public constant DAY_IN_BLOCKS = 7150;

    // minimum time a proposal must be active for before executing
    // Default to 3 days, this avoids weekend surprise proposals
    uint256 public lockDuration = DAY_IN_BLOCKS * 3;

    // The number of blocks after the proposal is unlocked during which
    // voting can continue. Max vote time = lockDuration + extraVoteTime
    // Default to ~5 days of blocks, ie 8 days max vote time
    uint256 public extraVoteTime = DAY_IN_BLOCKS * 5;

    // minimum amount of voting power required to submit a proposal
    uint256 public minProposalPower;

    // number of proposals created
    uint256 public proposalCount;

    // toggle to allow new voting vaults to be approved or not
    // can only be set upon deployment
    bool public immutable allowNewVotingVaults;

    // mapping of address and selector to quorum
    mapping(address => mapping(bytes4 => uint256)) private _quorums;

    /// @notice Override of the getter for the 'quorums' mapping which returns the default
    ///         quorum when the quorum is not set.
    /// @param target the contract for which the quorum is set
    /// @param functionSelector the function which is callable
    /// @return The quorum needed to pass the function at this point in time
    function quorums(address target, bytes4 functionSelector) public view returns (uint256) {
        uint256 storedQuorum = _quorums[target][functionSelector];

        if (storedQuorum == 0) {
            return baseQuorum;
        } else {
            return storedQuorum;
        }
    }

    // stores approved voting vaults
    mapping(address => bool) public override approvedVaults;

    // proposal storage with the proposalID as key
    mapping(uint256 => Proposal) public proposals;

    // mapping of addresses and proposalIDs to vote struct representing
    // the voting actions taken for each proposal
    mapping(address => mapping(uint256 => Vote)) public votes;

    enum Ballot {
        YES,
        NO,
        MAYBE
    }

    struct Proposal {
        // hash of this proposal's intended function calls
        bytes32 proposalHash;
        // block of the proposal creation
        uint128 created;
        // timestamp when the proposal can execute
        uint128 unlock;
        // expiration time of a proposal
        uint128 expiration;
        // the quorum required for the proposal to execute
        uint128 quorum;
        // [yes, no, maybe] voting power
        uint128[3] votingPower;
        // Timestamp after which if the call has not been executed it cannot be executed
        uint128 lastCall;
    }

    struct Vote {
        // voting power of the vote
        uint128 votingPower;
        // direction of the vote
        Ballot castBallot;
    }

    event ProposalCreated(uint256 proposalId, uint256 created, uint256 execution, uint256 expiration);

    event ProposalExecuted(uint256 proposalId);

    event Voted(address indexed voter, uint256 indexed proposalId, Vote vote);

    /// @notice constructor
    /// @param _timelock Timelock contract.
    /// @param _baseQuorum Default quorum for all functions with no set quorum.
    /// @param _minProposalPower Minimum voting power needed to submit a proposal.
    /// @param _gsc governance steering committee contract.
    /// @param votingVaults Initial voting vaults to approve.
    constructor(
        address _timelock,
        uint256 _baseQuorum,
        uint256 _minProposalPower,
        address _gsc,
        address[] memory votingVaults,
        bool _allowNewVotingVaults
    ) Authorizable() {
        baseQuorum = _baseQuorum;
        minProposalPower = _minProposalPower;
        allowNewVotingVaults = _allowNewVotingVaults;
        for (uint256 i = 0; i < votingVaults.length; i++) {
            approvedVaults[votingVaults[i]] = true;
        }
        setOwner(address(_timelock));
        _authorize(_gsc);
    }

    /// @notice Create a new proposal
    /// @dev all provided votingVaults must be approved vaults `approvedVaults`.
    /// @param votingVaults voting vaults to draw voting power from.
    /// @param extraVaultData an encoded list of extra data to provide to vaults
    /// @param targets list of target addresses the timelock contract will interact with.
    /// @param calldatas execution calldata for each target.
    /// @param lastCall timestamp after which this cannot be executed, note should be
    ///                 more than the voting time period
    /// @param ballot vote direction (yes, no, maybe)
    function proposal(
        address[] calldata votingVaults,
        bytes[] calldata extraVaultData,
        address[] calldata targets,
        bytes[] calldata calldatas,
        uint256 lastCall,
        Ballot ballot
    ) external {
        require(targets.length == calldatas.length, "array length mismatch");
        require(targets.length != 0, "empty proposal");

        // the hash is only used to verify the proposal data, proposals are tracked by ID
        // so there is no need to hash with proposalCount nonce.
        bytes32 proposalHash = keccak256(abi.encode(targets, calldatas));

        // get the quorum requirement for this proposal. The quorum requirement is equal to
        // the greatest quorum item in the proposal
        uint256 quorum;

        for (uint256 i = 0; i < targets.length; i++) {
            // function selector should be the first 4 bytes of the calldata
            bytes4 selector = _getSelector(calldatas[i]);

            uint256 unitQuorum = _quorums[targets[i]][selector];

            // don't assume baseQuorum is the highest

            unitQuorum = unitQuorum == 0 ? baseQuorum : unitQuorum;
            if (unitQuorum > quorum) {
                quorum = unitQuorum;
            }
        }

        // We check that the expiration is possibly valid
        require(lastCall > block.number + lockDuration + extraVoteTime, "expires before voting ends");

        proposals[proposalCount] = Proposal(
            proposalHash,
            // Note we use blocknumber - 1 here as a flash loan mitigation.
            uint128(block.number - 1),
            uint128(block.number + lockDuration),
            uint128(block.number + lockDuration + extraVoteTime),
            uint128(quorum),
            proposals[proposalCount].votingPower,
            uint128(lastCall)
        );

        uint256 votingPower = vote(votingVaults, extraVaultData, proposalCount, ballot);

        // the proposal quorum is the lowest of minProposalPower and the proposal quorum
        // because it is awkward for the proposal to require more voting power than
        // the execution
        uint256 minPower = quorum <= minProposalPower ? quorum : minProposalPower;
        // the GSC (governance steering comity) contract does not have a voting power requirement
        // to submit a proposal
        if (!isAuthorized(msg.sender)) {
            require(votingPower >= minPower, "insufficient voting power");
        }

        emit ProposalCreated(
            proposalCount,
            block.number,
            block.number + lockDuration,
            block.number + lockDuration + extraVoteTime
        );

        proposalCount += 1;
    }

    /// @notice Votes for a new proposal.
    /// @dev all provided votingVaults must be approved vaults `approvedVaults`.
    /// Addresses can re-vote, but the previous vote's effect will be negated.
    /// @param votingVaults voting vaults to draw voting power from.
    /// @param extraVaultData extra bytes data to give to each vault
    /// @param proposalId proposal identifier.
    /// @param ballot vote direction (yes, no, maybe)
    /// @return the user's voting power
    function vote(
        address[] memory votingVaults,
        bytes[] memory extraVaultData,
        uint256 proposalId,
        Ballot ballot
    ) public returns (uint256) {
        // No votes after the vote period is over
        require(proposals[proposalId].created != 0, "proposal does not exist");
        require(block.number <= proposals[proposalId].expiration, "Expired");

        uint128 votingPower;

        for (uint256 i = 0; i < votingVaults.length; i++) {
            // ensure there are no voting vault duplicates
            for (uint256 j = i + 1; j < votingVaults.length; j++) {
                require(votingVaults[i] != votingVaults[j], "duplicate vault");
            }
            require(approvedVaults[votingVaults[i]], "unverified vault");
            votingPower += uint128(
                IVotingVault(votingVaults[i]).queryVotePower(
                    msg.sender,
                    proposals[proposalId].created,
                    extraVaultData[i]
                )
            );
        }

        // if a user has already voted, undo their previous vote.
        // NOTE: A new vote can have less voting power
        if (votes[msg.sender][proposalId].votingPower > 0) {
            proposals[proposalId].votingPower[uint256(votes[msg.sender][proposalId].castBallot)] -= votes[msg.sender][
                proposalId
            ].votingPower;
        }
        votes[msg.sender][proposalId] = Vote(votingPower, ballot);

        proposals[proposalId].votingPower[uint256(ballot)] += votingPower;

        // Emit an event to track this info
        emit Voted(msg.sender, proposalId, votes[msg.sender][proposalId]);

        return votingPower;
    }

    /// @notice Execute a proposal.
    /// @param proposalId proposal identifier.
    /// @param targets list of target addresses the timelock contract will interact with.
    /// @param calldatas execution calldata for each target.
    function execute(uint256 proposalId, address[] memory targets, bytes[] memory calldatas) external nonReentrant {
        // We have to execute after min voting period
        require(block.number >= proposals[proposalId].unlock, "not unlocked");
        // If executed the proposal will be deleted and this will be zero
        require(proposals[proposalId].unlock != 0, "Previously executed");
        // We cannot execute if the proposal has expired
        require(block.number < proposals[proposalId].lastCall, "past last call timestamp");

        // ensure the data matches the hash
        require(keccak256(abi.encode(targets, calldatas)) == proposals[proposalId].proposalHash, "hash mismatch");

        uint128[3] memory results = proposals[proposalId].votingPower;

        // if there are enough votes to meet quorum and there are more yes votes than no votes
        // then the proposal is executed
        bool passesQuorum = results[0] + results[1] + results[2] >= proposals[proposalId].quorum;
        bool majorityInFavor = results[0] > results[1];
        require(passesQuorum && majorityInFavor, "Cannot execute");

        // Execute a package of low level calls
        // NOTE - All of them must succeed for the package to succeed.
        for (uint256 i = 0; i < targets.length; i++) {
            (bool success, ) = targets[i].call(calldatas[i]);
            require(success, "Call failed");
        }
        // Notification of proposal execution
        emit ProposalExecuted(proposalId);

        // delete proposal for some gas savings,
        // Proposals are only deleted when they are actually executed, failed proposals
        // are never deleted
        delete proposals[proposalId];
    }

    /// @notice gets the current voting power for a proposal
    /// @param proposalId The proposal's ID.
    function getProposalVotingPower(uint256 proposalId) external view returns (uint128[3] memory) {
        return proposals[proposalId].votingPower;
    }

    /// @notice Sets a quorum for a specific address and selector.
    /// @param target Target contract address.
    /// @param selector Function selector.
    /// @param quorum Fraction to set quorum to.
    function setCustomQuorum(address target, bytes4 selector, uint256 quorum) external onlyOwner {
        _quorums[target][selector] = quorum;
    }

    /// @notice Updates the status of a voting vault.
    /// @param vault Address of the voting vault.
    /// @param isValid True to be valid, false otherwise.
    function changeVaultStatus(address vault, bool isValid) external onlyOwner {
        require(allowNewVotingVaults, "new vaults not allowed");

        approvedVaults[vault] = isValid;
    }

    /// @notice Updates the default quorum.
    /// @param quorum New base quorum.
    function setDefaultQuorum(uint256 quorum) external onlyOwner {
        baseQuorum = quorum;
    }

    /// @notice Updates the minimum voting power needed to submit a proposal.
    /// @param _minProposalPower Minimum voting power needed to submit a proposal.
    function setMinProposalPower(uint256 _minProposalPower) external onlyOwner {
        minProposalPower = _minProposalPower;
    }

    /// @notice Updates the lock duration of a proposal.
    /// @param _lockDuration New lock duration.
    function setLockDuration(uint256 _lockDuration) external onlyOwner {
        lockDuration = _lockDuration;
    }

    /// @notice Updates the extra voting period
    /// @param _extraVoteTime New extra voting time
    function changeExtraVotingTime(uint256 _extraVoteTime) external onlyOwner {
        extraVoteTime = _extraVoteTime;
    }

    /// @notice Internal helper function to get the function selector of a calldata string.
    function _getSelector(bytes memory _calldata) internal pure returns (bytes4 out) {
        assembly {
            out := and(mload(add(_calldata, 32)), 0xFFFFFFFFF0000000000000000000000000000000000000000000000000000000)
        }
    }
}

File 2 of 5 : ICoreVoting.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.3;

interface ICoreVoting {
    /// @notice A method auto generated from a public storage mapping, looks
    ///         up which vault addresses are approved by core voting
    /// @param vault the address to check if it is an approved vault
    /// @return true if approved false if not approved
    function approvedVaults(address vault) external view returns (bool);
}

File 3 of 5 : IVotingVault.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.3;

interface IVotingVault {
    /// @notice Attempts to load the voting power of a user
    /// @param user The address we want to load the voting power of
    /// @param blockNumber the block number we want the user's voting power at
    /// @param extraData Abi encoded optional extra data used by some vaults, such as merkle proofs
    /// @return the number of votes
    function queryVotePower(
        address user,
        uint256 blockNumber,
        bytes calldata extraData
    ) external returns (uint256);
}

File 4 of 5 : Authorizable.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.7.0;

contract Authorizable {
    // This contract allows a flexible authorization scheme

    // The owner who can change authorization status
    address public owner;
    // A mapping from an address to its authorization status
    mapping(address => bool) public authorized;

    /// @dev We set the deployer to the owner
    constructor() {
        owner = msg.sender;
    }

    /// @dev This modifier checks if the msg.sender is the owner
    modifier onlyOwner() {

        require(msg.sender == owner, "Sender not owner");
        _;

    }

    /// @dev This modifier checks if an address is authorized
    modifier onlyAuthorized() {
        require(isAuthorized(msg.sender), "Sender not Authorized");
        _;
    }

    /// @dev Returns true if an address is authorized
    /// @param who the address to check
    /// @return true if authorized false if not
    function isAuthorized(address who) public view returns (bool) {
        return authorized[who];
    }

    /// @dev Privileged function authorize an address
    /// @param who the address to authorize
    function authorize(address who) external onlyOwner() {
        _authorize(who);
    }

    /// @dev Privileged function to de authorize an address
    /// @param who The address to remove authorization from
    function deauthorize(address who) external onlyOwner() {
        authorized[who] = false;
    }

    /// @dev Function to change owner
    /// @param who The new owner address
    function setOwner(address who) public onlyOwner() {
        owner = who;
    }

    /// @dev Inheritable function which authorizes someone
    /// @param who the address to authorize
    function _authorize(address who) internal {
        authorized[who] = true;
    }
}

File 5 of 5 : ReentrancyBlock.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.3;

contract ReentrancyBlock {
    // A storage slot for the reentrancy flag
    bool private _entered;
    // Will use a state flag to prevent this function from being called back into
    modifier nonReentrant() {
        // Check the state variable before the call is entered
        require(!_entered, "Reentrancy");
        // Store that the function has been entered
        _entered = true;
        // Run the function code
        _;
        // Clear the state
        _entered = false;
    }
}

Settings
{
  "metadata": {
    "bytecodeHash": "none"
  },
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_timelock","type":"address"},{"internalType":"uint256","name":"_baseQuorum","type":"uint256"},{"internalType":"uint256","name":"_minProposalPower","type":"uint256"},{"internalType":"address","name":"_gsc","type":"address"},{"internalType":"address[]","name":"votingVaults","type":"address[]"},{"internalType":"bool","name":"_allowNewVotingVaults","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"created","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"execution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"components":[{"internalType":"uint128","name":"votingPower","type":"uint128"},{"internalType":"enum ArcadeCoreVoting.Ballot","name":"castBallot","type":"uint8"}],"indexed":false,"internalType":"struct ArcadeCoreVoting.Vote","name":"vote","type":"tuple"}],"name":"Voted","type":"event"},{"inputs":[],"name":"DAY_IN_BLOCKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowNewVotingVaults","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedVaults","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseQuorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_extraVoteTime","type":"uint256"}],"name":"changeExtraVotingTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"bool","name":"isValid","type":"bool"}],"name":"changeVaultStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extraVoteTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalVotingPower","outputs":[{"internalType":"uint128[3]","name":"","type":"uint128[3]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minProposalPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"votingVaults","type":"address[]"},{"internalType":"bytes[]","name":"extraVaultData","type":"bytes[]"},{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"uint256","name":"lastCall","type":"uint256"},{"internalType":"enum ArcadeCoreVoting.Ballot","name":"ballot","type":"uint8"}],"name":"proposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"bytes32","name":"proposalHash","type":"bytes32"},{"internalType":"uint128","name":"created","type":"uint128"},{"internalType":"uint128","name":"unlock","type":"uint128"},{"internalType":"uint128","name":"expiration","type":"uint128"},{"internalType":"uint128","name":"quorum","type":"uint128"},{"internalType":"uint128","name":"lastCall","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSelector","type":"bytes4"}],"name":"quorums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"setCustomQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"setDefaultQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockDuration","type":"uint256"}],"name":"setLockDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minProposalPower","type":"uint256"}],"name":"setMinProposalPower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"votingVaults","type":"address[]"},{"internalType":"bytes[]","name":"extraVaultData","type":"bytes[]"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"enum ArcadeCoreVoting.Ballot","name":"ballot","type":"uint8"}],"name":"vote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"votes","outputs":[{"internalType":"uint128","name":"votingPower","type":"uint128"},{"internalType":"enum ArcadeCoreVoting.Ballot","name":"castBallot","type":"uint8"}],"stateMutability":"view","type":"function"}]

60a060405262000013611bee6003620001b5565b60045562000025611bee6005620001b5565b6005553480156200003557600080fd5b50604051620030ac380380620030ac833981016040819052620000589162000219565b600080546001600160a01b03191633178155600386905560068590558115156080525b8251811015620000e757600160096000858481518110620000a057620000a062000338565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620000de816200034e565b9150506200007b565b50620000f3866200012b565b6200011f836001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b5050505050506200036a565b6000546001600160a01b031633146200017d5760405162461bcd60e51b815260206004820152601060248201526f29b2b73232b9103737ba1037bbb732b960811b604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620001cf57620001cf6200019f565b92915050565b80516001600160a01b0381168114620001ed57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80518015158114620001ed57600080fd5b60008060008060008060c087890312156200023357600080fd5b6200023e87620001d5565b95506020808801519550604088015194506200025d60608901620001d5565b60808901519094506001600160401b03808211156200027b57600080fd5b818a0191508a601f8301126200029057600080fd5b815181811115620002a557620002a5620001f2565b8060051b604051601f19603f83011681018181108582111715620002cd57620002cd620001f2565b60405291825284820192508381018501918d831115620002ec57600080fd5b938501935b8285101562000315576200030585620001d5565b84529385019392850192620002f1565b8097505050505050506200032c60a0880162000208565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b6000600182016200036357620003636200019f565b5060010190565b608051612d1f6200038d6000396000818161031f0152610e540152612d1f6000f3fe608060405234801561001057600080fd5b50600436106101b85760003560e01c80638da5cb5b116100f9578063bd9c75a511610097578063d4b8756711610071578063d4b87567146104db578063da35c664146104e4578063f131e5eb146104ed578063fe9fbb80146104f657600080fd5b8063bd9c75a514610495578063c52ea3db146104a8578063d1b67627146104c857600080fd5b8063aa35fb51116100d3578063aa35fb5114610429578063af7a060c1461043c578063b6a5d7de1461045f578063b91816111461047257600080fd5b80638da5cb5b146103775780639f2524ee146103bc578063a4c950771461042057600080fd5b806327c97fa5116101665780634eb665af116101405780634eb665af146103075780635a4a60d81461031a578063771a5323146103515780637d5709eb1461036457600080fd5b806327c97fa5146102ce578063341a7b42146102e15780634392b99c146102f457600080fd5b806313af40351161019757806313af40351461029f57806315126a3d146102b25780631c39c96c146102c557600080fd5b806214d11d146101bd578063013cf08b146101d25780630455444314610288575b600080fd5b6101d06101cb3660046121b3565b61052f565b005b61023c6101e03660046121b3565b600a60205260009081526040902080546001820154600283015460059093015491926fffffffffffffffffffffffffffffffff808316937001000000000000000000000000000000009384900482169383831693048216911686565b604080519687526fffffffffffffffffffffffffffffffff9586166020880152938516938601939093529083166060850152821660808401521660a082015260c0015b60405180910390f35b61029160045481565b60405190815260200161027f565b6101d06102ad3660046121f5565b6105ba565b6101d06102c0366004612435565b610682565b61029160035481565b6101d06102dc3660046121f5565b610d04565b6101d06102ef3660046124a2565b610dd1565b6101d061030236600461250e565b610f2f565b6101d06103153660046121b3565b611006565b6103417f000000000000000000000000000000000000000000000000000000000000000081565b604051901515815260200161027f565b61029161035f36600461254a565b61108c565b6101d06103723660046121b3565b6110ff565b6000546103979073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161027f565b6104126103ca36600461257d565b600b6020908152600092835260408084209091529082529020546fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000900460ff1682565b60405161027f929190612611565b61029160055481565b610291610437366004612646565b611185565b61034161044a3660046121f5565b60096020526000908152604090205460ff1681565b6101d061046d3660046121f5565b611853565b6103416104803660046121f5565b60016020526000908152604090205460ff1681565b6101d06104a3366004612710565b61192d565b6104bb6104b63660046121b3565b611f85565b60405161027f91906127ed565b6101d06104d63660046121b3565b612011565b61029160065481565b61029160075481565b610291611bee81565b6103416105043660046121f5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064015b60405180910390fd5b600555565b60005473ffffffffffffffffffffffffffffffffffffffff16331461063b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025460ff16156106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5265656e7472616e63790000000000000000000000000000000000000000000060448201526064016105ac565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556000848152600a6020526040902001546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104164310156107bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f7420756e6c6f636b6564000000000000000000000000000000000000000060448201526064016105ac565b6000838152600a602052604081206001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16900361085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50726576696f75736c792065786563757465640000000000000000000000000060448201526064016105ac565b6000838152600a60205260409020600501546fffffffffffffffffffffffffffffffff1643106108e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f70617374206c6173742063616c6c2074696d657374616d70000000000000000060448201526064016105ac565b6000838152600a602090815260409182902054915161090c91859185910161289e565b6040516020818303038152906040528051906020012014610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f68617368206d69736d617463680000000000000000000000000000000000000060448201526064016105ac565b6000838152600a60205260408082208151606081019283905291600391820191908285855b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f010492830192600103820291508084116109ae575050506000888152600a60209081526040808320600201549087015191870151875197985092967001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169550909350610a5d92506129c8565b610a6791906129c8565b6fffffffffffffffffffffffffffffffff1610159050600082600160200201516fffffffffffffffffffffffffffffffff1683600060200201516fffffffffffffffffffffffffffffffff16119050818015610ac05750805b610b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f43616e6e6f74206578656375746500000000000000000000000000000000000060448201526064016105ac565b60005b8551811015610c4b576000868281518110610b4657610b4661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16868381518110610b7657610b7661296a565b6020026020010151604051610b8b91906129f1565b6000604051808303816000865af19150503d8060008114610bc8576040519150601f19603f3d011682016040523d82523d6000602084013e610bcd565b606091505b5050905080610c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f43616c6c206661696c656400000000000000000000000000000000000000000060448201526064016105ac565b5080610c4381612a0d565b915050610b29565b506040518681527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9060200160405180910390a150505060009283525050600a6020526040812081815560018101829055600280820183905560038201839055600482019290925560050180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b7f0000000000000000000000000000000000000000000000000000000000000000610ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577207661756c7473206e6f7420616c6c6f7765640000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526008602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000090941683529290522055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600455565b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260408083207fffffffff00000000000000000000000000000000000000000000000000000000851684529091528120548082036110f05750506003546110f9565b90506110f9565b505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600355565b6000828152600a60205260408120600101546fffffffffffffffffffffffffffffffff168103611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f70726f706f73616c20646f6573206e6f7420657869737400000000000000000060448201526064016105ac565b6000838152600a60205260409020600201546fffffffffffffffffffffffffffffffff1643111561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f457870697265640000000000000000000000000000000000000000000000000060448201526064016105ac565b6000805b86518110156115505760006112b8826001612a45565b90505b875181101561139d578781815181106112d6576112d661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168883815181106113065761130661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6475706c6963617465207661756c74000000000000000000000000000000000060448201526064016105ac565b8061139581612a0d565b9150506112bb565b50600960008883815181106113b4576113b461296a565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1661144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f756e7665726966696564207661756c740000000000000000000000000000000060448201526064016105ac565b8681815181106114605761146061296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663e91f323533600a600089815260200190815260200160002060010160009054906101000a90046fffffffffffffffffffffffffffffffff168985815181106114c9576114c961296a565b60200260200101516040518463ffffffff1660e01b81526004016114ef93929190612a58565b6020604051808303816000875af115801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190612aa8565b61153c90836129c8565b91508061154881612a0d565b9150506112a2565b50336000908152600b602090815260408083208784529091529020546fffffffffffffffffffffffffffffffff161561166757336000908152600b6020908152604080832087845280835281842054600a845291909320929091526fffffffffffffffffffffffffffffffff81169160030190700100000000000000000000000000000000900460ff1660028111156115eb576115eb6125a7565b600381106115fb576115fb61296a565b600291828204019190066010028282829054906101000a90046fffffffffffffffffffffffffffffffff166116309190612ac1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b6040518060400160405280826fffffffffffffffffffffffffffffffff16815260200184600281111561169c5761169c6125a7565b9052336000908152600b602090815260408083208884528252909120825181546fffffffffffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffff0000000000000000000000000000000082168117835592840151919283917fffffffffffffffffffffffffffffff00000000000000000000000000000000001617700100000000000000000000000000000000836002811115611746576117466125a7565b021790555050506000848152600a602052604090208190600301846002811115611772576117726125a7565b600381106117825761178261296a565b600291828204019190066010028282829054906101000a90046fffffffffffffffffffffffffffffffff166117b791906129c8565b82546fffffffffffffffffffffffffffffffff9182166101009390930a928302919092021990911617905550336000818152600b602090815260408083208884529091529081902090518692917f79597d31752b5a254be8f219c055ebfefe925e085d99c7b04b0883298b356951916118309190612aea565b60405180910390a36fffffffffffffffffffffffffffffffff1695945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146118d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b61192a8173ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b50565b848314611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6172726179206c656e677468206d69736d61746368000000000000000000000060448201526064016105ac565b6000859003611a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f656d7074792070726f706f73616c00000000000000000000000000000000000060448201526064016105ac565b600086868686604051602001611a1a9493929190612b63565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506000805b87811015611b7b576000611ac1888884818110611a7557611a7561296a565b9050602002810190611a879190612c8d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061209792505050565b90506000600860008c8c86818110611adb57611adb61296a565b9050602002016020810190611af091906121f5565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081207fffffffff000000000000000000000000000000000000000000000000000000008616825290925290205490508015611b545780611b58565b6003545b905083811115611b66578093505b50508080611b7390612a0d565b915050611a56565b50600554600454611b8c9043612a45565b611b969190612a45565b8411611bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f65787069726573206265666f726520766f74696e6720656e647300000000000060448201526064016105ac565b6040518060e00160405280838152602001600143611c1c9190612cf2565b6fffffffffffffffffffffffffffffffff16815260200160045443611c419190612a45565b6fffffffffffffffffffffffffffffffff16815260200160055460045443611c699190612a45565b611c739190612a45565b6fffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff168152602001600a60006007548152602001908152602001600020600301600380602002604051908101604052809291908260038015611d35576020028201916000905b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f01049283019260010382029150808411611ce05790505b50505091835250506fffffffffffffffffffffffffffffffff8681166020928301526007546000908152600a835260409081902084518155928401519084015190821670010000000000000000000000000000000091831682021760018401556060840151608085015190831692160217600282015560a0820151611dc090600380840191906120c0565b5060c08201518160050160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506000611e518d8d80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e4892508e91508f9050612d05565b60075487611185565b90506000600654831115611e6757600654611e69565b825b3360009081526001602052604090205490915060ff16611eed5780821015611eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e73756666696369656e7420766f74696e6720706f7765720000000000000060448201526064016105ac565b7fafbd5d299242bf861d198949ad835672e2e35b2e1838cee606a0b5aec2b4fa426007544360045443611f209190612a45565b600554600454611f309043612a45565b611f3a9190612a45565b60408051948552602085019390935291830152606082015260800160405180910390a1600160076000828254611f709190612a45565b90915550505050505050505050505050505050565b611f8d612180565b6000828152600a60205260408082208151606081019283905292600391820192908390855b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f01049283019260010382029150808411611fb2575094979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600655565b602001517ffffffffff00000000000000000000000000000000000000000000000000000001690565b6002830191839082156121705791602002820160005b8382111561213257835183826101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509260200192601001602081600f010492830192600103026120d6565b801561216e5782816101000a8154906fffffffffffffffffffffffffffffffff0219169055601001602081600f01049283019260010302612132565b505b5061217c92915061219e565b5090565b60405180606001604052806003906020820280368337509192915050565b5b8082111561217c576000815560010161219f565b6000602082840312156121c557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146121f057600080fd5b919050565b60006020828403121561220757600080fd5b612210826121cc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561228d5761228d612217565b604052919050565b600067ffffffffffffffff8211156122af576122af612217565b5060051b60200190565b600082601f8301126122ca57600080fd5b813560206122df6122da83612295565b612246565b82815260059290921b840181019181810190868411156122fe57600080fd5b8286015b8481101561232057612313816121cc565b8352918301918301612302565b509695505050505050565b60006123396122da84612295565b8381529050602080820190600585901b84018681111561235857600080fd5b845b8181101561240a57803567ffffffffffffffff8082111561237b5760008081fd5b8188019150601f8a818401126123915760008081fd5b8235828111156123a3576123a3612217565b6123d2877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601612246565b92508083528b878286010111156123eb57600091508182fd5b808785018885013760009083018701525085525092820192820161235a565b505050509392505050565b600082601f83011261242657600080fd5b6122108383356020850161232b565b60008060006060848603121561244a57600080fd5b83359250602084013567ffffffffffffffff8082111561246957600080fd5b612475878388016122b9565b9350604086013591508082111561248b57600080fd5b5061249886828701612415565b9150509250925092565b600080604083850312156124b557600080fd5b6124be836121cc565b9150602083013580151581146124d357600080fd5b809150509250929050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146121f057600080fd5b60008060006060848603121561252357600080fd5b61252c846121cc565b925061253a602085016124de565b9150604084013590509250925092565b6000806040838503121561255d57600080fd5b612566836121cc565b9150612574602084016124de565b90509250929050565b6000806040838503121561259057600080fd5b612599836121cc565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061260d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6fffffffffffffffffffffffffffffffff831681526040810161221060208301846125d6565b8035600381106121f057600080fd5b6000806000806080858703121561265c57600080fd5b843567ffffffffffffffff8082111561267457600080fd5b612680888389016122b9565b9550602087013591508082111561269657600080fd5b506126a387828801612415565b935050604085013591506126b960608601612637565b905092959194509250565b60008083601f8401126126d657600080fd5b50813567ffffffffffffffff8111156126ee57600080fd5b6020830191508360208260051b850101111561270957600080fd5b9250929050565b60008060008060008060008060008060c08b8d03121561272f57600080fd5b8a3567ffffffffffffffff8082111561274757600080fd5b6127538e838f016126c4565b909c509a5060208d013591508082111561276c57600080fd5b6127788e838f016126c4565b909a50985060408d013591508082111561279157600080fd5b61279d8e838f016126c4565b909850965060608d01359150808211156127b657600080fd5b506127c38d828e016126c4565b90955093505060808b013591506127dc60a08c01612637565b90509295989b9194979a5092959850565b60608101818360005b60038110156128275781516fffffffffffffffffffffffffffffffff168352602092830192909101906001016127f6565b50505092915050565b60005b8381101561284b578181015183820152602001612833565b50506000910152565b6000815180845261286c816020860160208601612830565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604080825283519082018190526000906020906060840190828701845b828110156128ed57815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016128bb565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561295b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552612949838351612854565b9487019492509086019060010161290f565b50909998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6fffffffffffffffffffffffffffffffff8181168382160190808211156110f7576110f7612999565b60008251612a03818460208701612830565b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a3e57612a3e612999565b5060010190565b808201808211156110f9576110f9612999565b73ffffffffffffffffffffffffffffffffffffffff841681526fffffffffffffffffffffffffffffffff83166020820152606060408201526000612a9f6060830184612854565b95945050505050565b600060208284031215612aba57600080fd5b5051919050565b6fffffffffffffffffffffffffffffffff8281168282160390808211156110f7576110f7612999565b81546fffffffffffffffffffffffffffffffff8116825260408201906110f760208401608083901c60ff166125d6565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040808252810184905260008560608301825b87811015612bb15773ffffffffffffffffffffffffffffffffffffffff612b9c846121cc565b16825260209283019290910190600101612b76565b506020915083810382850152808582528282019050828660051b8301018760005b88811015612c7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18b3603018112612c3357600080fd5b8a01868101903567ffffffffffffffff811115612c4f57600080fd5b803603821315612c5e57600080fd5b612c69858284612b1a565b958801959450505090850190600101612bd2565b50909a9950505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612cc257600080fd5b83018035915067ffffffffffffffff821115612cdd57600080fd5b60200191503681900382131561270957600080fd5b818103818111156110f9576110f9612999565b600061221036848461232b56fea164736f6c6343000812000a00000000000000000000000002c845ac4bac48a6cd1e1c88a84195b7d5805b82000000000000000000000000000000000000000000013da329b633647180000000000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000ae40af135c060e10b218c617c2d74a370b09c40f000000000000000000000000dd7a92062d1939357fb17a66288cde30b3711e53000000000000000000000000be951d1b791c6878eec5d9129adeb72a28d59e68

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101b85760003560e01c80638da5cb5b116100f9578063bd9c75a511610097578063d4b8756711610071578063d4b87567146104db578063da35c664146104e4578063f131e5eb146104ed578063fe9fbb80146104f657600080fd5b8063bd9c75a514610495578063c52ea3db146104a8578063d1b67627146104c857600080fd5b8063aa35fb51116100d3578063aa35fb5114610429578063af7a060c1461043c578063b6a5d7de1461045f578063b91816111461047257600080fd5b80638da5cb5b146103775780639f2524ee146103bc578063a4c950771461042057600080fd5b806327c97fa5116101665780634eb665af116101405780634eb665af146103075780635a4a60d81461031a578063771a5323146103515780637d5709eb1461036457600080fd5b806327c97fa5146102ce578063341a7b42146102e15780634392b99c146102f457600080fd5b806313af40351161019757806313af40351461029f57806315126a3d146102b25780631c39c96c146102c557600080fd5b806214d11d146101bd578063013cf08b146101d25780630455444314610288575b600080fd5b6101d06101cb3660046121b3565b61052f565b005b61023c6101e03660046121b3565b600a60205260009081526040902080546001820154600283015460059093015491926fffffffffffffffffffffffffffffffff808316937001000000000000000000000000000000009384900482169383831693048216911686565b604080519687526fffffffffffffffffffffffffffffffff9586166020880152938516938601939093529083166060850152821660808401521660a082015260c0015b60405180910390f35b61029160045481565b60405190815260200161027f565b6101d06102ad3660046121f5565b6105ba565b6101d06102c0366004612435565b610682565b61029160035481565b6101d06102dc3660046121f5565b610d04565b6101d06102ef3660046124a2565b610dd1565b6101d061030236600461250e565b610f2f565b6101d06103153660046121b3565b611006565b6103417f000000000000000000000000000000000000000000000000000000000000000181565b604051901515815260200161027f565b61029161035f36600461254a565b61108c565b6101d06103723660046121b3565b6110ff565b6000546103979073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161027f565b6104126103ca36600461257d565b600b6020908152600092835260408084209091529082529020546fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000900460ff1682565b60405161027f929190612611565b61029160055481565b610291610437366004612646565b611185565b61034161044a3660046121f5565b60096020526000908152604090205460ff1681565b6101d061046d3660046121f5565b611853565b6103416104803660046121f5565b60016020526000908152604090205460ff1681565b6101d06104a3366004612710565b61192d565b6104bb6104b63660046121b3565b611f85565b60405161027f91906127ed565b6101d06104d63660046121b3565b612011565b61029160065481565b61029160075481565b610291611bee81565b6103416105043660046121f5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064015b60405180910390fd5b600555565b60005473ffffffffffffffffffffffffffffffffffffffff16331461063b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025460ff16156106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5265656e7472616e63790000000000000000000000000000000000000000000060448201526064016105ac565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556000848152600a6020526040902001546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104164310156107bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f7420756e6c6f636b6564000000000000000000000000000000000000000060448201526064016105ac565b6000838152600a602052604081206001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16900361085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50726576696f75736c792065786563757465640000000000000000000000000060448201526064016105ac565b6000838152600a60205260409020600501546fffffffffffffffffffffffffffffffff1643106108e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f70617374206c6173742063616c6c2074696d657374616d70000000000000000060448201526064016105ac565b6000838152600a602090815260409182902054915161090c91859185910161289e565b6040516020818303038152906040528051906020012014610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f68617368206d69736d617463680000000000000000000000000000000000000060448201526064016105ac565b6000838152600a60205260408082208151606081019283905291600391820191908285855b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f010492830192600103820291508084116109ae575050506000888152600a60209081526040808320600201549087015191870151875197985092967001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169550909350610a5d92506129c8565b610a6791906129c8565b6fffffffffffffffffffffffffffffffff1610159050600082600160200201516fffffffffffffffffffffffffffffffff1683600060200201516fffffffffffffffffffffffffffffffff16119050818015610ac05750805b610b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f43616e6e6f74206578656375746500000000000000000000000000000000000060448201526064016105ac565b60005b8551811015610c4b576000868281518110610b4657610b4661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16868381518110610b7657610b7661296a565b6020026020010151604051610b8b91906129f1565b6000604051808303816000865af19150503d8060008114610bc8576040519150601f19603f3d011682016040523d82523d6000602084013e610bcd565b606091505b5050905080610c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f43616c6c206661696c656400000000000000000000000000000000000000000060448201526064016105ac565b5080610c4381612a0d565b915050610b29565b506040518681527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9060200160405180910390a150505060009283525050600a6020526040812081815560018101829055600280820183905560038201839055600482019290925560050180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b7f0000000000000000000000000000000000000000000000000000000000000001610ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577207661756c7473206e6f7420616c6c6f7765640000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526008602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000090941683529290522055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600455565b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260408083207fffffffff00000000000000000000000000000000000000000000000000000000851684529091528120548082036110f05750506003546110f9565b90506110f9565b505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600355565b6000828152600a60205260408120600101546fffffffffffffffffffffffffffffffff168103611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f70726f706f73616c20646f6573206e6f7420657869737400000000000000000060448201526064016105ac565b6000838152600a60205260409020600201546fffffffffffffffffffffffffffffffff1643111561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f457870697265640000000000000000000000000000000000000000000000000060448201526064016105ac565b6000805b86518110156115505760006112b8826001612a45565b90505b875181101561139d578781815181106112d6576112d661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168883815181106113065761130661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6475706c6963617465207661756c74000000000000000000000000000000000060448201526064016105ac565b8061139581612a0d565b9150506112bb565b50600960008883815181106113b4576113b461296a565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1661144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f756e7665726966696564207661756c740000000000000000000000000000000060448201526064016105ac565b8681815181106114605761146061296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663e91f323533600a600089815260200190815260200160002060010160009054906101000a90046fffffffffffffffffffffffffffffffff168985815181106114c9576114c961296a565b60200260200101516040518463ffffffff1660e01b81526004016114ef93929190612a58565b6020604051808303816000875af115801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190612aa8565b61153c90836129c8565b91508061154881612a0d565b9150506112a2565b50336000908152600b602090815260408083208784529091529020546fffffffffffffffffffffffffffffffff161561166757336000908152600b6020908152604080832087845280835281842054600a845291909320929091526fffffffffffffffffffffffffffffffff81169160030190700100000000000000000000000000000000900460ff1660028111156115eb576115eb6125a7565b600381106115fb576115fb61296a565b600291828204019190066010028282829054906101000a90046fffffffffffffffffffffffffffffffff166116309190612ac1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b6040518060400160405280826fffffffffffffffffffffffffffffffff16815260200184600281111561169c5761169c6125a7565b9052336000908152600b602090815260408083208884528252909120825181546fffffffffffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffff0000000000000000000000000000000082168117835592840151919283917fffffffffffffffffffffffffffffff00000000000000000000000000000000001617700100000000000000000000000000000000836002811115611746576117466125a7565b021790555050506000848152600a602052604090208190600301846002811115611772576117726125a7565b600381106117825761178261296a565b600291828204019190066010028282829054906101000a90046fffffffffffffffffffffffffffffffff166117b791906129c8565b82546fffffffffffffffffffffffffffffffff9182166101009390930a928302919092021990911617905550336000818152600b602090815260408083208884529091529081902090518692917f79597d31752b5a254be8f219c055ebfefe925e085d99c7b04b0883298b356951916118309190612aea565b60405180910390a36fffffffffffffffffffffffffffffffff1695945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146118d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b61192a8173ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b50565b848314611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6172726179206c656e677468206d69736d61746368000000000000000000000060448201526064016105ac565b6000859003611a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f656d7074792070726f706f73616c00000000000000000000000000000000000060448201526064016105ac565b600086868686604051602001611a1a9493929190612b63565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506000805b87811015611b7b576000611ac1888884818110611a7557611a7561296a565b9050602002810190611a879190612c8d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061209792505050565b90506000600860008c8c86818110611adb57611adb61296a565b9050602002016020810190611af091906121f5565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081207fffffffff000000000000000000000000000000000000000000000000000000008616825290925290205490508015611b545780611b58565b6003545b905083811115611b66578093505b50508080611b7390612a0d565b915050611a56565b50600554600454611b8c9043612a45565b611b969190612a45565b8411611bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f65787069726573206265666f726520766f74696e6720656e647300000000000060448201526064016105ac565b6040518060e00160405280838152602001600143611c1c9190612cf2565b6fffffffffffffffffffffffffffffffff16815260200160045443611c419190612a45565b6fffffffffffffffffffffffffffffffff16815260200160055460045443611c699190612a45565b611c739190612a45565b6fffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff168152602001600a60006007548152602001908152602001600020600301600380602002604051908101604052809291908260038015611d35576020028201916000905b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f01049283019260010382029150808411611ce05790505b50505091835250506fffffffffffffffffffffffffffffffff8681166020928301526007546000908152600a835260409081902084518155928401519084015190821670010000000000000000000000000000000091831682021760018401556060840151608085015190831692160217600282015560a0820151611dc090600380840191906120c0565b5060c08201518160050160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506000611e518d8d80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e4892508e91508f9050612d05565b60075487611185565b90506000600654831115611e6757600654611e69565b825b3360009081526001602052604090205490915060ff16611eed5780821015611eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e73756666696369656e7420766f74696e6720706f7765720000000000000060448201526064016105ac565b7fafbd5d299242bf861d198949ad835672e2e35b2e1838cee606a0b5aec2b4fa426007544360045443611f209190612a45565b600554600454611f309043612a45565b611f3a9190612a45565b60408051948552602085019390935291830152606082015260800160405180910390a1600160076000828254611f709190612a45565b90915550505050505050505050505050505050565b611f8d612180565b6000828152600a60205260408082208151606081019283905292600391820192908390855b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f01049283019260010382029150808411611fb2575094979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600655565b602001517ffffffffff00000000000000000000000000000000000000000000000000000001690565b6002830191839082156121705791602002820160005b8382111561213257835183826101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509260200192601001602081600f010492830192600103026120d6565b801561216e5782816101000a8154906fffffffffffffffffffffffffffffffff0219169055601001602081600f01049283019260010302612132565b505b5061217c92915061219e565b5090565b60405180606001604052806003906020820280368337509192915050565b5b8082111561217c576000815560010161219f565b6000602082840312156121c557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146121f057600080fd5b919050565b60006020828403121561220757600080fd5b612210826121cc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561228d5761228d612217565b604052919050565b600067ffffffffffffffff8211156122af576122af612217565b5060051b60200190565b600082601f8301126122ca57600080fd5b813560206122df6122da83612295565b612246565b82815260059290921b840181019181810190868411156122fe57600080fd5b8286015b8481101561232057612313816121cc565b8352918301918301612302565b509695505050505050565b60006123396122da84612295565b8381529050602080820190600585901b84018681111561235857600080fd5b845b8181101561240a57803567ffffffffffffffff8082111561237b5760008081fd5b8188019150601f8a818401126123915760008081fd5b8235828111156123a3576123a3612217565b6123d2877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601612246565b92508083528b878286010111156123eb57600091508182fd5b808785018885013760009083018701525085525092820192820161235a565b505050509392505050565b600082601f83011261242657600080fd5b6122108383356020850161232b565b60008060006060848603121561244a57600080fd5b83359250602084013567ffffffffffffffff8082111561246957600080fd5b612475878388016122b9565b9350604086013591508082111561248b57600080fd5b5061249886828701612415565b9150509250925092565b600080604083850312156124b557600080fd5b6124be836121cc565b9150602083013580151581146124d357600080fd5b809150509250929050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146121f057600080fd5b60008060006060848603121561252357600080fd5b61252c846121cc565b925061253a602085016124de565b9150604084013590509250925092565b6000806040838503121561255d57600080fd5b612566836121cc565b9150612574602084016124de565b90509250929050565b6000806040838503121561259057600080fd5b612599836121cc565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061260d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6fffffffffffffffffffffffffffffffff831681526040810161221060208301846125d6565b8035600381106121f057600080fd5b6000806000806080858703121561265c57600080fd5b843567ffffffffffffffff8082111561267457600080fd5b612680888389016122b9565b9550602087013591508082111561269657600080fd5b506126a387828801612415565b935050604085013591506126b960608601612637565b905092959194509250565b60008083601f8401126126d657600080fd5b50813567ffffffffffffffff8111156126ee57600080fd5b6020830191508360208260051b850101111561270957600080fd5b9250929050565b60008060008060008060008060008060c08b8d03121561272f57600080fd5b8a3567ffffffffffffffff8082111561274757600080fd5b6127538e838f016126c4565b909c509a5060208d013591508082111561276c57600080fd5b6127788e838f016126c4565b909a50985060408d013591508082111561279157600080fd5b61279d8e838f016126c4565b909850965060608d01359150808211156127b657600080fd5b506127c38d828e016126c4565b90955093505060808b013591506127dc60a08c01612637565b90509295989b9194979a5092959850565b60608101818360005b60038110156128275781516fffffffffffffffffffffffffffffffff168352602092830192909101906001016127f6565b50505092915050565b60005b8381101561284b578181015183820152602001612833565b50506000910152565b6000815180845261286c816020860160208601612830565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604080825283519082018190526000906020906060840190828701845b828110156128ed57815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016128bb565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561295b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552612949838351612854565b9487019492509086019060010161290f565b50909998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6fffffffffffffffffffffffffffffffff8181168382160190808211156110f7576110f7612999565b60008251612a03818460208701612830565b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a3e57612a3e612999565b5060010190565b808201808211156110f9576110f9612999565b73ffffffffffffffffffffffffffffffffffffffff841681526fffffffffffffffffffffffffffffffff83166020820152606060408201526000612a9f6060830184612854565b95945050505050565b600060208284031215612aba57600080fd5b5051919050565b6fffffffffffffffffffffffffffffffff8281168282160390808211156110f7576110f7612999565b81546fffffffffffffffffffffffffffffffff8116825260408201906110f760208401608083901c60ff166125d6565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040808252810184905260008560608301825b87811015612bb15773ffffffffffffffffffffffffffffffffffffffff612b9c846121cc565b16825260209283019290910190600101612b76565b506020915083810382850152808582528282019050828660051b8301018760005b88811015612c7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18b3603018112612c3357600080fd5b8a01868101903567ffffffffffffffff811115612c4f57600080fd5b803603821315612c5e57600080fd5b612c69858284612b1a565b958801959450505090850190600101612bd2565b50909a9950505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612cc257600080fd5b83018035915067ffffffffffffffff821115612cdd57600080fd5b60200191503681900382131561270957600080fd5b818103818111156110f9576110f9612999565b600061221036848461232b56fea164736f6c6343000812000a

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000002c845ac4bac48a6cd1e1c88a84195b7d5805b82000000000000000000000000000000000000000000013da329b633647180000000000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000ae40af135c060e10b218c617c2d74a370b09c40f000000000000000000000000dd7a92062d1939357fb17a66288cde30b3711e53000000000000000000000000be951d1b791c6878eec5d9129adeb72a28d59e68

-----Decoded View---------------
Arg [0] : _timelock (address): 0x02C845ac4baC48A6CD1e1c88a84195B7d5805B82
Arg [1] : _baseQuorum (uint256): 1500000000000000000000000
Arg [2] : _minProposalPower (uint256): 20000000000000000000000
Arg [3] : _gsc (address): 0x0000000000000000000000000000000000000000
Arg [4] : votingVaults (address[]): 0xae40Af135C060E10b218C617c2d74A370B09C40F,0xDD7a92062d1939357FB17A66288cdE30b3711E53,0xBe951D1B791C6878eec5d9129ADEB72A28D59E68
Arg [5] : _allowNewVotingVaults (bool): True

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000002c845ac4bac48a6cd1e1c88a84195b7d5805b82
Arg [1] : 000000000000000000000000000000000000000000013da329b6336471800000
Arg [2] : 00000000000000000000000000000000000000000000043c33c1937564800000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 000000000000000000000000ae40af135c060e10b218c617c2d74a370b09c40f
Arg [8] : 000000000000000000000000dd7a92062d1939357fb17a66288cde30b3711e53
Arg [9] : 000000000000000000000000be951d1b791c6878eec5d9129adeb72a28d59e68


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.