false
false

Contract Address Details

0xB6c0F787f05091E6E79F6F7016b82223701bCA53

Contract Name
GovernorAlpha
Creator
0x3618b6–9fff85 at 0x37b924–7bf5ae
Balance
0 SYS ( )
Tokens
Fetching tokens...
Transactions
12 Transactions
Transfers
0 Transfers
Gas Used
6,506,893
Last Balance Update
789894
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
GovernorAlpha




Optimization enabled
false
Compiler version
v0.8.18+commit.87f61d96




EVM Version
default




Verified at
2023-08-09T17:59:23.782709Z

Constructor Arguments

000000000000000000000000e18c200a70908c89ffa18c628fe1b83ac0065ea40000000000000000000000003618b6cab13cfc2d2de2224e5a6c5183e99fff85

Arg [0] (address) : 0xe18c200a70908c89ffa18c628fe1b83ac0065ea4
Arg [1] (address) : 0x3618b6cab13cfc2d2de2224e5a6c5183e99fff85

              

Contract source code

// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.10;

contract GovernorAlpha {
    /// @notice The name of this contract
    string public constant name = "Pegasys Governor Alpha";

    /// @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
    function quorumVotes() public pure returns (uint) {
        return 400e18;
    } // 4,000,000 = 4% of PSYS

    /// @notice The number of votes required in order for a voter to become a proposer
    function proposalThreshold() public pure returns (uint) {
        return 10e18;
    } // 1,000,000 = 1% of PSYS

    /// @notice The maximum number of actions that can be included in a proposal
    function proposalMaxOperations() public pure returns (uint) {
        return 10;
    } // 10 actions

    /// @notice The delay before voting on a proposal may take place, once proposed
    function votingDelay() public pure returns (uint) {
        return 1;
    } // 1 block

    /// @notice The duration of voting on a proposal, in blocks
    function votingPeriod() public pure virtual returns (uint) {
        return 96; // back to 1728;
    } // ~3 days in blocks (assuming 150s blocks)

    /// @notice The address of the Pegasys Protocol Timelock
    TimelockInterface public timelock;

    /// @notice The address of the Pegasys governance token
    PsysInterface public psys;

    /// @notice The address of the Governor Guardian
    address public guardian;

    /// @notice The total number of proposals
    uint public proposalCount;

    struct Proposal {
        /// @notice Unique id for looking up a proposal
        uint id;
        /// @notice Creator of the proposal
        address proposer;
        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds
        uint eta;
        /// @notice the ordered list of target addresses for calls to be made
        address[] targets;
        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made
        uint[] values;
        /// @notice The ordered list of function signatures to be called
        string[] signatures;
        /// @notice The ordered list of calldata to be passed to each call
        bytes[] calldatas;
        /// @notice The block at which voting begins: holders must delegate their votes prior to this block
        uint startBlock;
        /// @notice The block at which voting ends: votes must be cast prior to this block
        uint endBlock;
        /// @notice Current number of votes in favor of this proposal
        uint forVotes;
        /// @notice Current number of votes in opposition to this proposal
        uint againstVotes;
        /// @notice Flag marking whether the proposal has been canceled
        bool canceled;
        /// @notice Flag marking whether the proposal has been executed
        bool executed;
        /// @notice Receipts of ballots for the entire set of voters
        mapping(address => Receipt) receipts;
    }

    /// @notice Ballot receipt record for a voter
    struct Receipt {
        /// @notice Whether or not a vote has been cast
        bool hasVoted;
        /// @notice Whether or not the voter supports the proposal
        bool support;
        /// @notice The number of votes the voter had, which were cast
        uint96 votes;
    }

    /// @notice Possible states that a proposal may be in
    enum ProposalState {
        Pending,
        Active,
        Canceled,
        Defeated,
        Succeeded,
        Queued,
        Expired,
        Executed
    }

    /// @notice The official record of all proposals ever proposed
    mapping(uint => Proposal) public proposals;

    /// @notice The latest proposal for each proposer
    mapping(address => uint) public latestProposalIds;

    /// @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,bool support)");

    /// @notice An event emitted when a new proposal is created
    event ProposalCreated(
        uint id,
        address proposer,
        address[] targets,
        uint[] values,
        string[] signatures,
        bytes[] calldatas,
        uint startBlock,
        uint endBlock,
        string description
    );

    /// @notice An event emitted when a vote has been cast on a proposal
    event VoteCast(address voter, uint proposalId, bool support, uint votes);

    /// @notice An event emitted when a proposal has been canceled
    event ProposalCanceled(uint id);

    /// @notice An event emitted when a proposal has been queued in the Timelock
    event ProposalQueued(uint id, uint eta);

    /// @notice An event emitted when a proposal has been executed in the Timelock
    event ProposalExecuted(uint id);

    constructor(
        address psys_,
        address guardian_
    ) {
        timelock = TimelockInterface(0x432EeB57e19b146fE6bff7E672a0BA47712F3e66);
        psys = PsysInterface(psys_);
        guardian = guardian_;
    }

    function propose(
        address[] memory targets,
        uint[] memory values,
        string[] memory signatures,
        bytes[] memory calldatas,
        string memory description
    ) public returns (uint) {
        require(
            psys.getPriorVotes(msg.sender, sub256(block.number, 1)) >
                proposalThreshold(),
            "GovernorAlpha::propose: proposer votes below proposal threshold"
        );
        require(
            targets.length == values.length &&
                targets.length == signatures.length &&
                targets.length == calldatas.length,
            "GovernorAlpha::propose: proposal function information arity mismatch"
        );
        require(
            targets.length != 0,
            "GovernorAlpha::propose: must provide actions"
        );
        require(
            targets.length <= proposalMaxOperations(),
            "GovernorAlpha::propose: too many actions"
        );

        uint latestProposalId = latestProposalIds[msg.sender];
        if (latestProposalId != 0) {
            ProposalState proposersLatestProposalState = state(
                latestProposalId
            );
            
        }

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

        proposalCount++;
        uint proposalId = proposalCount;
        Proposal storage newProposal = proposals[proposalId];
        // This should never happen but add a check in case.
        require(
            newProposal.id == 0,
            "GovernorAlpha::propose: ProposalID collsion"
        );
        newProposal.id = proposalId;
        newProposal.proposer = msg.sender;
        newProposal.eta = 0;
        newProposal.targets = targets;
        newProposal.values = values;
        newProposal.signatures = signatures;
        newProposal.calldatas = calldatas;
        newProposal.startBlock = startBlock;
        newProposal.endBlock = endBlock;
        newProposal.forVotes = 0;
        newProposal.againstVotes = 0;
        newProposal.canceled = false;
        newProposal.executed = false;

        latestProposalIds[newProposal.proposer] = newProposal.id;

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

    function queue(uint proposalId) public {
        require(
            state(proposalId) == ProposalState.Succeeded,
            "GovernorAlpha::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++) {
            _queueOrRevert(
                proposal.targets[i],
                proposal.values[i],
                proposal.signatures[i],
                proposal.calldatas[i],
                eta
            );
        }
        proposal.eta = eta;
        emit ProposalQueued(proposalId, eta);
    }

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

    function execute(uint proposalId) public payable {
        require(
            state(proposalId) == ProposalState.Queued,
            "GovernorAlpha::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);
    }

    function cancel(uint proposalId) public {
        ProposalState state = state(proposalId);
        

        Proposal storage proposal = proposals[proposalId];

        proposal.canceled = true;

        emit ProposalCanceled(proposalId);
    }

    function getActions(uint proposalId)
        public
        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);
    }

    function getReceipt(uint proposalId, address voter)
        public
        view
        returns (Receipt memory)
    {
        return proposals[proposalId].receipts[voter];
    }

    function state(uint proposalId) public view returns (ProposalState) {
        require(
            proposalCount >= proposalId && proposalId > 0,
            "GovernorAlpha::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;
        }
    }

    function castVote(uint proposalId, bool support) public {
        return _castVote(msg.sender, proposalId, support);
    }

    function castVoteBySig(
        uint proposalId,
        bool support,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                getChainId(),
                address(this)
            )
        );
        bytes32 structHash = keccak256(
            abi.encode(BALLOT_TYPEHASH, proposalId, support)
        );
        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainSeparator, structHash)
        );
        address signatory = ecrecover(digest, v, r, s);
        require(
            signatory != address(0),
            "GovernorAlpha::castVoteBySig: invalid signature"
        );
        return _castVote(signatory, proposalId, support);
    }

    function _castVote(
        address voter,
        uint proposalId,
        bool support
    ) internal {
        require(
            state(proposalId) == ProposalState.Active,
            "GovernorAlpha::_castVote: voting is closed"
        );
        Proposal storage proposal = proposals[proposalId];
        Receipt storage receipt = proposal.receipts[voter];
        require(
            receipt.hasVoted == false,
            "GovernorAlpha::_castVote: voter already voted"
        );
        uint96 votes = psys.getPriorVotes(voter, proposal.startBlock);

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

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

        emit VoteCast(voter, proposalId, support, votes);
    }

    function __acceptAdmin() public {
        require(
            msg.sender == guardian,
            "GovernorAlpha::__acceptAdmin: sender must be gov guardian"
        );
        timelock.acceptAdmin();
    }

    function __abdicate() public {
        require(
            msg.sender == guardian,
            "GovernorAlpha::__abdicate: sender must be gov guardian"
        );
        guardian = address(0);
    }

    function __queueSetTimelockPendingAdmin(address newPendingAdmin, uint eta)
        public
    {
        require(
            msg.sender == guardian,
            "GovernorAlpha::__queueSetTimelockPendingAdmin: sender must be gov guardian"
        );
        timelock.queueTransaction(
            address(timelock),
            0,
            "setPendingAdmin(address)",
            abi.encode(newPendingAdmin),
            eta
        );
    }

    function __executeSetTimelockPendingAdmin(address newPendingAdmin, uint eta)
        public
    {
        require(
            msg.sender == guardian,
            "GovernorAlpha::__executeSetTimelockPendingAdmin: sender must be gov guardian"
        );
        timelock.executeTransaction(
            address(timelock),
            0,
            "setPendingAdmin(address)",
            abi.encode(newPendingAdmin),
            eta
        );
    }

    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 getChainId() internal view returns (uint) {
        uint chainId;
        assembly {
            chainId := chainid()
        }
        return chainId;
    }
}

interface TimelockInterface {
    function delay() external view returns (uint);

    function GRACE_PERIOD() external view returns (uint);

    function acceptAdmin() external;

    function queuedTransactions(bytes32 hash) external view returns (bool);

    function queueTransaction(
        address target,
        uint value,
        string calldata signature,
        bytes calldata data,
        uint eta
    ) external returns (bytes32);

    function cancelTransaction(
        address target,
        uint value,
        string calldata signature,
        bytes calldata data,
        uint eta
    ) external;

    function executeTransaction(
        address target,
        uint value,
        string calldata signature,
        bytes calldata data,
        uint eta
    ) external payable returns (bytes memory);
}

interface PsysInterface {
    function getPriorVotes(address account, uint blockNumber)
        external
        view
        returns (uint96);
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"psys_","internalType":"address"},{"type":"address","name":"guardian_","internalType":"address"}]},{"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":"VoteCast","inputs":[{"type":"address","name":"voter","internalType":"address","indexed":false},{"type":"uint256","name":"proposalId","internalType":"uint256","indexed":false},{"type":"bool","name":"support","internalType":"bool","indexed":false},{"type":"uint256","name":"votes","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"BALLOT_TYPEHASH","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_TYPEHASH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"__abdicate","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"__acceptAdmin","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"__executeSetTimelockPendingAdmin","inputs":[{"type":"address","name":"newPendingAdmin","internalType":"address"},{"type":"uint256","name":"eta","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"__queueSetTimelockPendingAdmin","inputs":[{"type":"address","name":"newPendingAdmin","internalType":"address"},{"type":"uint256","name":"eta","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cancel","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"castVote","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"},{"type":"bool","name":"support","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"castVoteBySig","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"},{"type":"bool","name":"support","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"execute","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","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"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct GovernorAlpha.Receipt","components":[{"type":"bool","name":"hasVoted","internalType":"bool"},{"type":"bool","name":"support","internalType":"bool"},{"type":"uint96","name":"votes","internalType":"uint96"}]}],"name":"getReceipt","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"},{"type":"address","name":"voter","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"guardian","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"latestProposalIds","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"proposalCount","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"proposalMaxOperations","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"proposalThreshold","inputs":[]},{"type":"function","stateMutability":"view","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":"bool","name":"canceled","internalType":"bool"},{"type":"bool","name":"executed","internalType":"bool"}],"name":"proposals","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","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"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract PsysInterface"}],"name":"psys","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"queue","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"quorumVotes","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"enum GovernorAlpha.ProposalState"}],"name":"state","inputs":[{"type":"uint256","name":"proposalId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract TimelockInterface"}],"name":"timelock","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"votingDelay","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"votingPeriod","inputs":[]}]
              

Contract Creation Code

0x60806040523480156200001157600080fd5b50604051620051de380380620051de83398181016040528101906200003791906200017f565b73432eeb57e19b146fe6bff7e672a0ba47712f3e666000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620001c6565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000147826200011a565b9050919050565b62000159816200013a565b81146200016557600080fd5b50565b60008151905062000179816200014e565b92915050565b6000806040838503121562000199576200019862000115565b5b6000620001a98582860162000168565b9250506020620001bc8582860162000168565b9150509250929050565b61500880620001d66000396000f3fe60806040526004361061019c5760003560e01c8063452a9320116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b009146105b1578063deaaa7cc146105da578063e23a9a5214610605578063fe0d94c1146106425761019c565b8063d33219b41461051e578063da35c66414610549578063da95691a146105745761019c565b80637bdbe4d0116100c65780637bdbe4d01461048857806391500671146104b3578063b58131b0146104dc578063b9a61961146105075761019c565b8063452a93201461041d5780634634c61f14610448578063760fbc13146104715761019c565b806321f43e42116101595780633932abb1116101335780633932abb114610361578063393aac271461038c5780633e4f49e6146103b757806340e58ee5146103f45761019c565b806321f43e42146102cd57806324bc1a64146102f6578063328dd982146103215761019c565b8063013cf08b146101a157806302a251a3146101e657806306fdde031461021157806315373e3d1461023c57806317977c611461026557806320606b70146102a2575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906127b3565b61065e565b6040516101dd9998979695949392919061284b565b60405180910390f35b3480156101f257600080fd5b506101fb6106e6565b60405161020891906128d8565b60405180910390f35b34801561021d57600080fd5b506102266106ef565b6040516102339190612983565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906129d1565b610728565b005b34801561027157600080fd5b5061028c60048036038101906102879190612a3d565b610737565b60405161029991906128d8565b60405180910390f35b3480156102ae57600080fd5b506102b761074f565b6040516102c49190612a83565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190612a9e565b610773565b005b34801561030257600080fd5b5061030b6108ef565b60405161031891906128d8565b60405180910390f35b34801561032d57600080fd5b50610348600480360381019061034391906127b3565b610900565b6040516103589493929190612e7d565b60405180910390f35b34801561036d57600080fd5b50610376610bbd565b60405161038391906128d8565b60405180910390f35b34801561039857600080fd5b506103a1610bc6565b6040516103ae9190612f3d565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d991906127b3565b610bec565b6040516103eb9190612fcf565b60405180910390f35b34801561040057600080fd5b5061041b600480360381019061041691906127b3565b610dbf565b005b34801561042957600080fd5b50610432610e3c565b60405161043f9190612fea565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061306a565b610e62565b005b34801561047d57600080fd5b5061048661104a565b005b34801561049457600080fd5b5061049d61111e565b6040516104aa91906128d8565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190612a9e565b611127565b005b3480156104e857600080fd5b506104f161129e565b6040516104fe91906128d8565b60405180910390f35b34801561051357600080fd5b5061051c6112ae565b005b34801561052a57600080fd5b506105336113c0565b6040516105409190613106565b60405180910390f35b34801561055557600080fd5b5061055e6113e4565b60405161056b91906128d8565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190613644565b6113ea565b6040516105a891906128d8565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906127b3565b6118bf565b005b3480156105e657600080fd5b506105ef611c0b565b6040516105fc9190612a83565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061374b565b611c2f565b6040516106399190613803565b60405180910390f35b61065c600480360381019061065791906127b3565b611d11565b005b60046020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600701549080600801549080600901549080600a01549080600b0160009054906101000a900460ff169080600b0160019054906101000a900460ff16905089565b60006060905090565b6040518060400160405280601681526020017f5065676173797320476f7665726e6f7220416c7068610000000000000000000081525081565b610733338383611f82565b5050565b60056020528060005260406000206000915090505481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fa906138b6565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630825f38f60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000856040516020016108739190612fea565b604051602081830303815290604052856040518563ffffffff1660e01b81526004016108a294939291906139a7565b6000604051808303816000875af11580156108c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108ea9190613a76565b505050565b60006815af1d78b58c400000905090565b606080606080600060046000878152602001908152602001600020905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156109ae57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610964575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610a0057602002820191906000526020600020905b8154815260200190600101908083116109ec575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610ad4578382906000526020600020018054610a4790613aee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7390613aee565b8015610ac05780601f10610a9557610100808354040283529160200191610ac0565b820191906000526020600020905b815481529060010190602001808311610aa357829003601f168201915b505050505081526020019060010190610a28565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610ba7578382906000526020600020018054610b1a90613aee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4690613aee565b8015610b935780601f10610b6857610100808354040283529160200191610b93565b820191906000526020600020905b815481529060010190602001808311610b7657829003601f168201915b505050505081526020019060010190610afb565b5050505090509450945094509450509193509193565b60006001905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008160035410158015610c005750600082115b610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690613b91565b60405180910390fd5b600060046000848152602001908152602001600020905080600b0160009054906101000a900460ff1615610c77576002915050610dba565b80600701544311610c8c576000915050610dba565b80600801544311610ca1576001915050610dba565b80600a01548160090154111580610cc25750610cbb6108ef565b8160090154105b15610cd1576003915050610dba565b6000816002015403610ce7576004915050610dba565b80600b0160019054906101000a900460ff1615610d08576007915050610dba565b610da4816002015460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f9190613bc6565b612250565b4210610db4576006915050610dba565b60059150505b919050565b6000610dca82610bec565b90506000600460008481526020019081526020016000209050600181600b0160006101000a81548160ff0219169083151502179055507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610e2f91906128d8565b60405180910390a1505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280601681526020017f5065676173797320476f7665726e6f7220416c7068610000000000000000000081525080519060200120610eca6122ae565b30604051602001610ede9493929190613bf3565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610f2d93929190613c38565b60405160208183030381529060405280519060200120905060008282604051602001610f5a929190613ce7565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610f979493929190613d2d565b6020604051602081039080840390855afa158015610fb9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613de4565b60405180910390fd5b61103f818a8a611f82565b505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190613e76565b60405180910390fd5b6000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600a905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90613f2e565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a66f90160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000856040516020016112279190612fea565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161125694939291906139a7565b6020604051808303816000875af1158015611275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112999190613f63565b505050565b6000678ac7230489e80000905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590614002565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113a657600080fd5b505af11580156113ba573d6000803e3d6000fd5b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60006113f461129e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe13361143e4360016122bb565b6040518363ffffffff1660e01b815260040161145b929190614022565b602060405180830381865afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190614077565b6bffffffffffffffffffffffff16116114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190614116565b60405180910390fd5b845186511480156114fc575083518651145b8015611509575082518651145b611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906141ce565b60405180910390fd5b600086510361158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390614260565b60405180910390fd5b61159461111e565b865111156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce906142f2565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811461163257600061162e82610bec565b9050505b600061164543611640610bbd565b612250565b9050600061165a826116556106e6565b612250565b90506003600081548092919061166f90614341565b919050555060006003549050600060046000838152602001908152602001600020905060008160000154146116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d0906143fb565b60405180910390fd5b818160000181905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081600201819055508a8160030190805190602001906117479291906124c8565b5089816004019080519060200190611760929190612552565b508881600501908051906020019061177992919061259f565b50878160060190805190602001906117929291906125f8565b5083816007018190555082816008018190555060008160090181905550600081600a0181905550600081600b0160006101000a81548160ff021916908315150217905550600081600b0160016101000a81548160ff0219169083151502179055508060000154600560008360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000154338d8d8d8d8a8a8f6040516118a29998979695949392919061441b565b60405180910390a180600001549550505050505095945050505050565b600460078111156118d3576118d2612f58565b5b6118dc82610bec565b60078111156118ee576118ed612f58565b5b1461192e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192590614563565b60405180910390fd5b600060046000838152602001908152602001600020905060006119df4260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a42b8f86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da9190613bc6565b612250565b905060005b8260030180549050811015611bc357611bb0836003018281548110611a0c57611a0b614583565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018381548110611a4d57611a4c614583565b5b9060005260206000200154856005018481548110611a6e57611a6d614583565b5b906000526020600020018054611a8390613aee565b80601f0160208091040260200160405190810160405280929190818152602001828054611aaf90613aee565b8015611afc5780601f10611ad157610100808354040283529160200191611afc565b820191906000526020600020905b815481529060010190602001808311611adf57829003601f168201915b5050505050866006018581548110611b1757611b16614583565b5b906000526020600020018054611b2c90613aee565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5890613aee565b8015611ba55780601f10611b7a57610100808354040283529160200191611ba5565b820191906000526020600020905b815481529060010190602001808311611b8857829003601f168201915b505050505086612314565b8080611bbb90614341565b9150506119e4565b508082600201819055507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928382604051611bfe9291906145b2565b60405180910390a1505050565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b611c37612651565b60046000848152602001908152602001600020600c0160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905092915050565b60056007811115611d2557611d24612f58565b5b611d2e82610bec565b6007811115611d4057611d3f612f58565b5b14611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614673565b60405180910390fd5b6000600460008381526020019081526020016000209050600181600b0160016101000a81548160ff02191690831515021790555060005b8160030180549050811015611f465760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630825f38f836004018381548110611e1857611e17614583565b5b9060005260206000200154846003018481548110611e3957611e38614583565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856004018581548110611e7a57611e79614583565b5b9060005260206000200154866005018681548110611e9b57611e9a614583565b5b90600052602060002001876006018781548110611ebb57611eba614583565b5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611eea9594939291906147c5565b60006040518083038185885af1158015611f08573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190611f329190613a76565b508080611f3e90614341565b915050611db7565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611f7691906128d8565b60405180910390a15050565b60016007811115611f9657611f95612f58565b5b611f9f83610bec565b6007811115611fb157611fb0612f58565b5b14611ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe890614898565b60405180910390fd5b6000600460008481526020019081526020016000209050600081600c0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600015158160000160009054906101000a900460ff161515146120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c9061492a565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe18785600701546040518363ffffffff1660e01b8152600401612108929190614022565b602060405180830381865afa158015612125573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121499190614077565b9050831561217a5761216d8360090154826bffffffffffffffffffffffff16612250565b836009018190555061219f565b61219683600a0154826bffffffffffffffffffffffff16612250565b83600a01819055505b60018260000160006101000a81548160ff021916908315150217905550838260000160016101000a81548160ff021916908315150217905550808260000160026101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055507f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4686868684604051612240949392919061497b565b60405180910390a1505050505050565b600080828461225f91906149c0565b9050838110156122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90614a40565b60405180910390fd5b8091505092915050565b6000804690508091505090565b600082821115612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f790614aac565b60405180910390fd5b818361230c9190614acc565b905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2b065378686868686604051602001612369959493929190614b00565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161239b9190612a83565b602060405180830381865afa1580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190614b76565b1561241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390614c3b565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a66f90186868686866040518663ffffffff1660e01b815260040161247d959493929190614b00565b6020604051808303816000875af115801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190613f63565b505050505050565b828054828255906000526020600020908101928215612541579160200282015b828111156125405782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906124e8565b5b50905061254e9190612684565b5090565b82805482825590600052602060002090810192821561258e579160200282015b8281111561258d578251825591602001919060010190612572565b5b50905061259b9190612684565b5090565b8280548282559060005260206000209081019282156125e7579160200282015b828111156125e65782518290816125d69190614de8565b50916020019190600101906125bf565b5b5090506125f491906126a1565b5090565b828054828255906000526020600020908101928215612640579160200282015b8281111561263f57825182908161262f9190614f00565b5091602001919060010190612618565b5b50905061264d91906126c5565b5090565b604051806060016040528060001515815260200160001515815260200160006bffffffffffffffffffffffff1681525090565b5b8082111561269d576000816000905550600101612685565b5090565b5b808211156126c157600081816126b891906126e9565b506001016126a2565b5090565b5b808211156126e557600081816126dc9190612729565b506001016126c6565b5090565b5080546126f590613aee565b6000825580601f106127075750612726565b601f0160209004906000526020600020908101906127259190612684565b5b50565b50805461273590613aee565b6000825580601f106127475750612766565b601f0160209004906000526020600020908101906127659190612684565b5b50565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6127908161277d565b811461279b57600080fd5b50565b6000813590506127ad81612787565b92915050565b6000602082840312156127c9576127c8612773565b5b60006127d78482850161279e565b91505092915050565b6127e98161277d565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061281a826127ef565b9050919050565b61282a8161280f565b82525050565b60008115159050919050565b61284581612830565b82525050565b600061012082019050612861600083018c6127e0565b61286e602083018b612821565b61287b604083018a6127e0565b61288860608301896127e0565b61289560808301886127e0565b6128a260a08301876127e0565b6128af60c08301866127e0565b6128bc60e083018561283c565b6128ca61010083018461283c565b9a9950505050505050505050565b60006020820190506128ed60008301846127e0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561292d578082015181840152602081019050612912565b60008484015250505050565b6000601f19601f8301169050919050565b6000612955826128f3565b61295f81856128fe565b935061296f81856020860161290f565b61297881612939565b840191505092915050565b6000602082019050818103600083015261299d818461294a565b905092915050565b6129ae81612830565b81146129b957600080fd5b50565b6000813590506129cb816129a5565b92915050565b600080604083850312156129e8576129e7612773565b5b60006129f68582860161279e565b9250506020612a07858286016129bc565b9150509250929050565b612a1a8161280f565b8114612a2557600080fd5b50565b600081359050612a3781612a11565b92915050565b600060208284031215612a5357612a52612773565b5b6000612a6184828501612a28565b91505092915050565b6000819050919050565b612a7d81612a6a565b82525050565b6000602082019050612a986000830184612a74565b92915050565b60008060408385031215612ab557612ab4612773565b5b6000612ac385828601612a28565b9250506020612ad48582860161279e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b138161280f565b82525050565b6000612b258383612b0a565b60208301905092915050565b6000602082019050919050565b6000612b4982612ade565b612b538185612ae9565b9350612b5e83612afa565b8060005b83811015612b8f578151612b768882612b19565b9750612b8183612b31565b925050600181019050612b62565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612bd18161277d565b82525050565b6000612be38383612bc8565b60208301905092915050565b6000602082019050919050565b6000612c0782612b9c565b612c118185612ba7565b9350612c1c83612bb8565b8060005b83811015612c4d578151612c348882612bd7565b9750612c3f83612bef565b925050600181019050612c20565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000612ca2826128f3565b612cac8185612c86565b9350612cbc81856020860161290f565b612cc581612939565b840191505092915050565b6000612cdc8383612c97565b905092915050565b6000602082019050919050565b6000612cfc82612c5a565b612d068185612c65565b935083602082028501612d1885612c76565b8060005b85811015612d545784840389528151612d358582612cd0565b9450612d4083612ce4565b925060208a01995050600181019050612d1c565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b6000612db982612d92565b612dc38185612d9d565b9350612dd381856020860161290f565b612ddc81612939565b840191505092915050565b6000612df38383612dae565b905092915050565b6000602082019050919050565b6000612e1382612d66565b612e1d8185612d71565b935083602082028501612e2f85612d82565b8060005b85811015612e6b5784840389528151612e4c8582612de7565b9450612e5783612dfb565b925060208a01995050600181019050612e33565b50829750879550505050505092915050565b60006080820190508181036000830152612e978187612b3e565b90508181036020830152612eab8186612bfc565b90508181036040830152612ebf8185612cf1565b90508181036060830152612ed38184612e08565b905095945050505050565b6000819050919050565b6000612f03612efe612ef9846127ef565b612ede565b6127ef565b9050919050565b6000612f1582612ee8565b9050919050565b6000612f2782612f0a565b9050919050565b612f3781612f1c565b82525050565b6000602082019050612f526000830184612f2e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60088110612f9857612f97612f58565b5b50565b6000819050612fa982612f87565b919050565b6000612fb982612f9b565b9050919050565b612fc981612fae565b82525050565b6000602082019050612fe46000830184612fc0565b92915050565b6000602082019050612fff6000830184612821565b92915050565b600060ff82169050919050565b61301b81613005565b811461302657600080fd5b50565b60008135905061303881613012565b92915050565b61304781612a6a565b811461305257600080fd5b50565b6000813590506130648161303e565b92915050565b600080600080600060a0868803121561308657613085612773565b5b60006130948882890161279e565b95505060206130a5888289016129bc565b94505060406130b688828901613029565b93505060606130c788828901613055565b92505060806130d888828901613055565b9150509295509295909350565b60006130f082612f0a565b9050919050565b613100816130e5565b82525050565b600060208201905061311b60008301846130f7565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61315e82612939565b810181811067ffffffffffffffff8211171561317d5761317c613126565b5b80604052505050565b6000613190612769565b905061319c8282613155565b919050565b600067ffffffffffffffff8211156131bc576131bb613126565b5b602082029050602081019050919050565b600080fd5b60006131e56131e0846131a1565b613186565b90508083825260208201905060208402830185811115613208576132076131cd565b5b835b81811015613231578061321d8882612a28565b84526020840193505060208101905061320a565b5050509392505050565b600082601f8301126132505761324f613121565b5b81356132608482602086016131d2565b91505092915050565b600067ffffffffffffffff82111561328457613283613126565b5b602082029050602081019050919050565b60006132a86132a384613269565b613186565b905080838252602082019050602084028301858111156132cb576132ca6131cd565b5b835b818110156132f457806132e0888261279e565b8452602084019350506020810190506132cd565b5050509392505050565b600082601f83011261331357613312613121565b5b8135613323848260208601613295565b91505092915050565b600067ffffffffffffffff82111561334757613346613126565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff82111561337857613377613126565b5b61338182612939565b9050602081019050919050565b82818337600083830152505050565b60006133b06133ab8461335d565b613186565b9050828152602081018484840111156133cc576133cb613358565b5b6133d784828561338e565b509392505050565b600082601f8301126133f4576133f3613121565b5b813561340484826020860161339d565b91505092915050565b600061342061341b8461332c565b613186565b90508083825260208201905060208402830185811115613443576134426131cd565b5b835b8181101561348a57803567ffffffffffffffff81111561346857613467613121565b5b80860161347589826133df565b85526020850194505050602081019050613445565b5050509392505050565b600082601f8301126134a9576134a8613121565b5b81356134b984826020860161340d565b91505092915050565b600067ffffffffffffffff8211156134dd576134dc613126565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561350957613508613126565b5b61351282612939565b9050602081019050919050565b600061353261352d846134ee565b613186565b90508281526020810184848401111561354e5761354d613358565b5b61355984828561338e565b509392505050565b600082601f83011261357657613575613121565b5b813561358684826020860161351f565b91505092915050565b60006135a261359d846134c2565b613186565b905080838252602082019050602084028301858111156135c5576135c46131cd565b5b835b8181101561360c57803567ffffffffffffffff8111156135ea576135e9613121565b5b8086016135f78982613561565b855260208501945050506020810190506135c7565b5050509392505050565b600082601f83011261362b5761362a613121565b5b813561363b84826020860161358f565b91505092915050565b600080600080600060a086880312156136605761365f612773565b5b600086013567ffffffffffffffff81111561367e5761367d612778565b5b61368a8882890161323b565b955050602086013567ffffffffffffffff8111156136ab576136aa612778565b5b6136b7888289016132fe565b945050604086013567ffffffffffffffff8111156136d8576136d7612778565b5b6136e488828901613494565b935050606086013567ffffffffffffffff81111561370557613704612778565b5b61371188828901613616565b925050608086013567ffffffffffffffff81111561373257613731612778565b5b61373e888289016133df565b9150509295509295909350565b6000806040838503121561376257613761612773565b5b60006137708582860161279e565b925050602061378185828601612a28565b9150509250929050565b61379481612830565b82525050565b60006bffffffffffffffffffffffff82169050919050565b6137bb8161379a565b82525050565b6060820160008201516137d7600085018261378b565b5060208201516137ea602085018261378b565b5060408201516137fd60408501826137b2565b50505050565b600060608201905061381860008301846137c1565b92915050565b7f476f7665726e6f72416c7068613a3a5f5f6578656375746553657454696d656c60008201527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060208201527f676f7620677561726469616e0000000000000000000000000000000000000000604082015250565b60006138a0604c836128fe565b91506138ab8261381e565b606082019050919050565b600060208201905081810360008301526138cf81613893565b9050919050565b6000819050919050565b60006138fb6138f66138f1846138d6565b612ede565b61277d565b9050919050565b61390b816138e0565b82525050565b7f73657450656e64696e6741646d696e2861646472657373290000000000000000600082015250565b60006139476018836128fe565b915061395282613911565b602082019050919050565b600082825260208201905092915050565b600061397982612d92565b613983818561395d565b935061399381856020860161290f565b61399c81612939565b840191505092915050565b600060a0820190506139bc6000830187612821565b6139c96020830186613902565b81810360408301526139da8161393a565b905081810360608301526139ee818561396e565b90506139fd60808301846127e0565b95945050505050565b6000613a19613a14846134ee565b613186565b905082815260208101848484011115613a3557613a34613358565b5b613a4084828561290f565b509392505050565b600082601f830112613a5d57613a5c613121565b5b8151613a6d848260208601613a06565b91505092915050565b600060208284031215613a8c57613a8b612773565b5b600082015167ffffffffffffffff811115613aaa57613aa9612778565b5b613ab684828501613a48565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0657607f821691505b602082108103613b1957613b18613abf565b5b50919050565b7f476f7665726e6f72416c7068613a3a73746174653a20696e76616c696420707260008201527f6f706f73616c2069640000000000000000000000000000000000000000000000602082015250565b6000613b7b6029836128fe565b9150613b8682613b1f565b604082019050919050565b60006020820190508181036000830152613baa81613b6e565b9050919050565b600081519050613bc081612787565b92915050565b600060208284031215613bdc57613bdb612773565b5b6000613bea84828501613bb1565b91505092915050565b6000608082019050613c086000830187612a74565b613c156020830186612a74565b613c2260408301856127e0565b613c2f6060830184612821565b95945050505050565b6000606082019050613c4d6000830186612a74565b613c5a60208301856127e0565b613c67604083018461283c565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000613cb0600283613c6f565b9150613cbb82613c7a565b600282019050919050565b6000819050919050565b613ce1613cdc82612a6a565b613cc6565b82525050565b6000613cf282613ca3565b9150613cfe8285613cd0565b602082019150613d0e8284613cd0565b6020820191508190509392505050565b613d2781613005565b82525050565b6000608082019050613d426000830187612a74565b613d4f6020830186613d1e565b613d5c6040830185612a74565b613d696060830184612a74565b95945050505050565b7f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e60008201527f76616c6964207369676e61747572650000000000000000000000000000000000602082015250565b6000613dce602f836128fe565b9150613dd982613d72565b604082019050919050565b60006020820190508181036000830152613dfd81613dc1565b9050919050565b7f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e646560008201527f72206d75737420626520676f7620677561726469616e00000000000000000000602082015250565b6000613e606036836128fe565b9150613e6b82613e04565b604082019050919050565b60006020820190508181036000830152613e8f81613e53565b9050919050565b7f476f7665726e6f72416c7068613a3a5f5f717565756553657454696d656c6f6360008201527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f60208201527f7620677561726469616e00000000000000000000000000000000000000000000604082015250565b6000613f18604a836128fe565b9150613f2382613e96565b606082019050919050565b60006020820190508181036000830152613f4781613f0b565b9050919050565b600081519050613f5d8161303e565b92915050565b600060208284031215613f7957613f78612773565b5b6000613f8784828501613f4e565b91505092915050565b7f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736560008201527f6e646572206d75737420626520676f7620677561726469616e00000000000000602082015250565b6000613fec6039836128fe565b9150613ff782613f90565b604082019050919050565b6000602082019050818103600083015261401b81613fdf565b9050919050565b60006040820190506140376000830185612821565b61404460208301846127e0565b9392505050565b6140548161379a565b811461405f57600080fd5b50565b6000815190506140718161404b565b92915050565b60006020828403121561408d5761408c612773565b5b600061409b84828501614062565b91505092915050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260008201527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015250565b6000614100603f836128fe565b915061410b826140a4565b604082019050919050565b6000602082019050818103600083015261412f816140f3565b9050919050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60008201527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d60208201527f6174636800000000000000000000000000000000000000000000000000000000604082015250565b60006141b86044836128fe565b91506141c382614136565b606082019050919050565b600060208201905081810360008301526141e7816141ab565b9050919050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60008201527f7669646520616374696f6e730000000000000000000000000000000000000000602082015250565b600061424a602c836128fe565b9150614255826141ee565b604082019050919050565b600060208201905081810360008301526142798161423d565b9050919050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960008201527f20616374696f6e73000000000000000000000000000000000000000000000000602082015250565b60006142dc6028836128fe565b91506142e782614280565b604082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061434c8261277d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437e5761437d614312565b5b600182019050919050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2050726f706f73616c60008201527f494420636f6c6c73696f6e000000000000000000000000000000000000000000602082015250565b60006143e5602b836128fe565b91506143f082614389565b604082019050919050565b60006020820190508181036000830152614414816143d8565b9050919050565b600061012082019050614431600083018c6127e0565b61443e602083018b612821565b8181036040830152614450818a612b3e565b905081810360608301526144648189612bfc565b905081810360808301526144788188612cf1565b905081810360a083015261448c8187612e08565b905061449b60c08301866127e0565b6144a860e08301856127e0565b8181036101008301526144bb818461294a565b90509a9950505050505050505050565b7f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360008201527f616e206f6e6c792062652071756575656420696620697420697320737563636560208201527f6564656400000000000000000000000000000000000000000000000000000000604082015250565b600061454d6044836128fe565b9150614558826144cb565b606082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506145c760008301856127e0565b6145d460208301846127e0565b9392505050565b7f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60008201527f2063616e206f6e6c79206265206578656375746564206966206974206973207160208201527f7565756564000000000000000000000000000000000000000000000000000000604082015250565b600061465d6045836128fe565b9150614668826145db565b606082019050919050565b6000602082019050818103600083015261468c81614650565b9050919050565b60008190508160005260206000209050919050565b600081546146b581613aee565b6146bf81866128fe565b945060018216600081146146da57600181146146f057614723565b60ff198316865281151560200286019350614723565b6146f985614693565b60005b8381101561471b578154818901526001820191506020810190506146fc565b808801955050505b50505092915050565b60008190508160005260206000209050919050565b6000815461474e81613aee565b614758818661395d565b945060018216600081146147735760018114614789576147bc565b60ff1983168652811515602002860193506147bc565b6147928561472c565b60005b838110156147b457815481890152600182019150602081019050614795565b808801955050505b50505092915050565b600060a0820190506147da6000830188612821565b6147e760208301876127e0565b81810360408301526147f981866146a8565b9050818103606083015261480d8185614741565b905061481c60808301846127e0565b9695505050505050565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e6760008201527f20697320636c6f73656400000000000000000000000000000000000000000000602082015250565b6000614882602a836128fe565b915061488d82614826565b604082019050919050565b600060208201905081810360008301526148b181614875565b9050919050565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060008201527f616c726561647920766f74656400000000000000000000000000000000000000602082015250565b6000614914602d836128fe565b915061491f826148b8565b604082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b600061496561496061495b8461379a565b612ede565b61277d565b9050919050565b6149758161494a565b82525050565b60006080820190506149906000830187612821565b61499d60208301866127e0565b6149aa604083018561283c565b6149b7606083018461496c565b95945050505050565b60006149cb8261277d565b91506149d68361277d565b92508282019050808211156149ee576149ed614312565b5b92915050565b7f6164646974696f6e206f766572666c6f77000000000000000000000000000000600082015250565b6000614a2a6011836128fe565b9150614a35826149f4565b602082019050919050565b60006020820190508181036000830152614a5981614a1d565b9050919050565b7f7375627472616374696f6e20756e646572666c6f770000000000000000000000600082015250565b6000614a966015836128fe565b9150614aa182614a60565b602082019050919050565b60006020820190508181036000830152614ac581614a89565b9050919050565b6000614ad78261277d565b9150614ae28361277d565b9250828203905081811115614afa57614af9614312565b5b92915050565b600060a082019050614b156000830188612821565b614b2260208301876127e0565b8181036040830152614b34818661294a565b90508181036060830152614b48818561396e565b9050614b5760808301846127e0565b9695505050505050565b600081519050614b70816129a5565b92915050565b600060208284031215614b8c57614b8b612773565b5b6000614b9a84828501614b61565b91505092915050565b7f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060008201527f726f706f73616c20616374696f6e20616c72656164792071756575656420617460208201527f2065746100000000000000000000000000000000000000000000000000000000604082015250565b6000614c256044836128fe565b9150614c3082614ba3565b606082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ca87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614c6b565b614cb28683614c6b565b95508019841693508086168417925050509392505050565b6000614ce5614ce0614cdb8461277d565b612ede565b61277d565b9050919050565b6000819050919050565b614cff83614cca565b614d13614d0b82614cec565b848454614c78565b825550505050565b600090565b614d28614d1b565b614d33818484614cf6565b505050565b5b81811015614d5757614d4c600082614d20565b600181019050614d39565b5050565b601f821115614d9c57614d6d81614693565b614d7684614c5b565b81016020851015614d85578190505b614d99614d9185614c5b565b830182614d38565b50505b505050565b600082821c905092915050565b6000614dbf60001984600802614da1565b1980831691505092915050565b6000614dd88383614dae565b9150826002028217905092915050565b614df1826128f3565b67ffffffffffffffff811115614e0a57614e09613126565b5b614e148254613aee565b614e1f828285614d5b565b600060209050601f831160018114614e525760008415614e40578287015190505b614e4a8582614dcc565b865550614eb2565b601f198416614e6086614693565b60005b82811015614e8857848901518255600182019150602085019450602081019050614e63565b86831015614ea55784890151614ea1601f891682614dae565b8355505b6001600288020188555050505b505050505050565b601f821115614efb57614ecc8161472c565b614ed584614c5b565b81016020851015614ee4578190505b614ef8614ef085614c5b565b830182614d38565b50505b505050565b614f0982612d92565b67ffffffffffffffff811115614f2257614f21613126565b5b614f2c8254613aee565b614f37828285614eba565b600060209050601f831160018114614f6a5760008415614f58578287015190505b614f628582614dcc565b865550614fca565b601f198416614f788661472c565b60005b82811015614fa057848901518255600182019150602085019450602081019050614f7b565b86831015614fbd5784890151614fb9601f891682614dae565b8355505b6001600288020188555050505b50505050505056fea264697066735822122060e6d318798bfaf63acbc56e9788b1e0bfef404eb7adaf705254ee25fd4fedb364736f6c63430008120033000000000000000000000000e18c200a70908c89ffa18c628fe1b83ac0065ea40000000000000000000000003618b6cab13cfc2d2de2224e5a6c5183e99fff85

Deployed ByteCode

0x60806040526004361061019c5760003560e01c8063452a9320116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b009146105b1578063deaaa7cc146105da578063e23a9a5214610605578063fe0d94c1146106425761019c565b8063d33219b41461051e578063da35c66414610549578063da95691a146105745761019c565b80637bdbe4d0116100c65780637bdbe4d01461048857806391500671146104b3578063b58131b0146104dc578063b9a61961146105075761019c565b8063452a93201461041d5780634634c61f14610448578063760fbc13146104715761019c565b806321f43e42116101595780633932abb1116101335780633932abb114610361578063393aac271461038c5780633e4f49e6146103b757806340e58ee5146103f45761019c565b806321f43e42146102cd57806324bc1a64146102f6578063328dd982146103215761019c565b8063013cf08b146101a157806302a251a3146101e657806306fdde031461021157806315373e3d1461023c57806317977c611461026557806320606b70146102a2575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c391906127b3565b61065e565b6040516101dd9998979695949392919061284b565b60405180910390f35b3480156101f257600080fd5b506101fb6106e6565b60405161020891906128d8565b60405180910390f35b34801561021d57600080fd5b506102266106ef565b6040516102339190612983565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906129d1565b610728565b005b34801561027157600080fd5b5061028c60048036038101906102879190612a3d565b610737565b60405161029991906128d8565b60405180910390f35b3480156102ae57600080fd5b506102b761074f565b6040516102c49190612a83565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190612a9e565b610773565b005b34801561030257600080fd5b5061030b6108ef565b60405161031891906128d8565b60405180910390f35b34801561032d57600080fd5b50610348600480360381019061034391906127b3565b610900565b6040516103589493929190612e7d565b60405180910390f35b34801561036d57600080fd5b50610376610bbd565b60405161038391906128d8565b60405180910390f35b34801561039857600080fd5b506103a1610bc6565b6040516103ae9190612f3d565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d991906127b3565b610bec565b6040516103eb9190612fcf565b60405180910390f35b34801561040057600080fd5b5061041b600480360381019061041691906127b3565b610dbf565b005b34801561042957600080fd5b50610432610e3c565b60405161043f9190612fea565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061306a565b610e62565b005b34801561047d57600080fd5b5061048661104a565b005b34801561049457600080fd5b5061049d61111e565b6040516104aa91906128d8565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190612a9e565b611127565b005b3480156104e857600080fd5b506104f161129e565b6040516104fe91906128d8565b60405180910390f35b34801561051357600080fd5b5061051c6112ae565b005b34801561052a57600080fd5b506105336113c0565b6040516105409190613106565b60405180910390f35b34801561055557600080fd5b5061055e6113e4565b60405161056b91906128d8565b60405180910390f35b34801561058057600080fd5b5061059b60048036038101906105969190613644565b6113ea565b6040516105a891906128d8565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d391906127b3565b6118bf565b005b3480156105e657600080fd5b506105ef611c0b565b6040516105fc9190612a83565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061374b565b611c2f565b6040516106399190613803565b60405180910390f35b61065c600480360381019061065791906127b3565b611d11565b005b60046020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600701549080600801549080600901549080600a01549080600b0160009054906101000a900460ff169080600b0160019054906101000a900460ff16905089565b60006060905090565b6040518060400160405280601681526020017f5065676173797320476f7665726e6f7220416c7068610000000000000000000081525081565b610733338383611f82565b5050565b60056020528060005260406000206000915090505481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fa906138b6565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630825f38f60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000856040516020016108739190612fea565b604051602081830303815290604052856040518563ffffffff1660e01b81526004016108a294939291906139a7565b6000604051808303816000875af11580156108c1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906108ea9190613a76565b505050565b60006815af1d78b58c400000905090565b606080606080600060046000878152602001908152602001600020905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156109ae57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610964575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610a0057602002820191906000526020600020905b8154815260200190600101908083116109ec575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610ad4578382906000526020600020018054610a4790613aee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7390613aee565b8015610ac05780601f10610a9557610100808354040283529160200191610ac0565b820191906000526020600020905b815481529060010190602001808311610aa357829003601f168201915b505050505081526020019060010190610a28565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610ba7578382906000526020600020018054610b1a90613aee565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4690613aee565b8015610b935780601f10610b6857610100808354040283529160200191610b93565b820191906000526020600020905b815481529060010190602001808311610b7657829003601f168201915b505050505081526020019060010190610afb565b5050505090509450945094509450509193509193565b60006001905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008160035410158015610c005750600082115b610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690613b91565b60405180910390fd5b600060046000848152602001908152602001600020905080600b0160009054906101000a900460ff1615610c77576002915050610dba565b80600701544311610c8c576000915050610dba565b80600801544311610ca1576001915050610dba565b80600a01548160090154111580610cc25750610cbb6108ef565b8160090154105b15610cd1576003915050610dba565b6000816002015403610ce7576004915050610dba565b80600b0160019054906101000a900460ff1615610d08576007915050610dba565b610da4816002015460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f9190613bc6565b612250565b4210610db4576006915050610dba565b60059150505b919050565b6000610dca82610bec565b90506000600460008481526020019081526020016000209050600181600b0160006101000a81548160ff0219169083151502179055507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610e2f91906128d8565b60405180910390a1505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280601681526020017f5065676173797320476f7665726e6f7220416c7068610000000000000000000081525080519060200120610eca6122ae565b30604051602001610ede9493929190613bf3565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610f2d93929190613c38565b60405160208183030381529060405280519060200120905060008282604051602001610f5a929190613ce7565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610f979493929190613d2d565b6020604051602081039080840390855afa158015610fb9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613de4565b60405180910390fd5b61103f818a8a611f82565b505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190613e76565b60405180910390fd5b6000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600a905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90613f2e565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a66f90160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000856040516020016112279190612fea565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161125694939291906139a7565b6020604051808303816000875af1158015611275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112999190613f63565b505050565b6000678ac7230489e80000905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461133e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133590614002565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113a657600080fd5b505af11580156113ba573d6000803e3d6000fd5b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60006113f461129e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe13361143e4360016122bb565b6040518363ffffffff1660e01b815260040161145b929190614022565b602060405180830381865afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190614077565b6bffffffffffffffffffffffff16116114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190614116565b60405180910390fd5b845186511480156114fc575083518651145b8015611509575082518651145b611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906141ce565b60405180910390fd5b600086510361158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390614260565b60405180910390fd5b61159461111e565b865111156115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce906142f2565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811461163257600061162e82610bec565b9050505b600061164543611640610bbd565b612250565b9050600061165a826116556106e6565b612250565b90506003600081548092919061166f90614341565b919050555060006003549050600060046000838152602001908152602001600020905060008160000154146116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d0906143fb565b60405180910390fd5b818160000181905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600081600201819055508a8160030190805190602001906117479291906124c8565b5089816004019080519060200190611760929190612552565b508881600501908051906020019061177992919061259f565b50878160060190805190602001906117929291906125f8565b5083816007018190555082816008018190555060008160090181905550600081600a0181905550600081600b0160006101000a81548160ff021916908315150217905550600081600b0160016101000a81548160ff0219169083151502179055508060000154600560008360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000154338d8d8d8d8a8a8f6040516118a29998979695949392919061441b565b60405180910390a180600001549550505050505095945050505050565b600460078111156118d3576118d2612f58565b5b6118dc82610bec565b60078111156118ee576118ed612f58565b5b1461192e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192590614563565b60405180910390fd5b600060046000838152602001908152602001600020905060006119df4260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a42b8f86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da9190613bc6565b612250565b905060005b8260030180549050811015611bc357611bb0836003018281548110611a0c57611a0b614583565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018381548110611a4d57611a4c614583565b5b9060005260206000200154856005018481548110611a6e57611a6d614583565b5b906000526020600020018054611a8390613aee565b80601f0160208091040260200160405190810160405280929190818152602001828054611aaf90613aee565b8015611afc5780601f10611ad157610100808354040283529160200191611afc565b820191906000526020600020905b815481529060010190602001808311611adf57829003601f168201915b5050505050866006018581548110611b1757611b16614583565b5b906000526020600020018054611b2c90613aee565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5890613aee565b8015611ba55780601f10611b7a57610100808354040283529160200191611ba5565b820191906000526020600020905b815481529060010190602001808311611b8857829003601f168201915b505050505086612314565b8080611bbb90614341565b9150506119e4565b508082600201819055507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928382604051611bfe9291906145b2565b60405180910390a1505050565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b611c37612651565b60046000848152602001908152602001600020600c0160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905092915050565b60056007811115611d2557611d24612f58565b5b611d2e82610bec565b6007811115611d4057611d3f612f58565b5b14611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614673565b60405180910390fd5b6000600460008381526020019081526020016000209050600181600b0160016101000a81548160ff02191690831515021790555060005b8160030180549050811015611f465760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630825f38f836004018381548110611e1857611e17614583565b5b9060005260206000200154846003018481548110611e3957611e38614583565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856004018581548110611e7a57611e79614583565b5b9060005260206000200154866005018681548110611e9b57611e9a614583565b5b90600052602060002001876006018781548110611ebb57611eba614583565b5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611eea9594939291906147c5565b60006040518083038185885af1158015611f08573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190611f329190613a76565b508080611f3e90614341565b915050611db7565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611f7691906128d8565b60405180910390a15050565b60016007811115611f9657611f95612f58565b5b611f9f83610bec565b6007811115611fb157611fb0612f58565b5b14611ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe890614898565b60405180910390fd5b6000600460008481526020019081526020016000209050600081600c0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600015158160000160009054906101000a900460ff161515146120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c9061492a565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe18785600701546040518363ffffffff1660e01b8152600401612108929190614022565b602060405180830381865afa158015612125573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121499190614077565b9050831561217a5761216d8360090154826bffffffffffffffffffffffff16612250565b836009018190555061219f565b61219683600a0154826bffffffffffffffffffffffff16612250565b83600a01819055505b60018260000160006101000a81548160ff021916908315150217905550838260000160016101000a81548160ff021916908315150217905550808260000160026101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055507f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4686868684604051612240949392919061497b565b60405180910390a1505050505050565b600080828461225f91906149c0565b9050838110156122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90614a40565b60405180910390fd5b8091505092915050565b6000804690508091505090565b600082821115612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f790614aac565b60405180910390fd5b818361230c9190614acc565b905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2b065378686868686604051602001612369959493929190614b00565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161239b9190612a83565b602060405180830381865afa1580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190614b76565b1561241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390614c3b565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a66f90186868686866040518663ffffffff1660e01b815260040161247d959493929190614b00565b6020604051808303816000875af115801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190613f63565b505050505050565b828054828255906000526020600020908101928215612541579160200282015b828111156125405782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906124e8565b5b50905061254e9190612684565b5090565b82805482825590600052602060002090810192821561258e579160200282015b8281111561258d578251825591602001919060010190612572565b5b50905061259b9190612684565b5090565b8280548282559060005260206000209081019282156125e7579160200282015b828111156125e65782518290816125d69190614de8565b50916020019190600101906125bf565b5b5090506125f491906126a1565b5090565b828054828255906000526020600020908101928215612640579160200282015b8281111561263f57825182908161262f9190614f00565b5091602001919060010190612618565b5b50905061264d91906126c5565b5090565b604051806060016040528060001515815260200160001515815260200160006bffffffffffffffffffffffff1681525090565b5b8082111561269d576000816000905550600101612685565b5090565b5b808211156126c157600081816126b891906126e9565b506001016126a2565b5090565b5b808211156126e557600081816126dc9190612729565b506001016126c6565b5090565b5080546126f590613aee565b6000825580601f106127075750612726565b601f0160209004906000526020600020908101906127259190612684565b5b50565b50805461273590613aee565b6000825580601f106127475750612766565b601f0160209004906000526020600020908101906127659190612684565b5b50565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6127908161277d565b811461279b57600080fd5b50565b6000813590506127ad81612787565b92915050565b6000602082840312156127c9576127c8612773565b5b60006127d78482850161279e565b91505092915050565b6127e98161277d565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061281a826127ef565b9050919050565b61282a8161280f565b82525050565b60008115159050919050565b61284581612830565b82525050565b600061012082019050612861600083018c6127e0565b61286e602083018b612821565b61287b604083018a6127e0565b61288860608301896127e0565b61289560808301886127e0565b6128a260a08301876127e0565b6128af60c08301866127e0565b6128bc60e083018561283c565b6128ca61010083018461283c565b9a9950505050505050505050565b60006020820190506128ed60008301846127e0565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561292d578082015181840152602081019050612912565b60008484015250505050565b6000601f19601f8301169050919050565b6000612955826128f3565b61295f81856128fe565b935061296f81856020860161290f565b61297881612939565b840191505092915050565b6000602082019050818103600083015261299d818461294a565b905092915050565b6129ae81612830565b81146129b957600080fd5b50565b6000813590506129cb816129a5565b92915050565b600080604083850312156129e8576129e7612773565b5b60006129f68582860161279e565b9250506020612a07858286016129bc565b9150509250929050565b612a1a8161280f565b8114612a2557600080fd5b50565b600081359050612a3781612a11565b92915050565b600060208284031215612a5357612a52612773565b5b6000612a6184828501612a28565b91505092915050565b6000819050919050565b612a7d81612a6a565b82525050565b6000602082019050612a986000830184612a74565b92915050565b60008060408385031215612ab557612ab4612773565b5b6000612ac385828601612a28565b9250506020612ad48582860161279e565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b138161280f565b82525050565b6000612b258383612b0a565b60208301905092915050565b6000602082019050919050565b6000612b4982612ade565b612b538185612ae9565b9350612b5e83612afa565b8060005b83811015612b8f578151612b768882612b19565b9750612b8183612b31565b925050600181019050612b62565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612bd18161277d565b82525050565b6000612be38383612bc8565b60208301905092915050565b6000602082019050919050565b6000612c0782612b9c565b612c118185612ba7565b9350612c1c83612bb8565b8060005b83811015612c4d578151612c348882612bd7565b9750612c3f83612bef565b925050600181019050612c20565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000612ca2826128f3565b612cac8185612c86565b9350612cbc81856020860161290f565b612cc581612939565b840191505092915050565b6000612cdc8383612c97565b905092915050565b6000602082019050919050565b6000612cfc82612c5a565b612d068185612c65565b935083602082028501612d1885612c76565b8060005b85811015612d545784840389528151612d358582612cd0565b9450612d4083612ce4565b925060208a01995050600181019050612d1c565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b6000612db982612d92565b612dc38185612d9d565b9350612dd381856020860161290f565b612ddc81612939565b840191505092915050565b6000612df38383612dae565b905092915050565b6000602082019050919050565b6000612e1382612d66565b612e1d8185612d71565b935083602082028501612e2f85612d82565b8060005b85811015612e6b5784840389528151612e4c8582612de7565b9450612e5783612dfb565b925060208a01995050600181019050612e33565b50829750879550505050505092915050565b60006080820190508181036000830152612e978187612b3e565b90508181036020830152612eab8186612bfc565b90508181036040830152612ebf8185612cf1565b90508181036060830152612ed38184612e08565b905095945050505050565b6000819050919050565b6000612f03612efe612ef9846127ef565b612ede565b6127ef565b9050919050565b6000612f1582612ee8565b9050919050565b6000612f2782612f0a565b9050919050565b612f3781612f1c565b82525050565b6000602082019050612f526000830184612f2e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60088110612f9857612f97612f58565b5b50565b6000819050612fa982612f87565b919050565b6000612fb982612f9b565b9050919050565b612fc981612fae565b82525050565b6000602082019050612fe46000830184612fc0565b92915050565b6000602082019050612fff6000830184612821565b92915050565b600060ff82169050919050565b61301b81613005565b811461302657600080fd5b50565b60008135905061303881613012565b92915050565b61304781612a6a565b811461305257600080fd5b50565b6000813590506130648161303e565b92915050565b600080600080600060a0868803121561308657613085612773565b5b60006130948882890161279e565b95505060206130a5888289016129bc565b94505060406130b688828901613029565b93505060606130c788828901613055565b92505060806130d888828901613055565b9150509295509295909350565b60006130f082612f0a565b9050919050565b613100816130e5565b82525050565b600060208201905061311b60008301846130f7565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61315e82612939565b810181811067ffffffffffffffff8211171561317d5761317c613126565b5b80604052505050565b6000613190612769565b905061319c8282613155565b919050565b600067ffffffffffffffff8211156131bc576131bb613126565b5b602082029050602081019050919050565b600080fd5b60006131e56131e0846131a1565b613186565b90508083825260208201905060208402830185811115613208576132076131cd565b5b835b81811015613231578061321d8882612a28565b84526020840193505060208101905061320a565b5050509392505050565b600082601f8301126132505761324f613121565b5b81356132608482602086016131d2565b91505092915050565b600067ffffffffffffffff82111561328457613283613126565b5b602082029050602081019050919050565b60006132a86132a384613269565b613186565b905080838252602082019050602084028301858111156132cb576132ca6131cd565b5b835b818110156132f457806132e0888261279e565b8452602084019350506020810190506132cd565b5050509392505050565b600082601f83011261331357613312613121565b5b8135613323848260208601613295565b91505092915050565b600067ffffffffffffffff82111561334757613346613126565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff82111561337857613377613126565b5b61338182612939565b9050602081019050919050565b82818337600083830152505050565b60006133b06133ab8461335d565b613186565b9050828152602081018484840111156133cc576133cb613358565b5b6133d784828561338e565b509392505050565b600082601f8301126133f4576133f3613121565b5b813561340484826020860161339d565b91505092915050565b600061342061341b8461332c565b613186565b90508083825260208201905060208402830185811115613443576134426131cd565b5b835b8181101561348a57803567ffffffffffffffff81111561346857613467613121565b5b80860161347589826133df565b85526020850194505050602081019050613445565b5050509392505050565b600082601f8301126134a9576134a8613121565b5b81356134b984826020860161340d565b91505092915050565b600067ffffffffffffffff8211156134dd576134dc613126565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561350957613508613126565b5b61351282612939565b9050602081019050919050565b600061353261352d846134ee565b613186565b90508281526020810184848401111561354e5761354d613358565b5b61355984828561338e565b509392505050565b600082601f83011261357657613575613121565b5b813561358684826020860161351f565b91505092915050565b60006135a261359d846134c2565b613186565b905080838252602082019050602084028301858111156135c5576135c46131cd565b5b835b8181101561360c57803567ffffffffffffffff8111156135ea576135e9613121565b5b8086016135f78982613561565b855260208501945050506020810190506135c7565b5050509392505050565b600082601f83011261362b5761362a613121565b5b813561363b84826020860161358f565b91505092915050565b600080600080600060a086880312156136605761365f612773565b5b600086013567ffffffffffffffff81111561367e5761367d612778565b5b61368a8882890161323b565b955050602086013567ffffffffffffffff8111156136ab576136aa612778565b5b6136b7888289016132fe565b945050604086013567ffffffffffffffff8111156136d8576136d7612778565b5b6136e488828901613494565b935050606086013567ffffffffffffffff81111561370557613704612778565b5b61371188828901613616565b925050608086013567ffffffffffffffff81111561373257613731612778565b5b61373e888289016133df565b9150509295509295909350565b6000806040838503121561376257613761612773565b5b60006137708582860161279e565b925050602061378185828601612a28565b9150509250929050565b61379481612830565b82525050565b60006bffffffffffffffffffffffff82169050919050565b6137bb8161379a565b82525050565b6060820160008201516137d7600085018261378b565b5060208201516137ea602085018261378b565b5060408201516137fd60408501826137b2565b50505050565b600060608201905061381860008301846137c1565b92915050565b7f476f7665726e6f72416c7068613a3a5f5f6578656375746553657454696d656c60008201527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060208201527f676f7620677561726469616e0000000000000000000000000000000000000000604082015250565b60006138a0604c836128fe565b91506138ab8261381e565b606082019050919050565b600060208201905081810360008301526138cf81613893565b9050919050565b6000819050919050565b60006138fb6138f66138f1846138d6565b612ede565b61277d565b9050919050565b61390b816138e0565b82525050565b7f73657450656e64696e6741646d696e2861646472657373290000000000000000600082015250565b60006139476018836128fe565b915061395282613911565b602082019050919050565b600082825260208201905092915050565b600061397982612d92565b613983818561395d565b935061399381856020860161290f565b61399c81612939565b840191505092915050565b600060a0820190506139bc6000830187612821565b6139c96020830186613902565b81810360408301526139da8161393a565b905081810360608301526139ee818561396e565b90506139fd60808301846127e0565b95945050505050565b6000613a19613a14846134ee565b613186565b905082815260208101848484011115613a3557613a34613358565b5b613a4084828561290f565b509392505050565b600082601f830112613a5d57613a5c613121565b5b8151613a6d848260208601613a06565b91505092915050565b600060208284031215613a8c57613a8b612773565b5b600082015167ffffffffffffffff811115613aaa57613aa9612778565b5b613ab684828501613a48565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b0657607f821691505b602082108103613b1957613b18613abf565b5b50919050565b7f476f7665726e6f72416c7068613a3a73746174653a20696e76616c696420707260008201527f6f706f73616c2069640000000000000000000000000000000000000000000000602082015250565b6000613b7b6029836128fe565b9150613b8682613b1f565b604082019050919050565b60006020820190508181036000830152613baa81613b6e565b9050919050565b600081519050613bc081612787565b92915050565b600060208284031215613bdc57613bdb612773565b5b6000613bea84828501613bb1565b91505092915050565b6000608082019050613c086000830187612a74565b613c156020830186612a74565b613c2260408301856127e0565b613c2f6060830184612821565b95945050505050565b6000606082019050613c4d6000830186612a74565b613c5a60208301856127e0565b613c67604083018461283c565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000613cb0600283613c6f565b9150613cbb82613c7a565b600282019050919050565b6000819050919050565b613ce1613cdc82612a6a565b613cc6565b82525050565b6000613cf282613ca3565b9150613cfe8285613cd0565b602082019150613d0e8284613cd0565b6020820191508190509392505050565b613d2781613005565b82525050565b6000608082019050613d426000830187612a74565b613d4f6020830186613d1e565b613d5c6040830185612a74565b613d696060830184612a74565b95945050505050565b7f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e60008201527f76616c6964207369676e61747572650000000000000000000000000000000000602082015250565b6000613dce602f836128fe565b9150613dd982613d72565b604082019050919050565b60006020820190508181036000830152613dfd81613dc1565b9050919050565b7f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e646560008201527f72206d75737420626520676f7620677561726469616e00000000000000000000602082015250565b6000613e606036836128fe565b9150613e6b82613e04565b604082019050919050565b60006020820190508181036000830152613e8f81613e53565b9050919050565b7f476f7665726e6f72416c7068613a3a5f5f717565756553657454696d656c6f6360008201527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f60208201527f7620677561726469616e00000000000000000000000000000000000000000000604082015250565b6000613f18604a836128fe565b9150613f2382613e96565b606082019050919050565b60006020820190508181036000830152613f4781613f0b565b9050919050565b600081519050613f5d8161303e565b92915050565b600060208284031215613f7957613f78612773565b5b6000613f8784828501613f4e565b91505092915050565b7f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736560008201527f6e646572206d75737420626520676f7620677561726469616e00000000000000602082015250565b6000613fec6039836128fe565b9150613ff782613f90565b604082019050919050565b6000602082019050818103600083015261401b81613fdf565b9050919050565b60006040820190506140376000830185612821565b61404460208301846127e0565b9392505050565b6140548161379a565b811461405f57600080fd5b50565b6000815190506140718161404b565b92915050565b60006020828403121561408d5761408c612773565b5b600061409b84828501614062565b91505092915050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260008201527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015250565b6000614100603f836128fe565b915061410b826140a4565b604082019050919050565b6000602082019050818103600083015261412f816140f3565b9050919050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60008201527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d60208201527f6174636800000000000000000000000000000000000000000000000000000000604082015250565b60006141b86044836128fe565b91506141c382614136565b606082019050919050565b600060208201905081810360008301526141e7816141ab565b9050919050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60008201527f7669646520616374696f6e730000000000000000000000000000000000000000602082015250565b600061424a602c836128fe565b9150614255826141ee565b604082019050919050565b600060208201905081810360008301526142798161423d565b9050919050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960008201527f20616374696f6e73000000000000000000000000000000000000000000000000602082015250565b60006142dc6028836128fe565b91506142e782614280565b604082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061434c8261277d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361437e5761437d614312565b5b600182019050919050565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2050726f706f73616c60008201527f494420636f6c6c73696f6e000000000000000000000000000000000000000000602082015250565b60006143e5602b836128fe565b91506143f082614389565b604082019050919050565b60006020820190508181036000830152614414816143d8565b9050919050565b600061012082019050614431600083018c6127e0565b61443e602083018b612821565b8181036040830152614450818a612b3e565b905081810360608301526144648189612bfc565b905081810360808301526144788188612cf1565b905081810360a083015261448c8187612e08565b905061449b60c08301866127e0565b6144a860e08301856127e0565b8181036101008301526144bb818461294a565b90509a9950505050505050505050565b7f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360008201527f616e206f6e6c792062652071756575656420696620697420697320737563636560208201527f6564656400000000000000000000000000000000000000000000000000000000604082015250565b600061454d6044836128fe565b9150614558826144cb565b606082019050919050565b6000602082019050818103600083015261457c81614540565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506145c760008301856127e0565b6145d460208301846127e0565b9392505050565b7f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60008201527f2063616e206f6e6c79206265206578656375746564206966206974206973207160208201527f7565756564000000000000000000000000000000000000000000000000000000604082015250565b600061465d6045836128fe565b9150614668826145db565b606082019050919050565b6000602082019050818103600083015261468c81614650565b9050919050565b60008190508160005260206000209050919050565b600081546146b581613aee565b6146bf81866128fe565b945060018216600081146146da57600181146146f057614723565b60ff198316865281151560200286019350614723565b6146f985614693565b60005b8381101561471b578154818901526001820191506020810190506146fc565b808801955050505b50505092915050565b60008190508160005260206000209050919050565b6000815461474e81613aee565b614758818661395d565b945060018216600081146147735760018114614789576147bc565b60ff1983168652811515602002860193506147bc565b6147928561472c565b60005b838110156147b457815481890152600182019150602081019050614795565b808801955050505b50505092915050565b600060a0820190506147da6000830188612821565b6147e760208301876127e0565b81810360408301526147f981866146a8565b9050818103606083015261480d8185614741565b905061481c60808301846127e0565b9695505050505050565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e6760008201527f20697320636c6f73656400000000000000000000000000000000000000000000602082015250565b6000614882602a836128fe565b915061488d82614826565b604082019050919050565b600060208201905081810360008301526148b181614875565b9050919050565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060008201527f616c726561647920766f74656400000000000000000000000000000000000000602082015250565b6000614914602d836128fe565b915061491f826148b8565b604082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b600061496561496061495b8461379a565b612ede565b61277d565b9050919050565b6149758161494a565b82525050565b60006080820190506149906000830187612821565b61499d60208301866127e0565b6149aa604083018561283c565b6149b7606083018461496c565b95945050505050565b60006149cb8261277d565b91506149d68361277d565b92508282019050808211156149ee576149ed614312565b5b92915050565b7f6164646974696f6e206f766572666c6f77000000000000000000000000000000600082015250565b6000614a2a6011836128fe565b9150614a35826149f4565b602082019050919050565b60006020820190508181036000830152614a5981614a1d565b9050919050565b7f7375627472616374696f6e20756e646572666c6f770000000000000000000000600082015250565b6000614a966015836128fe565b9150614aa182614a60565b602082019050919050565b60006020820190508181036000830152614ac581614a89565b9050919050565b6000614ad78261277d565b9150614ae28361277d565b9250828203905081811115614afa57614af9614312565b5b92915050565b600060a082019050614b156000830188612821565b614b2260208301876127e0565b8181036040830152614b34818661294a565b90508181036060830152614b48818561396e565b9050614b5760808301846127e0565b9695505050505050565b600081519050614b70816129a5565b92915050565b600060208284031215614b8c57614b8b612773565b5b6000614b9a84828501614b61565b91505092915050565b7f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060008201527f726f706f73616c20616374696f6e20616c72656164792071756575656420617460208201527f2065746100000000000000000000000000000000000000000000000000000000604082015250565b6000614c256044836128fe565b9150614c3082614ba3565b606082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ca87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614c6b565b614cb28683614c6b565b95508019841693508086168417925050509392505050565b6000614ce5614ce0614cdb8461277d565b612ede565b61277d565b9050919050565b6000819050919050565b614cff83614cca565b614d13614d0b82614cec565b848454614c78565b825550505050565b600090565b614d28614d1b565b614d33818484614cf6565b505050565b5b81811015614d5757614d4c600082614d20565b600181019050614d39565b5050565b601f821115614d9c57614d6d81614693565b614d7684614c5b565b81016020851015614d85578190505b614d99614d9185614c5b565b830182614d38565b50505b505050565b600082821c905092915050565b6000614dbf60001984600802614da1565b1980831691505092915050565b6000614dd88383614dae565b9150826002028217905092915050565b614df1826128f3565b67ffffffffffffffff811115614e0a57614e09613126565b5b614e148254613aee565b614e1f828285614d5b565b600060209050601f831160018114614e525760008415614e40578287015190505b614e4a8582614dcc565b865550614eb2565b601f198416614e6086614693565b60005b82811015614e8857848901518255600182019150602085019450602081019050614e63565b86831015614ea55784890151614ea1601f891682614dae565b8355505b6001600288020188555050505b505050505050565b601f821115614efb57614ecc8161472c565b614ed584614c5b565b81016020851015614ee4578190505b614ef8614ef085614c5b565b830182614d38565b50505b505050565b614f0982612d92565b67ffffffffffffffff811115614f2257614f21613126565b5b614f2c8254613aee565b614f37828285614eba565b600060209050601f831160018114614f6a5760008415614f58578287015190505b614f628582614dcc565b865550614fca565b601f198416614f788661472c565b60005b82811015614fa057848901518255600182019150602085019450602081019050614f7b565b86831015614fbd5784890151614fb9601f891682614dae565b8355505b6001600288020188555050505b50505050505056fea264697066735822122060e6d318798bfaf63acbc56e9788b1e0bfef404eb7adaf705254ee25fd4fedb364736f6c63430008120033