Address Details
contract
proxy

0xe15826ec86F054EE0847532F8356f55fF0A1a3D5

Creator
0x59a6ab–4883d9 at 0xc33150–3525ff
Implementation
0x0000000000000000000000000000000000000000
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
16631949
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
GovernorBravoDelegate




Optimization enabled
true
Compiler version
v0.5.16+commit.9c3226ce




Optimization runs
99999
EVM Version
istanbul




Verified at
2021-12-28T18:06:35.513752Z

contracts/Governance/GovernorBravoDelegateG1.sol

pragma solidity ^0.5.16;
pragma experimental ABIEncoderV2;

import "./GovernorBravoInterfaces.sol";

contract GovernorBravoDelegate is GovernorBravoDelegateStorageV1, GovernorBravoEvents {

    /// @notice The name of this contract
    string public constant name = "Mobius Governance";

    /// @notice The minimum setable proposal threshold
    uint public constant MIN_PROPOSAL_THRESHOLD = 500e18; // 500 veMOBI

    /// @notice The maximum setable proposal threshold
    uint public constant MAX_PROPOSAL_THRESHOLD =  10000e18; //10,000 veMOBI

    /// @notice The minimum setable voting period
    uint public constant MIN_VOTING_PERIOD =  17280; // 17280 blocks, about 1 day

    /// @notice The max setable voting period
    uint public constant MAX_VOTING_PERIOD = 120960; // 120960 blocks, about 1 week

    /// @notice The min setable voting delay
    uint public constant MIN_VOTING_DELAY = 1;

    /// @notice The max setable voting delay
    uint public constant MAX_VOTING_DELAY = 69120; // 69120 blocks, about 4 days

    /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed
    uint public constant quorumVotes =  4000000e18; // 4,000,000 veMOBI

    /// @notice The maximum number of actions that can be included in a proposal
    uint public constant proposalMaxOperations = 10; // 10 actions

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the ballot struct used by the contract
    bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,uint8 support)");

    /**
      * @notice Used to initialize the contract during delegator contructor
      * @param timelock_ The address of the Timelock
      * @param vemobi_ The address of the veMOBI token
      * @param votingPeriod_ The initial voting period
      * @param votingDelay_ The initial voting delay
      * @param proposalThreshold_ The initial proposal threshold
      */
    function initialize(address timelock_, address vemobi_, uint votingPeriod_, uint votingDelay_, uint proposalThreshold_) public {
        require(address(timelock) == address(0), "GovernorBravo::initialize: can only initialize once");
        require(msg.sender == admin, "GovernorBravo::initialize: admin only");
        require(timelock_ != address(0), "GovernorBravo::initialize: invalid timelock address");
        require(vemobi_ != address(0), "GovernorBravo::initialize: invalid vemobi address");
        require(votingPeriod_ >= MIN_VOTING_PERIOD && votingPeriod_ <= MAX_VOTING_PERIOD, "GovernorBravo::initialize: invalid voting period");
        require(votingDelay_ >= MIN_VOTING_DELAY && votingDelay_ <= MAX_VOTING_DELAY, "GovernorBravo::initialize: invalid voting delay");
        require(proposalThreshold_ >= MIN_PROPOSAL_THRESHOLD && proposalThreshold_ <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::initialize: invalid proposal threshold");

        timelock = TimelockInterface(timelock_);
        vemobi = veMOBIInterface(vemobi_);
        votingPeriod = votingPeriod_;
        votingDelay = votingDelay_;
        proposalThreshold = proposalThreshold_;
    }

    /**
      * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold
      * @param targets Target addresses for proposal calls
      * @param values Eth values for proposal calls
      * @param signatures Function signatures for proposal calls
      * @param calldatas Calldatas for proposal calls
      * @param description String description of the proposal
      * @return Proposal id of new proposal
      */
    function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) {
        // Reject proposals before initiating as Governor
        require(vemobi.balanceOfAt(msg.sender, sub256(block.number, 1)) > proposalThreshold, "GovernorBravo::propose: proposer votes below proposal threshold");
        require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorBravo::propose: proposal function information arity mismatch");
        require(targets.length != 0, "GovernorBravo::propose: must provide actions");
        require(targets.length <= proposalMaxOperations, "GovernorBravo::propose: too many actions");

        uint latestProposalId = latestProposalIds[msg.sender];
        if (latestProposalId != 0) {
          ProposalState proposersLatestProposalState = state(latestProposalId);
          require(proposersLatestProposalState != ProposalState.Active, "GovernorBravo::propose: one live proposal per proposer, found an already active proposal");
          require(proposersLatestProposalState != ProposalState.Pending, "GovernorBravo::propose: one live proposal per proposer, found an already pending proposal");
        }

        uint startBlock = add256(block.number, votingDelay);
        uint endBlock = add256(startBlock, votingPeriod);

        proposalCount++;
        Proposal memory newProposal = Proposal({
            id: proposalCount,
            proposer: msg.sender,
            eta: 0,
            targets: targets,
            values: values,
            signatures: signatures,
            calldatas: calldatas,
            startBlock: startBlock,
            endBlock: endBlock,
            forVotes: 0,
            againstVotes: 0,
            abstainVotes: 0,
            canceled: false,
            executed: false
        });

        proposals[newProposal.id] = newProposal;
        latestProposalIds[newProposal.proposer] = newProposal.id;

        emit ProposalCreated(newProposal.id, msg.sender, targets, values, signatures, calldatas, startBlock, endBlock, description);
        return newProposal.id;
    }

    /**
      * @notice Queues a proposal of state succeeded
      * @param proposalId The id of the proposal to queue
      */
    function queue(uint proposalId) external {
        require(state(proposalId) == ProposalState.Succeeded, "GovernorBravo::queue: proposal can only be queued if it is succeeded");
        Proposal storage proposal = proposals[proposalId];
        uint eta = add256(block.timestamp, timelock.delay());
        for (uint i = 0; i < proposal.targets.length; i++) {
            queueOrRevertInternal(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta);
        }
        proposal.eta = eta;
        emit ProposalQueued(proposalId, eta);
    }

    function queueOrRevertInternal(address target, uint value, string memory signature, bytes memory data, uint eta) internal {
        require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta");
        timelock.queueTransaction(target, value, signature, data, eta);
    }

    /**
      * @notice Executes a queued proposal if eta has passed
      * @param proposalId The id of the proposal to execute
      */
    function execute(uint proposalId) external payable {
        require(state(proposalId) == ProposalState.Queued, "GovernorBravo::execute: proposal can only be executed if it is queued");
        Proposal storage proposal = proposals[proposalId];
        proposal.executed = true;
        for (uint i = 0; i < proposal.targets.length; i++) {
            timelock.executeTransaction.value(proposal.values[i])(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }
        emit ProposalExecuted(proposalId);
    }

    /**
      * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold
      * @param proposalId The id of the proposal to cancel
      */
    function cancel(uint proposalId) external {
        require(state(proposalId) != ProposalState.Executed, "GovernorBravo::cancel: cannot cancel executed proposal");

        Proposal storage proposal = proposals[proposalId];
        require(msg.sender == proposal.proposer || vemobi.balanceOfAt(proposal.proposer, sub256(block.number, 1)) < proposalThreshold, "GovernorBravo::cancel: proposer above threshold");

        proposal.canceled = true;
        for (uint i = 0; i < proposal.targets.length; i++) {
            timelock.cancelTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }

        emit ProposalCanceled(proposalId);
    }

    /**
      * @notice Gets actions of a proposal
      * @param proposalId the id of the proposal
      * @return Targets, values, signatures, and calldatas of the proposal actions
      */
    function getActions(uint proposalId) external view returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas) {
        Proposal storage p = proposals[proposalId];
        return (p.targets, p.values, p.signatures, p.calldatas);
    }

    /**
      * @notice Gets the receipt for a voter on a given proposal
      * @param proposalId the id of proposal
      * @param voter The address of the voter
      * @return The voting receipt
      */
    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {
        return proposals[proposalId].receipts[voter];
    }

    /**
      * @notice Gets the state of a proposal
      * @param proposalId The id of the proposal
      * @return Proposal state
      */
    function state(uint proposalId) public view returns (ProposalState) {
        require(proposalCount >= proposalId && proposalId > initialProposalId, "GovernorBravo::state: invalid proposal id");
        Proposal storage proposal = proposals[proposalId];
        if (proposal.canceled) {
            return ProposalState.Canceled;
        } else if (block.number <= proposal.startBlock) {
            return ProposalState.Pending;
        } else if (block.number <= proposal.endBlock) {
            return ProposalState.Active;
        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {
            return ProposalState.Defeated;
        } else if (proposal.eta == 0) {
            return ProposalState.Succeeded;
        } else if (proposal.executed) {
            return ProposalState.Executed;
        } else if (block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD())) {
            return ProposalState.Expired;
        } else {
            return ProposalState.Queued;
        }
    }

    /**
      * @notice Cast a vote for a proposal
      * @param proposalId The id of the proposal to vote on
      * @param support The support value for the vote. 0=against, 1=for, 2=abstain
      */
    function castVote(uint proposalId, uint8 support) external {
        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), "");
    }

    /**
      * @notice Cast a vote for a proposal with a reason
      * @param proposalId The id of the proposal to vote on
      * @param support The support value for the vote. 0=against, 1=for, 2=abstain
      * @param reason The reason given for the vote by the voter
      */
    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {
        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);
    }


    /**
      * @notice Internal function that caries out voting logic
      * @param voter The voter that is casting their vote
      * @param proposalId The id of the proposal to vote on
      * @param support The support value for the vote. 0=against, 1=for, 2=abstain
      * @return The number of votes cast
      */
    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint256) {
        require(state(proposalId) == ProposalState.Active, "GovernorBravo::castVoteInternal: voting is closed");
        require(support <= 2, "GovernorBravo::castVoteInternal: invalid vote type");
        Proposal storage proposal = proposals[proposalId];
        Receipt storage receipt = proposal.receipts[voter];
        require(receipt.hasVoted == false, "GovernorBravo::castVoteInternal: voter already voted");
        uint256 votes = vemobi.balanceOfAt(voter, proposal.startBlock);

        if (support == 0) {
            proposal.againstVotes = add256(proposal.againstVotes, votes);
        } else if (support == 1) {
            proposal.forVotes = add256(proposal.forVotes, votes);
        } else if (support == 2) {
            proposal.abstainVotes = add256(proposal.abstainVotes, votes);
        }

        receipt.hasVoted = true;
        receipt.support = support;
        receipt.votes = votes;

        return votes;
    }

    /**
      * @notice Admin function for setting the voting delay
      * @param newVotingDelay new voting delay, in blocks
      */
    function _setVotingDelay(uint newVotingDelay) external {
        require(msg.sender == admin, "GovernorBravo::_setVotingDelay: admin only");
        require(newVotingDelay >= MIN_VOTING_DELAY && newVotingDelay <= MAX_VOTING_DELAY, "GovernorBravo::_setVotingDelay: invalid voting delay");
        uint oldVotingDelay = votingDelay;
        votingDelay = newVotingDelay;

        emit VotingDelaySet(oldVotingDelay,votingDelay);
    }

    /**
      * @notice Admin function for setting the voting period
      * @param newVotingPeriod new voting period, in blocks
      */
    function _setVotingPeriod(uint newVotingPeriod) external {
        require(msg.sender == admin, "GovernorBravo::_setVotingPeriod: admin only");
        require(newVotingPeriod >= MIN_VOTING_PERIOD && newVotingPeriod <= MAX_VOTING_PERIOD, "GovernorBravo::_setVotingPeriod: invalid voting period");
        uint oldVotingPeriod = votingPeriod;
        votingPeriod = newVotingPeriod;

        emit VotingPeriodSet(oldVotingPeriod, votingPeriod);
    }

    /**
      * @notice Admin function for setting the proposal threshold
      * @dev newProposalThreshold must be greater than the hardcoded min
      * @param newProposalThreshold new proposal threshold
      */
    function _setProposalThreshold(uint newProposalThreshold) external {
        require(msg.sender == admin, "GovernorBravo::_setProposalThreshold: admin only");
        require(newProposalThreshold >= MIN_PROPOSAL_THRESHOLD && newProposalThreshold <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::_setProposalThreshold: invalid proposal threshold");
        uint oldProposalThreshold = proposalThreshold;
        proposalThreshold = newProposalThreshold;

        emit ProposalThresholdSet(oldProposalThreshold, proposalThreshold);
    }

    /**
      * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @param newPendingAdmin New pending admin.
      */
    function _setPendingAdmin(address newPendingAdmin) external {
        // Check caller = admin
        require(msg.sender == admin, "GovernorBravo:_setPendingAdmin: admin only");

        // Save current value, if any, for inclusion in log
        address oldPendingAdmin = pendingAdmin;

        // Store pendingAdmin with value newPendingAdmin
        pendingAdmin = newPendingAdmin;

        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)
        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);
    }

    /**
      * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin
      * @dev Admin function for pending admin to accept role and update admin
      */
    function _acceptAdmin() external {
        // Check caller is pendingAdmin and pendingAdmin ≠ address(0)
        require(msg.sender == pendingAdmin && msg.sender != address(0), "GovernorBravo:_acceptAdmin: pending admin only");

        // Save current values for inclusion in log
        address oldAdmin = admin;
        address oldPendingAdmin = pendingAdmin;

        // Store admin with value pendingAdmin
        admin = pendingAdmin;

        // Clear the pending value
        pendingAdmin = address(0);

        emit NewAdmin(oldAdmin, admin);
        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);
    }

    function add256(uint256 a, uint256 b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "addition overflow");
        return c;
    }

    function sub256(uint256 a, uint256 b) internal pure returns (uint) {
        require(b <= a, "subtraction underflow");
        return a - b;
    }

    function getChainIdInternal() internal pure returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}
        

Contract ABI

[{"type":"event","name":"NewAdmin","inputs":[{"type":"address","name":"oldAdmin","internalType":"address","indexed":false},{"type":"address","name":"newAdmin","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"NewImplementation","inputs":[{"type":"address","name":"oldImplementation","internalType":"address","indexed":false},{"type":"address","name":"newImplementation","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"NewPendingAdmin","inputs":[{"type":"address","name":"oldPendingAdmin","internalType":"address","indexed":false},{"type":"address","name":"newPendingAdmin","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"ProposalCanceled","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"ProposalCreated","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":false},{"type":"address","name":"proposer","internalType":"address","indexed":false},{"type":"address[]","name":"targets","internalType":"address[]","indexed":false},{"type":"uint256[]","name":"values","internalType":"uint256[]","indexed":false},{"type":"string[]","name":"signatures","internalType":"string[]","indexed":false},{"type":"bytes[]","name":"calldatas","internalType":"bytes[]","indexed":false},{"type":"uint256","name":"startBlock","internalType":"uint256","indexed":false},{"type":"uint256","name":"endBlock","internalType":"uint256","indexed":false},{"type":"string","name":"description","internalType":"string","indexed":false}],"anonymous":false},{"type":"event","name":"ProposalExecuted","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"ProposalQueued","inputs":[{"type":"uint256","name":"id","internalType":"uint256","indexed":false},{"type":"uint256","name":"eta","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"ProposalThresholdSet","inputs":[{"type":"uint256","name":"oldProposalThreshold","internalType":"uint256","indexed":false},{"type":"uint256","name":"newProposalThreshold","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"VoteCast","inputs":[{"type":"address","name":"voter","internalType":"address","indexed":true},{"type":"uint256","name":"proposalId","internalType":"uint256","indexed":false},{"type":"uint8","name":"support","internalType":"uint8","indexed":false},{"type":"uint256","name":"votes","internalType":"uint256","indexed":false},{"type":"string","name":"reason","internalType":"string","indexed":false}],"anonymous":false},{"type":"event","name":"VotingDelaySet","inputs":[{"type":"uint256","name":"oldVotingDelay","internalType":"uint256","indexed":false},{"type":"uint256","name":"newVotingDelay","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"VotingPeriodSet","inputs":[{"type":"uint256","name":"oldVotingPeriod","internalType":"uint256","indexed":false},{"type":"uint256","name":"newVotingPeriod","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"WhitelistAccountExpirationSet","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false},{"type":"uint256","name":"expiration","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"WhitelistGuardianSet","inputs":[{"type":"address","name":"oldGuardian","internalType":"address","indexed":false},{"type":"address","name":"newGuardian","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"BALLOT_TYPEHASH","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_TYPEHASH","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MAX_PROPOSAL_THRESHOLD","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MAX_VOTING_DELAY","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MAX_VOTING_PERIOD","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MIN_PROPOSAL_THRESHOLD","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MIN_VOTING_DELAY","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MIN_VOTING_PERIOD","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"_acceptAdmin","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"_setPendingAdmin","inputs":[{"type":"address","name":"newPendingAdmin","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"_setProposalThreshold","inputs":[{"type":"uint256","name":"newProposalThreshold","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"_setVotingDelay","inputs":[{"type":"uint256","name":"newVotingDelay","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"_setVotingPeriod","inputs":[{"type":"uint256","name":"newVotingPeriod","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"admin","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"cancel","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"castVote","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"},{"type":"uint8","name":"support","internalType":"uint8"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"castVoteWithReason","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"},{"type":"uint8","name":"support","internalType":"uint8"},{"type":"string","name":"reason","internalType":"string"}],"constant":false},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"execute","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address[]","name":"targets","internalType":"address[]"},{"type":"uint256[]","name":"values","internalType":"uint256[]"},{"type":"string[]","name":"signatures","internalType":"string[]"},{"type":"bytes[]","name":"calldatas","internalType":"bytes[]"}],"name":"getActions","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"tuple","name":"","internalType":"struct GovernorBravoDelegateStorageV1.Receipt","components":[{"type":"bool","name":"hasVoted","internalType":"bool"},{"type":"uint8","name":"support","internalType":"uint8"},{"type":"uint256","name":"votes","internalType":"uint256"}]}],"name":"getReceipt","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"},{"type":"address","name":"voter","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"implementation","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"initialProposalId","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"initialize","inputs":[{"type":"address","name":"timelock_","internalType":"address"},{"type":"address","name":"vemobi_","internalType":"address"},{"type":"uint256","name":"votingPeriod_","internalType":"uint256"},{"type":"uint256","name":"votingDelay_","internalType":"uint256"},{"type":"uint256","name":"proposalThreshold_","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"latestProposalIds","inputs":[{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pendingAdmin","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"proposalCount","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"proposalMaxOperations","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"proposalThreshold","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"id","internalType":"uint256"},{"type":"address","name":"proposer","internalType":"address"},{"type":"uint256","name":"eta","internalType":"uint256"},{"type":"uint256","name":"startBlock","internalType":"uint256"},{"type":"uint256","name":"endBlock","internalType":"uint256"},{"type":"uint256","name":"forVotes","internalType":"uint256"},{"type":"uint256","name":"againstVotes","internalType":"uint256"},{"type":"uint256","name":"abstainVotes","internalType":"uint256"},{"type":"bool","name":"canceled","internalType":"bool"},{"type":"bool","name":"executed","internalType":"bool"}],"name":"proposals","inputs":[{"type":"uint256","name":"","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"propose","inputs":[{"type":"address[]","name":"targets","internalType":"address[]"},{"type":"uint256[]","name":"values","internalType":"uint256[]"},{"type":"string[]","name":"signatures","internalType":"string[]"},{"type":"bytes[]","name":"calldatas","internalType":"bytes[]"},{"type":"string","name":"description","internalType":"string"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"queue","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"quorumVotes","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":"","internalType":"enum GovernorBravoDelegateStorageV1.ProposalState"}],"name":"state","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"contract TimelockInterface"}],"name":"timelock","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"contract veMOBIInterface"}],"name":"vemobi","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"votingDelay","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"votingPeriod","inputs":[],"constant":true}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50614803806100206000396000f3fe6080604052600436106102855760003560e01c80637b3c71d311610153578063da35c664116100cb578063e48083fe1161007f578063f851a44011610064578063f851a4401461068d578063fc4eee42146106a2578063fe0d94c1146106b757610285565b8063e48083fe14610663578063e9c714f21461067857610285565b8063ddf0b009116100b0578063ddf0b00914610601578063deaaa7cc14610621578063e23a9a521461063657610285565b8063da35c664146105cc578063da95691a146105e157610285565b8063b112626311610122578063b71d1a0c11610107578063b71d1a0c14610577578063d13f90b414610597578063d33219b4146105b757610285565b8063b11262631461054d578063b58131b01461056257610285565b80637b3c71d3146104e15780637bdbe4d014610501578063a64e024a14610516578063a6a0b3de1461052b57610285565b806324bc1a64116102015780633e4f49e6116101b5578063567813881161019a57806356781388146104975780635c60da1b146104b7578063791f5d23146104cc57610285565b80633e4f49e61461044a57806340e58ee51461047757610285565b806326782247116101e657806326782247146103e3578063328dd982146104055780633932abb11461043557610285565b806324bc1a64146103b957806325fd935a146103ce57610285565b806317977c61116102585780631dfb1b5a1161023d5780631dfb1b5a1461036f57806320606b701461038f578063215809ca146103a457610285565b806317977c611461032f57806317ba1b8b1461034f57610285565b8063013cf08b1461028a57806302a251a3146102c957806306fdde03146102eb5780630ea2d98c1461030d575b600080fd5b34801561029657600080fd5b506102aa6102a5366004612f48565b6106ca565b6040516102c09a99989796959493929190614508565b60405180910390f35b3480156102d557600080fd5b506102de61073a565b6040516102c09190614217565b3480156102f757600080fd5b50610300610740565b6040516102c09190614241565b34801561031957600080fd5b5061032d610328366004612f48565b610779565b005b34801561033b57600080fd5b506102de61034a366004612d5d565b610864565b34801561035b57600080fd5b5061032d61036a366004612f48565b610876565b34801561037b57600080fd5b5061032d61038a366004612f48565b61095a565b34801561039b57600080fd5b506102de610a2f565b3480156103b057600080fd5b506102de610a46565b3480156103c557600080fd5b506102de610a4c565b3480156103da57600080fd5b506102de610a5b565b3480156103ef57600080fd5b506103f8610a69565b6040516102c091906140dd565b34801561041157600080fd5b50610425610420366004612f48565b610a85565b6040516102c094939291906141ca565b34801561044157600080fd5b506102de610d5d565b34801561045657600080fd5b5061046a610465366004612f48565b610d63565b6040516102c09190614233565b34801561048357600080fd5b5061032d610492366004612f48565b610f2a565b3480156104a357600080fd5b5061032d6104b2366004612fa0565b6111fb565b3480156104c357600080fd5b506103f8611245565b3480156104d857600080fd5b506102de611261565b3480156104ed57600080fd5b5061032d6104fc366004612fd0565b61126e565b34801561050d57600080fd5b506102de6112be565b34801561052257600080fd5b506102de6112c3565b34801561053757600080fd5b506105406112ca565b6040516102c09190614225565b34801561055957600080fd5b506102de6112e6565b34801561056e57600080fd5b506102de6112ed565b34801561058357600080fd5b5061032d610592366004612d5d565b6112f3565b3480156105a357600080fd5b5061032d6105b2366004612d83565b6113bc565b3480156105c357600080fd5b50610540611648565b3480156105d857600080fd5b506102de611664565b3480156105ed57600080fd5b506102de6105fc366004612df8565b61166a565b34801561060d57600080fd5b5061032d61061c366004612f48565b611b70565b34801561062d57600080fd5b506102de611e75565b34801561064257600080fd5b50610656610651366004612f66565b611e81565b6040516102c09190614452565b34801561066f57600080fd5b506102de611ef0565b34801561068457600080fd5b5061032d611ef5565b34801561069957600080fd5b506103f861202c565b3480156106ae57600080fd5b506102de612048565b61032d6106c5366004612f48565b61204e565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c90970154959773ffffffffffffffffffffffffffffffffffffffff90951696939592949193919290919060ff808216916101009004168a565b60045481565b6040518060400160405280601181526020017f4d6f6269757320476f7665726e616e636500000000000000000000000000000081525081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142a2565b60405180910390fd5b61438081101580156107e857506201d8808111155b61081e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142d2565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e882890610858908390859061458e565b60405180910390a15050565b600b6020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614412565b681b1ae4d6e2ef50000081101580156108ea575069021e19e0c9bab24000008111155b610920576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614362565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc0546190610858908390859061458e565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142c2565b600181101580156109bf575062010e008111155b6109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614302565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a9390610858908390859061458e565b604051610a3b906140d2565b604051809103902081565b61438081565b6a034f086f3b33b68400000081565b69021e19e0c9bab240000081565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6060806060806000600a600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610b1457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ae9575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610b6657602002820191906000526020600020905b815481526020019060010190808311610b52575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610c575760008481526020908190208301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b505050505081526020019060010190610b8e565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610d475760008481526020908190208301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b505050505081526020019060010190610c7e565b5050505090509450945094509450509193509193565b60035481565b60008160075410158015610d78575060065482115b610dae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614422565b6000828152600a60205260409020600c81015460ff1615610dd3576002915050610f25565b80600701544311610de8576000915050610f25565b80600801544311610dfd576001915050610f25565b80600a01548160090154111580610e2257506a034f086f3b33b6840000008160090154105b15610e31576003915050610f25565b6002810154610e44576004915050610f25565b600c810154610100900460ff1615610e60576007915050610f25565b6002810154600854604080517fc1a287e20000000000000000000000000000000000000000000000000000000081529051610f0f939273ffffffffffffffffffffffffffffffffffffffff169163c1a287e2916004808301926020929190829003018186803b158015610ed257600080fd5b505afa158015610ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f0a9190810190612ef5565b612276565b4210610f1f576006915050610f25565b60059150505b919050565b6007610f3582610d63565b6007811115610f4057fe5b1415610f78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614402565b6000818152600a60205260409020600181015473ffffffffffffffffffffffffffffffffffffffff16331480611051575060055460095460018381015473ffffffffffffffffffffffffffffffffffffffff92831692634ee2cd7e92911690610fe29043906122bc565b6040518363ffffffff1660e01b8152600401610fff929190614121565b60206040518083038186803b15801561101757600080fd5b505afa15801561102b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061104f9190810190612ef5565b105b611087576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143b2565b600c810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b60038201548110156111cb5760085460038301805473ffffffffffffffffffffffffffffffffffffffff9092169163591fcdfe9190849081106110f657fe5b60009182526020909120015460048501805473ffffffffffffffffffffffffffffffffffffffff909216918590811061112b57fe5b906000526020600020015485600501858154811061114557fe5b9060005260206000200186600601868154811061115e57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161118d959493929190614189565b600060405180830381600087803b1580156111a757600080fd5b505af11580156111bb573d6000803e3d6000fd5b5050600190920191506110b79050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516108589190614217565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4838361122a8483836122fe565b604051611239939291906145e2565b60405180910390a25050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b681b1ae4d6e2ef50000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4858561129d8483836122fe565b86866040516112b095949392919061459c565b60405180910390a250505050565b600a81565b6201d88081565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b62010e0081565b60055481565b60005473ffffffffffffffffffffffffffffffffffffffff163314611344576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614282565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906108589083908590614106565b60085473ffffffffffffffffffffffffffffffffffffffff161561140c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614272565b60005473ffffffffffffffffffffffffffffffffffffffff16331461145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614352565b73ffffffffffffffffffffffffffffffffffffffff85166114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142b2565b73ffffffffffffffffffffffffffffffffffffffff84166114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614262565b614380831015801561150c57506201d8808311155b611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614432565b60018210158015611556575062010e008211155b61158c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614332565b681b1ae4d6e2ef50000081101580156115af575069021e19e0c9bab24000008111155b6115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614312565b6008805473ffffffffffffffffffffffffffffffffffffffff9687167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556009805495909616941693909317909355600455600391909155600555565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6005546009546000919073ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e3361169b4360016122bc565b6040518363ffffffff1660e01b81526004016116b89291906140eb565b60206040518083038186803b1580156116d057600080fd5b505afa1580156116e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117089190810190612ef5565b1161173f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143f2565b84518651148015611751575083518651145b801561175e575082518651145b611794576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614342565b85516117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614392565b600a86511115611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143c2565b336000908152600b602052604090205480156118b957600061182982610d63565b9050600181600781111561183957fe5b1415611871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143e2565b600081600781111561187f57fe5b14156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143d2565b505b60006118c743600354612276565b905060006118d782600454612276565b60078054600101905590506118ea612720565b604051806101c0016040528060075481526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030190805190602001906119fb9291906127a9565b5060808201518051611a17916004840191602090910190612833565b5060a08201518051611a3391600584019160209091019061287a565b5060c08201518051611a4f9160068401916020909101906128d3565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b6000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e604051611b5a99989796959493929190614460565b60405180910390a1519998505050505050505050565b6004611b7b82610d63565b6007811115611b8657fe5b14611bbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614372565b6000818152600a6020908152604080832060085482517f6a42b8f80000000000000000000000000000000000000000000000000000000081529251919493611c3d93429373ffffffffffffffffffffffffffffffffffffffff90931692636a42b8f892600480840193919291829003018186803b158015610ed257600080fd5b905060005b6003830154811015611e2e57611e26836003018281548110611c6057fe5b60009182526020909120015460048501805473ffffffffffffffffffffffffffffffffffffffff9092169184908110611c9557fe5b9060005260206000200154856005018481548110611caf57fe5b600091825260209182902001805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015611d5b5780601f10611d3057610100808354040283529160200191611d5b565b820191906000526020600020905b815481529060010190602001808311611d3e57829003601f168201915b5050505050866006018581548110611d6f57fe5b600091825260209182902001805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015611e1b5780601f10611df057610100808354040283529160200191611e1b565b820191906000526020600020905b815481529060010190602001808311611dfe57829003601f168201915b505050505086612574565b600101611c42565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611e68908590849061458e565b60405180910390a1505050565b604051610a3b906140c7565b611e8961292c565b506000828152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600d018252918290208251606081018452815460ff80821615158352610100909104169281019290925260010154918101919091525b92915050565b600181565b60015473ffffffffffffffffffffffffffffffffffffffff1633148015611f1b57503315155b611f51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143a2565b600080546001805473ffffffffffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffff00000000000000000000000000000000000000008086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611fda928692911690614106565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99161085891849173ffffffffffffffffffffffffffffffffffffffff1690614106565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600561205982610d63565b600781111561206457fe5b1461209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614322565b6000818152600a60205260408120600c810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055905b60038201548110156122465760085460048301805473ffffffffffffffffffffffffffffffffffffffff90921691630825f38f91908490811061211857fe5b906000526020600020015484600301848154811061213257fe5b60009182526020909120015460048601805473ffffffffffffffffffffffffffffffffffffffff909216918690811061216757fe5b906000526020600020015486600501868154811061218157fe5b9060005260206000200187600601878154811061219a57fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016121c9959493929190614189565b6000604051808303818588803b1580156121e257600080fd5b505af11580156121f6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261223d9190810190612f13565b506001016120d9565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516108589190614217565b6000828201838110156122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614382565b9392505050565b6000828211156122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614442565b50900390565b6000600161230b84610d63565b600781111561231657fe5b1461234d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142e2565b60028260ff16111561238b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614252565b6000838152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452600d8101909252909120805460ff16156123fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142f2565b60095460078301546040517f4ee2cd7e00000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff1691634ee2cd7e91612457918b91600401614121565b60206040518083038186803b15801561246f57600080fd5b505afa158015612483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124a79190810190612ef5565b905060ff85166124c9576124bf83600a015482612276565b600a84015561250d565b8460ff16600114156124ed576124e3836009015482612276565b600984015561250d565b8460ff166002141561250d5761250783600b015482612276565b600b8401555b815460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911681177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff8816021783559091018190559150509392505050565b60085460405173ffffffffffffffffffffffffffffffffffffffff9091169063f2b06537906125af908890889088908890889060200161412f565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016125e19190614217565b60206040518083038186803b1580156125f957600080fd5b505afa15801561260d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126319190810190612ed7565b15612668576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614292565b6008546040517f3a66f90100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a66f901906126c6908890889088908890889060040161412f565b602060405180830381600087803b1580156126e057600080fd5b505af11580156126f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127189190810190612ef5565b505050505050565b604051806101c0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612823579160200282015b8281111561282357825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906127c9565b5061282f92915061294c565b5090565b82805482825590600052602060002090810192821561286e579160200282015b8281111561286e578251825591602001919060010190612853565b5061282f92915061298b565b8280548282559060005260206000209081019282156128c7579160200282015b828111156128c757825180516128b79184916020909101906129a5565b509160200191906001019061289a565b5061282f929150612a12565b828054828255906000526020600020908101928215612920579160200282015b8281111561292057825180516129109184916020909101906129a5565b50916020019190600101906128f3565b5061282f929150612a35565b604080516060810182526000808252602082018190529181019190915290565b61298891905b8082111561282f5780547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101612952565b90565b61298891905b8082111561282f5760008155600101612991565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129e657805160ff191683800117855561286e565b8280016001018555821561286e579182018281111561286e578251825591602001919060010190612853565b61298891905b8082111561282f576000612a2c8282612a58565b50600101612a18565b61298891905b8082111561282f576000612a4f8282612a58565b50600101612a3b565b50805460018160011615610100020316600290046000825580601f10612a7e5750612a9c565b601f016020900490600052602060002090810190612a9c919061298b565b50565b8035611eea81614791565b600082601f830112612abb57600080fd5b8135612ace612ac98261464b565b614624565b91508181835260208401935060208101905083856020840282011115612af357600080fd5b60005b83811015612b1f5781612b098882612a9f565b8452506020928301929190910190600101612af6565b5050505092915050565b600082601f830112612b3a57600080fd5b8135612b48612ac98261464b565b81815260209384019390925082018360005b83811015612b1f5781358601612b708882612c69565b8452506020928301929190910190600101612b5a565b600082601f830112612b9757600080fd5b8135612ba5612ac98261464b565b81815260209384019390925082018360005b83811015612b1f5781358601612bcd8882612c69565b8452506020928301929190910190600101612bb7565b600082601f830112612bf457600080fd5b8135612c02612ac98261464b565b91508181835260208401935060208101905083856020840282011115612c2757600080fd5b60005b83811015612b1f5781612c3d8882612d47565b8452506020928301929190910190600101612c2a565b8051611eea816147a5565b8051611eea816147ae565b600082601f830112612c7a57600080fd5b8135612c88612ac98261466c565b91508082526020830160208301858383011115612ca457600080fd5b612caf838284614727565b50505092915050565b600082601f830112612cc957600080fd5b8151612cd7612ac98261466c565b91508082526020830160208301858383011115612cf357600080fd5b612caf838284614733565b60008083601f840112612d1057600080fd5b50813567ffffffffffffffff811115612d2857600080fd5b602083019150836001820283011115612d4057600080fd5b9250929050565b8035611eea816147ae565b8035611eea816147b7565b600060208284031215612d6f57600080fd5b6000612d7b8484612a9f565b949350505050565b600080600080600060a08688031215612d9b57600080fd5b6000612da78888612a9f565b9550506020612db888828901612a9f565b9450506040612dc988828901612d47565b9350506060612dda88828901612d47565b9250506080612deb88828901612d47565b9150509295509295909350565b600080600080600060a08688031215612e1057600080fd5b853567ffffffffffffffff811115612e2757600080fd5b612e3388828901612aaa565b955050602086013567ffffffffffffffff811115612e5057600080fd5b612e5c88828901612be3565b945050604086013567ffffffffffffffff811115612e7957600080fd5b612e8588828901612b86565b935050606086013567ffffffffffffffff811115612ea257600080fd5b612eae88828901612b29565b925050608086013567ffffffffffffffff811115612ecb57600080fd5b612deb88828901612c69565b600060208284031215612ee957600080fd5b6000612d7b8484612c53565b600060208284031215612f0757600080fd5b6000612d7b8484612c5e565b600060208284031215612f2557600080fd5b815167ffffffffffffffff811115612f3c57600080fd5b612d7b84828501612cb8565b600060208284031215612f5a57600080fd5b6000612d7b8484612d47565b60008060408385031215612f7957600080fd5b6000612f858585612d47565b9250506020612f9685828601612a9f565b9150509250929050565b60008060408385031215612fb357600080fd5b6000612fbf8585612d47565b9250506020612f9685828601612d52565b60008060008060608587031215612fe657600080fd5b6000612ff28787612d47565b945050602061300387828801612d52565b935050604085013567ffffffffffffffff81111561302057600080fd5b61302c87828801612cfe565b95989497509550505050565b60006130448383613073565b505060200190565b60006122b58383613204565b600061304483836131fb565b61306d8161470a565b82525050565b61306d816146d1565b6000613087826146c4565b61309181856146c8565b935061309c836146b2565b8060005b838110156130ca5781516130b48882613038565b97506130bf836146b2565b9250506001016130a0565b509495945050505050565b60006130e0826146c4565b6130ea81856146c8565b9350836020820285016130fc856146b2565b8060005b858110156131365784840389528151613119858261304c565b9450613124836146b2565b60209a909a0199925050600101613100565b5091979650505050505050565b600061314e826146c4565b61315881856146c8565b93508360208202850161316a856146b2565b8060005b858110156131365784840389528151613187858261304c565b9450613192836146b2565b60209a909a019992505060010161316e565b60006131af826146c4565b6131b981856146c8565b93506131c4836146b2565b8060005b838110156130ca5781516131dc8882613058565b97506131e7836146b2565b9250506001016131c8565b61306d816146dc565b61306d81612988565b600061320f826146c4565b61321981856146c8565b9350613229818560208601614733565b6132328161475f565b9093019392505050565b600081546001811660008114613259576001811461329d576132dc565b607f600283041661326a81876146c8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841681529550506020850192506132dc565b600282046132ab81876146c8565b95506132b6856146b8565b60005b828110156132d5578154888201526001909101906020016132b9565b8701945050505b505092915050565b61306d81614711565b61306d8161471c565b600061330283856146c8565b935061330f838584614727565b6132328361475f565b60006133256032836146c8565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527f20696e76616c696420766f746520747970650000000000000000000000000000602082015260400192915050565b60006133846031836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f69642076656d6f62692061646472657373000000000000000000000000000000602082015260400192915050565b60006133e3602883610f25565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e74382081527f737570706f727429000000000000000000000000000000000000000000000000602082015260280192915050565b60006134426033836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f81527f6e6c7920696e697469616c697a65206f6e636500000000000000000000000000602082015260400192915050565b60006134a1602a836146c8565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081527f61646d696e206f6e6c7900000000000000000000000000000000000000000000602082015260400192915050565b60006135006055836146c8565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e2060208201527f616c726561647920717565756564206174206574610000000000000000000000604082015260600192915050565b6000613585602b836146c8565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81527f2061646d696e206f6e6c79000000000000000000000000000000000000000000602082015260400192915050565b60006135e46033836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f69642074696d656c6f636b206164647265737300000000000000000000000000602082015260400192915050565b6000613643602a836146c8565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081527f61646d696e206f6e6c7900000000000000000000000000000000000000000000602082015260400192915050565b60006136a26036836146c8565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81527f20696e76616c696420766f74696e6720706572696f6400000000000000000000602082015260400192915050565b60006137016031836146c8565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527f20766f74696e6720697320636c6f736564000000000000000000000000000000602082015260400192915050565b60006137606034836146c8565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527f20766f74657220616c726561647920766f746564000000000000000000000000602082015260400192915050565b60006137bf6034836146c8565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081527f696e76616c696420766f74696e672064656c6179000000000000000000000000602082015260400192915050565b600061381e6035836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f69642070726f706f73616c207468726573686f6c640000000000000000000000602082015260400192915050565b600061387d6045836146c8565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c79206265206578656375746564206966206974206973207160208201527f7565756564000000000000000000000000000000000000000000000000000000604082015260600192915050565b6000613902602f836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f696420766f74696e672064656c61790000000000000000000000000000000000602082015260400192915050565b60006139616044836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d60208201527f6174636800000000000000000000000000000000000000000000000000000000604082015260600192915050565b60006139e66025836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e81527f206f6e6c79000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000613a456040836146c8565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b6000613aa46044836146c8565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c792062652071756575656420696620697420697320737563636560208201527f6564656400000000000000000000000000000000000000000000000000000000604082015260600192915050565b6000613b296011836146c8565b7f6164646974696f6e206f766572666c6f77000000000000000000000000000000815260200192915050565b6000613b62604383610f25565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b6000613be7602c836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81527f7669646520616374696f6e730000000000000000000000000000000000000000602082015260400192915050565b6000613c46602e836146c8565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481527f696e672061646d696e206f6e6c79000000000000000000000000000000000000602082015260400192915050565b6000613ca5602f836146c8565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081527f61626f7665207468726573686f6c640000000000000000000000000000000000602082015260400192915050565b6000613d046028836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981527f20616374696f6e73000000000000000000000000000000000000000000000000602082015260400192915050565b6000613d636059836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000613de86058836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611eea6000836146c8565b6000613e7a603f836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613ed96036836146c8565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f7420636181527f6e63656c2065786563757465642070726f706f73616c00000000000000000000602082015260400192915050565b6000613f386030836146c8565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a2061646d696e206f6e6c7900000000000000000000000000000000602082015260400192915050565b6000613f976029836146c8565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c696420707281527f6f706f73616c2069640000000000000000000000000000000000000000000000602082015260400192915050565b6000613ff66030836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f696420766f74696e6720706572696f6400000000000000000000000000000000602082015260400192915050565b60006140556015836146c8565b7f7375627472616374696f6e20756e646572666c6f770000000000000000000000815260200192915050565b8051606083019061409284826131f2565b5060208201516140a560208501826140be565b5060408201516140b860408501826131fb565b50505050565b61306d81614704565b6000611eea826133d6565b6000611eea82613b55565b60208101611eea8284613073565b604081016140f98285613064565b6122b560208301846131fb565b604081016141148285613073565b6122b56020830184613073565b604081016140f98285613073565b60a0810161413d8288613073565b61414a60208301876131fb565b818103604083015261415c8186613204565b905081810360608301526141708185613204565b905061417f60808301846131fb565b9695505050505050565b60a081016141978288613073565b6141a460208301876131fb565b81810360408301526141b6818661323c565b90508181036060830152614170818561323c565b608080825281016141db818761307c565b905081810360208301526141ef81866131a4565b905081810360408301526142038185613143565b9050818103606083015261417f81846130d5565b60208101611eea82846131fb565b60208101611eea82846132e4565b60208101611eea82846132ed565b602080825281016122b58184613204565b60208082528101611eea81613318565b60208082528101611eea81613377565b60208082528101611eea81613435565b60208082528101611eea81613494565b60208082528101611eea816134f3565b60208082528101611eea81613578565b60208082528101611eea816135d7565b60208082528101611eea81613636565b60208082528101611eea81613695565b60208082528101611eea816136f4565b60208082528101611eea81613753565b60208082528101611eea816137b2565b60208082528101611eea81613811565b60208082528101611eea81613870565b60208082528101611eea816138f5565b60208082528101611eea81613954565b60208082528101611eea816139d9565b60208082528101611eea81613a38565b60208082528101611eea81613a97565b60208082528101611eea81613b1c565b60208082528101611eea81613bda565b60208082528101611eea81613c39565b60208082528101611eea81613c98565b60208082528101611eea81613cf7565b60208082528101611eea81613d56565b60208082528101611eea81613ddb565b60208082528101611eea81613e6d565b60208082528101611eea81613ecc565b60208082528101611eea81613f2b565b60208082528101611eea81613f8a565b60208082528101611eea81613fe9565b60208082528101611eea81614048565b60608101611eea8284614081565b610120810161446f828c6131fb565b61447c602083018b613064565b818103604083015261448e818a61307c565b905081810360608301526144a281896131a4565b905081810360808301526144b68188613143565b905081810360a08301526144ca81876130d5565b90506144d960c08301866131fb565b6144e660e08301856131fb565b8181036101008301526144f98184613204565b9b9a5050505050505050505050565b6101408101614517828d6131fb565b614524602083018c613073565b614531604083018b6131fb565b61453e606083018a6131fb565b61454b60808301896131fb565b61455860a08301886131fb565b61456560c08301876131fb565b61457260e08301866131fb565b6145806101008301856131f2565b6144f96101208301846131f2565b604081016140f982856131fb565b608081016145aa82886131fb565b6145b760208301876140be565b6145c460408301866131fb565b81810360608301526145d78184866132f6565b979650505050505050565b608081016145f082866131fb565b6145fd60208301856140be565b61460a60408301846131fb565b818103606083015261461b81613e60565b95945050505050565b60405181810167ffffffffffffffff8111828210171561464357600080fd5b604052919050565b600067ffffffffffffffff82111561466257600080fd5b5060209081020190565b600067ffffffffffffffff82111561468357600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611eea826146eb565b151590565b80610f2581614787565b73ffffffffffffffffffffffffffffffffffffffff1690565b60ff1690565b6000611eea825b6000611eea826146d1565b6000611eea826146e1565b82818337506000910152565b60005b8381101561474e578181015183820152602001614736565b838111156140b85750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b60088110612a9c57fe5b61479a816146d1565b8114612a9c57600080fd5b61479a816146dc565b61479a81612988565b61479a8161470456fea365627a7a7231582079a25748904ffca7ed3590bad76063321120d47c14336f9ada8ba7af4146c9496c6578706572696d656e74616cf564736f6c63430005100040

Deployed ByteCode

0x6080604052600436106102855760003560e01c80637b3c71d311610153578063da35c664116100cb578063e48083fe1161007f578063f851a44011610064578063f851a4401461068d578063fc4eee42146106a2578063fe0d94c1146106b757610285565b8063e48083fe14610663578063e9c714f21461067857610285565b8063ddf0b009116100b0578063ddf0b00914610601578063deaaa7cc14610621578063e23a9a521461063657610285565b8063da35c664146105cc578063da95691a146105e157610285565b8063b112626311610122578063b71d1a0c11610107578063b71d1a0c14610577578063d13f90b414610597578063d33219b4146105b757610285565b8063b11262631461054d578063b58131b01461056257610285565b80637b3c71d3146104e15780637bdbe4d014610501578063a64e024a14610516578063a6a0b3de1461052b57610285565b806324bc1a64116102015780633e4f49e6116101b5578063567813881161019a57806356781388146104975780635c60da1b146104b7578063791f5d23146104cc57610285565b80633e4f49e61461044a57806340e58ee51461047757610285565b806326782247116101e657806326782247146103e3578063328dd982146104055780633932abb11461043557610285565b806324bc1a64146103b957806325fd935a146103ce57610285565b806317977c61116102585780631dfb1b5a1161023d5780631dfb1b5a1461036f57806320606b701461038f578063215809ca146103a457610285565b806317977c611461032f57806317ba1b8b1461034f57610285565b8063013cf08b1461028a57806302a251a3146102c957806306fdde03146102eb5780630ea2d98c1461030d575b600080fd5b34801561029657600080fd5b506102aa6102a5366004612f48565b6106ca565b6040516102c09a99989796959493929190614508565b60405180910390f35b3480156102d557600080fd5b506102de61073a565b6040516102c09190614217565b3480156102f757600080fd5b50610300610740565b6040516102c09190614241565b34801561031957600080fd5b5061032d610328366004612f48565b610779565b005b34801561033b57600080fd5b506102de61034a366004612d5d565b610864565b34801561035b57600080fd5b5061032d61036a366004612f48565b610876565b34801561037b57600080fd5b5061032d61038a366004612f48565b61095a565b34801561039b57600080fd5b506102de610a2f565b3480156103b057600080fd5b506102de610a46565b3480156103c557600080fd5b506102de610a4c565b3480156103da57600080fd5b506102de610a5b565b3480156103ef57600080fd5b506103f8610a69565b6040516102c091906140dd565b34801561041157600080fd5b50610425610420366004612f48565b610a85565b6040516102c094939291906141ca565b34801561044157600080fd5b506102de610d5d565b34801561045657600080fd5b5061046a610465366004612f48565b610d63565b6040516102c09190614233565b34801561048357600080fd5b5061032d610492366004612f48565b610f2a565b3480156104a357600080fd5b5061032d6104b2366004612fa0565b6111fb565b3480156104c357600080fd5b506103f8611245565b3480156104d857600080fd5b506102de611261565b3480156104ed57600080fd5b5061032d6104fc366004612fd0565b61126e565b34801561050d57600080fd5b506102de6112be565b34801561052257600080fd5b506102de6112c3565b34801561053757600080fd5b506105406112ca565b6040516102c09190614225565b34801561055957600080fd5b506102de6112e6565b34801561056e57600080fd5b506102de6112ed565b34801561058357600080fd5b5061032d610592366004612d5d565b6112f3565b3480156105a357600080fd5b5061032d6105b2366004612d83565b6113bc565b3480156105c357600080fd5b50610540611648565b3480156105d857600080fd5b506102de611664565b3480156105ed57600080fd5b506102de6105fc366004612df8565b61166a565b34801561060d57600080fd5b5061032d61061c366004612f48565b611b70565b34801561062d57600080fd5b506102de611e75565b34801561064257600080fd5b50610656610651366004612f66565b611e81565b6040516102c09190614452565b34801561066f57600080fd5b506102de611ef0565b34801561068457600080fd5b5061032d611ef5565b34801561069957600080fd5b506103f861202c565b3480156106ae57600080fd5b506102de612048565b61032d6106c5366004612f48565b61204e565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c90970154959773ffffffffffffffffffffffffffffffffffffffff90951696939592949193919290919060ff808216916101009004168a565b60045481565b6040518060400160405280601181526020017f4d6f6269757320476f7665726e616e636500000000000000000000000000000081525081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142a2565b60405180910390fd5b61438081101580156107e857506201d8808111155b61081e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142d2565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e882890610858908390859061458e565b60405180910390a15050565b600b6020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614412565b681b1ae4d6e2ef50000081101580156108ea575069021e19e0c9bab24000008111155b610920576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614362565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc0546190610858908390859061458e565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142c2565b600181101580156109bf575062010e008111155b6109f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614302565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a9390610858908390859061458e565b604051610a3b906140d2565b604051809103902081565b61438081565b6a034f086f3b33b68400000081565b69021e19e0c9bab240000081565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6060806060806000600a600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610b1457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ae9575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610b6657602002820191906000526020600020905b815481526020019060010190808311610b52575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610c575760008481526020908190208301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b505050505081526020019060010190610b8e565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610d475760008481526020908190208301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b505050505081526020019060010190610c7e565b5050505090509450945094509450509193509193565b60035481565b60008160075410158015610d78575060065482115b610dae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614422565b6000828152600a60205260409020600c81015460ff1615610dd3576002915050610f25565b80600701544311610de8576000915050610f25565b80600801544311610dfd576001915050610f25565b80600a01548160090154111580610e2257506a034f086f3b33b6840000008160090154105b15610e31576003915050610f25565b6002810154610e44576004915050610f25565b600c810154610100900460ff1615610e60576007915050610f25565b6002810154600854604080517fc1a287e20000000000000000000000000000000000000000000000000000000081529051610f0f939273ffffffffffffffffffffffffffffffffffffffff169163c1a287e2916004808301926020929190829003018186803b158015610ed257600080fd5b505afa158015610ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f0a9190810190612ef5565b612276565b4210610f1f576006915050610f25565b60059150505b919050565b6007610f3582610d63565b6007811115610f4057fe5b1415610f78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614402565b6000818152600a60205260409020600181015473ffffffffffffffffffffffffffffffffffffffff16331480611051575060055460095460018381015473ffffffffffffffffffffffffffffffffffffffff92831692634ee2cd7e92911690610fe29043906122bc565b6040518363ffffffff1660e01b8152600401610fff929190614121565b60206040518083038186803b15801561101757600080fd5b505afa15801561102b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061104f9190810190612ef5565b105b611087576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143b2565b600c810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b60038201548110156111cb5760085460038301805473ffffffffffffffffffffffffffffffffffffffff9092169163591fcdfe9190849081106110f657fe5b60009182526020909120015460048501805473ffffffffffffffffffffffffffffffffffffffff909216918590811061112b57fe5b906000526020600020015485600501858154811061114557fe5b9060005260206000200186600601868154811061115e57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161118d959493929190614189565b600060405180830381600087803b1580156111a757600080fd5b505af11580156111bb573d6000803e3d6000fd5b5050600190920191506110b79050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516108589190614217565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4838361122a8483836122fe565b604051611239939291906145e2565b60405180910390a25050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b681b1ae4d6e2ef50000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4858561129d8483836122fe565b86866040516112b095949392919061459c565b60405180910390a250505050565b600a81565b6201d88081565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b62010e0081565b60055481565b60005473ffffffffffffffffffffffffffffffffffffffff163314611344576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614282565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906108589083908590614106565b60085473ffffffffffffffffffffffffffffffffffffffff161561140c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614272565b60005473ffffffffffffffffffffffffffffffffffffffff16331461145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614352565b73ffffffffffffffffffffffffffffffffffffffff85166114aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142b2565b73ffffffffffffffffffffffffffffffffffffffff84166114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614262565b614380831015801561150c57506201d8808311155b611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614432565b60018210158015611556575062010e008211155b61158c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614332565b681b1ae4d6e2ef50000081101580156115af575069021e19e0c9bab24000008111155b6115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614312565b6008805473ffffffffffffffffffffffffffffffffffffffff9687167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556009805495909616941693909317909355600455600391909155600555565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6005546009546000919073ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e3361169b4360016122bc565b6040518363ffffffff1660e01b81526004016116b89291906140eb565b60206040518083038186803b1580156116d057600080fd5b505afa1580156116e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117089190810190612ef5565b1161173f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143f2565b84518651148015611751575083518651145b801561175e575082518651145b611794576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614342565b85516117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614392565b600a86511115611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143c2565b336000908152600b602052604090205480156118b957600061182982610d63565b9050600181600781111561183957fe5b1415611871576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143e2565b600081600781111561187f57fe5b14156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143d2565b505b60006118c743600354612276565b905060006118d782600454612276565b60078054600101905590506118ea612720565b604051806101c0016040528060075481526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030190805190602001906119fb9291906127a9565b5060808201518051611a17916004840191602090910190612833565b5060a08201518051611a3391600584019160209091019061287a565b5060c08201518051611a4f9160068401916020909101906128d3565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b6000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e604051611b5a99989796959493929190614460565b60405180910390a1519998505050505050505050565b6004611b7b82610d63565b6007811115611b8657fe5b14611bbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614372565b6000818152600a6020908152604080832060085482517f6a42b8f80000000000000000000000000000000000000000000000000000000081529251919493611c3d93429373ffffffffffffffffffffffffffffffffffffffff90931692636a42b8f892600480840193919291829003018186803b158015610ed257600080fd5b905060005b6003830154811015611e2e57611e26836003018281548110611c6057fe5b60009182526020909120015460048501805473ffffffffffffffffffffffffffffffffffffffff9092169184908110611c9557fe5b9060005260206000200154856005018481548110611caf57fe5b600091825260209182902001805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015611d5b5780601f10611d3057610100808354040283529160200191611d5b565b820191906000526020600020905b815481529060010190602001808311611d3e57829003601f168201915b5050505050866006018581548110611d6f57fe5b600091825260209182902001805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600187161502019094169390930492830185900485028101850190915281815292830182828015611e1b5780601f10611df057610100808354040283529160200191611e1b565b820191906000526020600020905b815481529060010190602001808311611dfe57829003601f168201915b505050505086612574565b600101611c42565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611e68908590849061458e565b60405180910390a1505050565b604051610a3b906140c7565b611e8961292c565b506000828152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600d018252918290208251606081018452815460ff80821615158352610100909104169281019290925260010154918101919091525b92915050565b600181565b60015473ffffffffffffffffffffffffffffffffffffffff1633148015611f1b57503315155b611f51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906143a2565b600080546001805473ffffffffffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffff00000000000000000000000000000000000000008086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611fda928692911690614106565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99161085891849173ffffffffffffffffffffffffffffffffffffffff1690614106565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600561205982610d63565b600781111561206457fe5b1461209b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614322565b6000818152600a60205260408120600c810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055905b60038201548110156122465760085460048301805473ffffffffffffffffffffffffffffffffffffffff90921691630825f38f91908490811061211857fe5b906000526020600020015484600301848154811061213257fe5b60009182526020909120015460048601805473ffffffffffffffffffffffffffffffffffffffff909216918690811061216757fe5b906000526020600020015486600501868154811061218157fe5b9060005260206000200187600601878154811061219a57fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016121c9959493929190614189565b6000604051808303818588803b1580156121e257600080fd5b505af11580156121f6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261223d9190810190612f13565b506001016120d9565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516108589190614217565b6000828201838110156122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614382565b9392505050565b6000828211156122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614442565b50900390565b6000600161230b84610d63565b600781111561231657fe5b1461234d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142e2565b60028260ff16111561238b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614252565b6000838152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452600d8101909252909120805460ff16156123fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906142f2565b60095460078301546040517f4ee2cd7e00000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff1691634ee2cd7e91612457918b91600401614121565b60206040518083038186803b15801561246f57600080fd5b505afa158015612483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124a79190810190612ef5565b905060ff85166124c9576124bf83600a015482612276565b600a84015561250d565b8460ff16600114156124ed576124e3836009015482612276565b600984015561250d565b8460ff166002141561250d5761250783600b015482612276565b600b8401555b815460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911681177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff8816021783559091018190559150509392505050565b60085460405173ffffffffffffffffffffffffffffffffffffffff9091169063f2b06537906125af908890889088908890889060200161412f565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016125e19190614217565b60206040518083038186803b1580156125f957600080fd5b505afa15801561260d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126319190810190612ed7565b15612668576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca90614292565b6008546040517f3a66f90100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633a66f901906126c6908890889088908890889060040161412f565b602060405180830381600087803b1580156126e057600080fd5b505af11580156126f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127189190810190612ef5565b505050505050565b604051806101c0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612823579160200282015b8281111561282357825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906127c9565b5061282f92915061294c565b5090565b82805482825590600052602060002090810192821561286e579160200282015b8281111561286e578251825591602001919060010190612853565b5061282f92915061298b565b8280548282559060005260206000209081019282156128c7579160200282015b828111156128c757825180516128b79184916020909101906129a5565b509160200191906001019061289a565b5061282f929150612a12565b828054828255906000526020600020908101928215612920579160200282015b8281111561292057825180516129109184916020909101906129a5565b50916020019190600101906128f3565b5061282f929150612a35565b604080516060810182526000808252602082018190529181019190915290565b61298891905b8082111561282f5780547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101612952565b90565b61298891905b8082111561282f5760008155600101612991565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129e657805160ff191683800117855561286e565b8280016001018555821561286e579182018281111561286e578251825591602001919060010190612853565b61298891905b8082111561282f576000612a2c8282612a58565b50600101612a18565b61298891905b8082111561282f576000612a4f8282612a58565b50600101612a3b565b50805460018160011615610100020316600290046000825580601f10612a7e5750612a9c565b601f016020900490600052602060002090810190612a9c919061298b565b50565b8035611eea81614791565b600082601f830112612abb57600080fd5b8135612ace612ac98261464b565b614624565b91508181835260208401935060208101905083856020840282011115612af357600080fd5b60005b83811015612b1f5781612b098882612a9f565b8452506020928301929190910190600101612af6565b5050505092915050565b600082601f830112612b3a57600080fd5b8135612b48612ac98261464b565b81815260209384019390925082018360005b83811015612b1f5781358601612b708882612c69565b8452506020928301929190910190600101612b5a565b600082601f830112612b9757600080fd5b8135612ba5612ac98261464b565b81815260209384019390925082018360005b83811015612b1f5781358601612bcd8882612c69565b8452506020928301929190910190600101612bb7565b600082601f830112612bf457600080fd5b8135612c02612ac98261464b565b91508181835260208401935060208101905083856020840282011115612c2757600080fd5b60005b83811015612b1f5781612c3d8882612d47565b8452506020928301929190910190600101612c2a565b8051611eea816147a5565b8051611eea816147ae565b600082601f830112612c7a57600080fd5b8135612c88612ac98261466c565b91508082526020830160208301858383011115612ca457600080fd5b612caf838284614727565b50505092915050565b600082601f830112612cc957600080fd5b8151612cd7612ac98261466c565b91508082526020830160208301858383011115612cf357600080fd5b612caf838284614733565b60008083601f840112612d1057600080fd5b50813567ffffffffffffffff811115612d2857600080fd5b602083019150836001820283011115612d4057600080fd5b9250929050565b8035611eea816147ae565b8035611eea816147b7565b600060208284031215612d6f57600080fd5b6000612d7b8484612a9f565b949350505050565b600080600080600060a08688031215612d9b57600080fd5b6000612da78888612a9f565b9550506020612db888828901612a9f565b9450506040612dc988828901612d47565b9350506060612dda88828901612d47565b9250506080612deb88828901612d47565b9150509295509295909350565b600080600080600060a08688031215612e1057600080fd5b853567ffffffffffffffff811115612e2757600080fd5b612e3388828901612aaa565b955050602086013567ffffffffffffffff811115612e5057600080fd5b612e5c88828901612be3565b945050604086013567ffffffffffffffff811115612e7957600080fd5b612e8588828901612b86565b935050606086013567ffffffffffffffff811115612ea257600080fd5b612eae88828901612b29565b925050608086013567ffffffffffffffff811115612ecb57600080fd5b612deb88828901612c69565b600060208284031215612ee957600080fd5b6000612d7b8484612c53565b600060208284031215612f0757600080fd5b6000612d7b8484612c5e565b600060208284031215612f2557600080fd5b815167ffffffffffffffff811115612f3c57600080fd5b612d7b84828501612cb8565b600060208284031215612f5a57600080fd5b6000612d7b8484612d47565b60008060408385031215612f7957600080fd5b6000612f858585612d47565b9250506020612f9685828601612a9f565b9150509250929050565b60008060408385031215612fb357600080fd5b6000612fbf8585612d47565b9250506020612f9685828601612d52565b60008060008060608587031215612fe657600080fd5b6000612ff28787612d47565b945050602061300387828801612d52565b935050604085013567ffffffffffffffff81111561302057600080fd5b61302c87828801612cfe565b95989497509550505050565b60006130448383613073565b505060200190565b60006122b58383613204565b600061304483836131fb565b61306d8161470a565b82525050565b61306d816146d1565b6000613087826146c4565b61309181856146c8565b935061309c836146b2565b8060005b838110156130ca5781516130b48882613038565b97506130bf836146b2565b9250506001016130a0565b509495945050505050565b60006130e0826146c4565b6130ea81856146c8565b9350836020820285016130fc856146b2565b8060005b858110156131365784840389528151613119858261304c565b9450613124836146b2565b60209a909a0199925050600101613100565b5091979650505050505050565b600061314e826146c4565b61315881856146c8565b93508360208202850161316a856146b2565b8060005b858110156131365784840389528151613187858261304c565b9450613192836146b2565b60209a909a019992505060010161316e565b60006131af826146c4565b6131b981856146c8565b93506131c4836146b2565b8060005b838110156130ca5781516131dc8882613058565b97506131e7836146b2565b9250506001016131c8565b61306d816146dc565b61306d81612988565b600061320f826146c4565b61321981856146c8565b9350613229818560208601614733565b6132328161475f565b9093019392505050565b600081546001811660008114613259576001811461329d576132dc565b607f600283041661326a81876146c8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841681529550506020850192506132dc565b600282046132ab81876146c8565b95506132b6856146b8565b60005b828110156132d5578154888201526001909101906020016132b9565b8701945050505b505092915050565b61306d81614711565b61306d8161471c565b600061330283856146c8565b935061330f838584614727565b6132328361475f565b60006133256032836146c8565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527f20696e76616c696420766f746520747970650000000000000000000000000000602082015260400192915050565b60006133846031836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f69642076656d6f62692061646472657373000000000000000000000000000000602082015260400192915050565b60006133e3602883610f25565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e74382081527f737570706f727429000000000000000000000000000000000000000000000000602082015260280192915050565b60006134426033836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f81527f6e6c7920696e697469616c697a65206f6e636500000000000000000000000000602082015260400192915050565b60006134a1602a836146c8565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081527f61646d696e206f6e6c7900000000000000000000000000000000000000000000602082015260400192915050565b60006135006055836146c8565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e2060208201527f616c726561647920717565756564206174206574610000000000000000000000604082015260600192915050565b6000613585602b836146c8565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81527f2061646d696e206f6e6c79000000000000000000000000000000000000000000602082015260400192915050565b60006135e46033836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f69642074696d656c6f636b206164647265737300000000000000000000000000602082015260400192915050565b6000613643602a836146c8565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081527f61646d696e206f6e6c7900000000000000000000000000000000000000000000602082015260400192915050565b60006136a26036836146c8565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81527f20696e76616c696420766f74696e6720706572696f6400000000000000000000602082015260400192915050565b60006137016031836146c8565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527f20766f74696e6720697320636c6f736564000000000000000000000000000000602082015260400192915050565b60006137606034836146c8565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527f20766f74657220616c726561647920766f746564000000000000000000000000602082015260400192915050565b60006137bf6034836146c8565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081527f696e76616c696420766f74696e672064656c6179000000000000000000000000602082015260400192915050565b600061381e6035836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f69642070726f706f73616c207468726573686f6c640000000000000000000000602082015260400192915050565b600061387d6045836146c8565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c79206265206578656375746564206966206974206973207160208201527f7565756564000000000000000000000000000000000000000000000000000000604082015260600192915050565b6000613902602f836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f696420766f74696e672064656c61790000000000000000000000000000000000602082015260400192915050565b60006139616044836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d60208201527f6174636800000000000000000000000000000000000000000000000000000000604082015260600192915050565b60006139e66025836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e81527f206f6e6c79000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000613a456040836146c8565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b6000613aa46044836146c8565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c792062652071756575656420696620697420697320737563636560208201527f6564656400000000000000000000000000000000000000000000000000000000604082015260600192915050565b6000613b296011836146c8565b7f6164646974696f6e206f766572666c6f77000000000000000000000000000000815260200192915050565b6000613b62604383610f25565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b6000613be7602c836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81527f7669646520616374696f6e730000000000000000000000000000000000000000602082015260400192915050565b6000613c46602e836146c8565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481527f696e672061646d696e206f6e6c79000000000000000000000000000000000000602082015260400192915050565b6000613ca5602f836146c8565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081527f61626f7665207468726573686f6c640000000000000000000000000000000000602082015260400192915050565b6000613d046028836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981527f20616374696f6e73000000000000000000000000000000000000000000000000602082015260400192915050565b6000613d636059836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000613de86058836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611eea6000836146c8565b6000613e7a603f836146c8565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613ed96036836146c8565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f7420636181527f6e63656c2065786563757465642070726f706f73616c00000000000000000000602082015260400192915050565b6000613f386030836146c8565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a2061646d696e206f6e6c7900000000000000000000000000000000602082015260400192915050565b6000613f976029836146c8565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c696420707281527f6f706f73616c2069640000000000000000000000000000000000000000000000602082015260400192915050565b6000613ff66030836146c8565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81527f696420766f74696e6720706572696f6400000000000000000000000000000000602082015260400192915050565b60006140556015836146c8565b7f7375627472616374696f6e20756e646572666c6f770000000000000000000000815260200192915050565b8051606083019061409284826131f2565b5060208201516140a560208501826140be565b5060408201516140b860408501826131fb565b50505050565b61306d81614704565b6000611eea826133d6565b6000611eea82613b55565b60208101611eea8284613073565b604081016140f98285613064565b6122b560208301846131fb565b604081016141148285613073565b6122b56020830184613073565b604081016140f98285613073565b60a0810161413d8288613073565b61414a60208301876131fb565b818103604083015261415c8186613204565b905081810360608301526141708185613204565b905061417f60808301846131fb565b9695505050505050565b60a081016141978288613073565b6141a460208301876131fb565b81810360408301526141b6818661323c565b90508181036060830152614170818561323c565b608080825281016141db818761307c565b905081810360208301526141ef81866131a4565b905081810360408301526142038185613143565b9050818103606083015261417f81846130d5565b60208101611eea82846131fb565b60208101611eea82846132e4565b60208101611eea82846132ed565b602080825281016122b58184613204565b60208082528101611eea81613318565b60208082528101611eea81613377565b60208082528101611eea81613435565b60208082528101611eea81613494565b60208082528101611eea816134f3565b60208082528101611eea81613578565b60208082528101611eea816135d7565b60208082528101611eea81613636565b60208082528101611eea81613695565b60208082528101611eea816136f4565b60208082528101611eea81613753565b60208082528101611eea816137b2565b60208082528101611eea81613811565b60208082528101611eea81613870565b60208082528101611eea816138f5565b60208082528101611eea81613954565b60208082528101611eea816139d9565b60208082528101611eea81613a38565b60208082528101611eea81613a97565b60208082528101611eea81613b1c565b60208082528101611eea81613bda565b60208082528101611eea81613c39565b60208082528101611eea81613c98565b60208082528101611eea81613cf7565b60208082528101611eea81613d56565b60208082528101611eea81613ddb565b60208082528101611eea81613e6d565b60208082528101611eea81613ecc565b60208082528101611eea81613f2b565b60208082528101611eea81613f8a565b60208082528101611eea81613fe9565b60208082528101611eea81614048565b60608101611eea8284614081565b610120810161446f828c6131fb565b61447c602083018b613064565b818103604083015261448e818a61307c565b905081810360608301526144a281896131a4565b905081810360808301526144b68188613143565b905081810360a08301526144ca81876130d5565b90506144d960c08301866131fb565b6144e660e08301856131fb565b8181036101008301526144f98184613204565b9b9a5050505050505050505050565b6101408101614517828d6131fb565b614524602083018c613073565b614531604083018b6131fb565b61453e606083018a6131fb565b61454b60808301896131fb565b61455860a08301886131fb565b61456560c08301876131fb565b61457260e08301866131fb565b6145806101008301856131f2565b6144f96101208301846131f2565b604081016140f982856131fb565b608081016145aa82886131fb565b6145b760208301876140be565b6145c460408301866131fb565b81810360608301526145d78184866132f6565b979650505050505050565b608081016145f082866131fb565b6145fd60208301856140be565b61460a60408301846131fb565b818103606083015261461b81613e60565b95945050505050565b60405181810167ffffffffffffffff8111828210171561464357600080fd5b604052919050565b600067ffffffffffffffff82111561466257600080fd5b5060209081020190565b600067ffffffffffffffff82111561468357600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611eea826146eb565b151590565b80610f2581614787565b73ffffffffffffffffffffffffffffffffffffffff1690565b60ff1690565b6000611eea825b6000611eea826146d1565b6000611eea826146e1565b82818337506000910152565b60005b8381101561474e578181015183820152602001614736565b838111156140b85750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b60088110612a9c57fe5b61479a816146d1565b8114612a9c57600080fd5b61479a816146dc565b61479a81612988565b61479a8161470456fea365627a7a7231582079a25748904ffca7ed3590bad76063321120d47c14336f9ada8ba7af4146c9496c6578706572696d656e74616cf564736f6c63430005100040