{"id":"abeaf8f71acc7943af6d2f98035b8af5","_format":"hh-sol-build-info-1","solcVersion":"0.5.16","solcLongVersion":"0.5.16+commit.9c3226ce","input":{"language":"Solidity","sources":{"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol":{"content":"pragma solidity ^0.5.16;\npragma experimental ABIEncoderV2;\n\nimport \"./GovernorBravoInterfaces.sol\";\n\n/**\n * @title GovernorBravoDelegate\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\n *\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\n *\n * ## Details\n *\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\n *\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\n *\n * # Governor Bravo\n *\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\n * - Submit new proposal\n * - Vote on a proposal\n * - Cancel a proposal\n * - Queue a proposal for execution with a timelock executor contract.\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\n * cancel a proposal at anytime before it is queued for execution.\n *\n * ## Venus Improvement Proposal\n *\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\n *\n * - `NORMAL`\n * - `FASTTRACK`\n * - `CRITICAL`\n *\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\n *\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\n * - `votingPeriod`: The number of blocks where voting will be open\n * - `proposalThreshold`: The number of votes required in order submit a proposal\n *\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\n * flow of each type of VIP.\n *\n * ## Voting\n *\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\n *\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\n * `castVoteBySig`.\n *\n * ## Delegating\n *\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\n * to let another user who they trust propose or vote in their place.\n *\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\n * vote delegation by calling the same function with a value of `0`.\n */\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\n    /// @notice The name of this contract\n    string public constant name = \"Venus Governor Bravo\";\n\n    /// @notice The minimum setable proposal threshold\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\n\n    /// @notice The maximum setable proposal threshold\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\n\n    /// @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\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\n\n    /// @notice The EIP-712 typehash for the contract's domain\n    bytes32 public constant DOMAIN_TYPEHASH =\n        keccak256(\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\");\n\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\"Ballot(uint256 proposalId,uint8 support)\");\n\n    /**\n     * @notice Used to initialize the contract during delegator contructor\n     * @param xvsVault_ The address of the XvsVault\n     * @param proposalConfigs_ Governance configs for each governance route\n     * @param timelocks Timelock addresses for each governance route\n     */\n    function initialize(\n        address xvsVault_,\n        ValidationParams memory validationParams_,\n        ProposalConfig[] memory proposalConfigs_,\n        TimelockInterface[] memory timelocks,\n        address guardian_\n    ) public {\n        require(address(proposalTimelocks[0]) == address(0), \"GovernorBravo::initialize: cannot initialize twice\");\n        require(msg.sender == admin, \"GovernorBravo::initialize: admin only\");\n        require(xvsVault_ != address(0), \"GovernorBravo::initialize: invalid xvs vault address\");\n        require(guardian_ != address(0), \"GovernorBravo::initialize: invalid guardian\");\n        require(\n            timelocks.length == getGovernanceRouteCount(),\n            \"GovernorBravo::initialize:number of timelocks should match number of governance routes\"\n        );\n        require(\n            proposalConfigs_.length == getGovernanceRouteCount(),\n            \"GovernorBravo::initialize:number of proposal configs should match number of governance routes\"\n        );\n\n        xvsVault = XvsVaultInterface(xvsVault_);\n        proposalMaxOperations = 10;\n        guardian = guardian_;\n\n        // Set parameters for each Governance Route\n        setValidationParams(validationParams_);\n        setProposalConfigs(proposalConfigs_);\n\n        uint256 arrLength = timelocks.length;\n        for (uint256 i; i < arrLength; ++i) {\n            require(address(timelocks[i]) != address(0), \"GovernorBravo::initialize:invalid timelock address\");\n            proposalTimelocks[i] = timelocks[i];\n        }\n    }\n\n    /**\n     ** @notice Sets the validation parameters for voting delay and voting period\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\n     */\n    function setValidationParams(ValidationParams memory newValidationParams) public {\n        require(msg.sender == admin, \"GovernorBravo::setValidationParams: admin only\");\n        require(\n            newValidationParams.minVotingPeriod > 0 &&\n                newValidationParams.minVotingDelay > 0 &&\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\n            \"GovernorBravo::setValidationParams: invalid params\"\n        );\n        emit SetValidationParams(\n            validationParams.minVotingPeriod,\n            newValidationParams.minVotingPeriod,\n            validationParams.maxVotingPeriod,\n            newValidationParams.maxVotingPeriod,\n            validationParams.minVotingDelay,\n            newValidationParams.minVotingDelay,\n            validationParams.maxVotingDelay,\n            newValidationParams.maxVotingDelay\n        );\n        validationParams = newValidationParams;\n    }\n\n    /**\n     ** @notice Sets the configuration for different proposal types\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\n     */\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\n        require(msg.sender == admin, \"GovernorBravo::setProposalConfigs: admin only\");\n        require(\n            validationParams.minVotingPeriod > 0 &&\n                validationParams.maxVotingPeriod > 0 &&\n                validationParams.minVotingDelay > 0 &&\n                validationParams.maxVotingDelay > 0,\n            \"GovernorBravo::setProposalConfigs: validation params not configured yet\"\n        );\n        uint256 arrLength = proposalConfigs_.length;\n        require(\n            arrLength == getGovernanceRouteCount(),\n            \"GovernorBravo::setProposalConfigs: invalid proposal config length\"\n        );\n        for (uint256 i; i < arrLength; ++i) {\n            require(\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\n                \"GovernorBravo::setProposalConfigs: invalid min voting period\"\n            );\n            require(\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\n                \"GovernorBravo::setProposalConfigs: invalid max voting period\"\n            );\n            require(\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\n                \"GovernorBravo::setProposalConfigs: invalid min voting delay\"\n            );\n            require(\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\n                \"GovernorBravo::setProposalConfigs: invalid max voting delay\"\n            );\n            require(\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\n                \"GovernorBravo::setProposalConfigs: invalid min proposal threshold\"\n            );\n            require(\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\n                \"GovernorBravo::setProposalConfigs: invalid max proposal threshold\"\n            );\n\n            proposalConfigs[i] = proposalConfigs_[i];\n            emit SetProposalConfigs(\n                proposalConfigs_[i].votingPeriod,\n                proposalConfigs_[i].votingDelay,\n                proposalConfigs_[i].proposalThreshold\n            );\n        }\n    }\n\n    /**\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\n     * targets, values, signatures, and calldatas must be of equal length\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\n     * @param targets Target addresses for proposal calls\n     * @param values BNB values for proposal calls\n     * @param signatures Function signatures for proposal calls\n     * @param calldatas Calldatas for proposal calls\n     * @param description String description of the proposal\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\n     * @return Proposal id of new proposal\n     */\n    function propose(\n        address[] memory targets,\n        uint[] memory values,\n        string[] memory signatures,\n        bytes[] memory calldatas,\n        string memory description,\n        ProposalType proposalType\n    ) public returns (uint) {\n        // Reject proposals before initiating as Governor\n        require(initialProposalId != 0, \"GovernorBravo::propose: Governor Bravo not active\");\n        require(\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\n            \"GovernorBravo::propose: proposer votes below proposal threshold\"\n        );\n        require(\n            targets.length == values.length &&\n                targets.length == signatures.length &&\n                targets.length == calldatas.length,\n            \"GovernorBravo::propose: proposal function information arity mismatch\"\n        );\n        require(targets.length != 0, \"GovernorBravo::propose: must provide actions\");\n        require(targets.length <= proposalMaxOperations, \"GovernorBravo::propose: too many actions\");\n\n        uint latestProposalId = latestProposalIds[msg.sender];\n        if (latestProposalId != 0) {\n            ProposalState proposersLatestProposalState = state(latestProposalId);\n            require(\n                proposersLatestProposalState != ProposalState.Active,\n                \"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\"\n            );\n            require(\n                proposersLatestProposalState != ProposalState.Pending,\n                \"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\"\n            );\n        }\n\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\n\n        proposalCount++;\n        Proposal memory newProposal = Proposal({\n            id: proposalCount,\n            proposer: msg.sender,\n            eta: 0,\n            targets: targets,\n            values: values,\n            signatures: signatures,\n            calldatas: calldatas,\n            startBlock: startBlock,\n            endBlock: endBlock,\n            forVotes: 0,\n            againstVotes: 0,\n            abstainVotes: 0,\n            canceled: false,\n            executed: false,\n            proposalType: uint8(proposalType)\n        });\n\n        proposals[newProposal.id] = newProposal;\n        latestProposalIds[newProposal.proposer] = newProposal.id;\n\n        emit ProposalCreated(\n            newProposal.id,\n            msg.sender,\n            targets,\n            values,\n            signatures,\n            calldatas,\n            startBlock,\n            endBlock,\n            description,\n            uint8(proposalType)\n        );\n        return newProposal.id;\n    }\n\n    /**\n     * @notice Queues a proposal of state succeeded\n     * @param proposalId The id of the proposal to queue\n     */\n    function queue(uint proposalId) external {\n        require(\n            state(proposalId) == ProposalState.Succeeded,\n            \"GovernorBravo::queue: proposal can only be queued if it is succeeded\"\n        );\n        Proposal storage proposal = proposals[proposalId];\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\n        for (uint i; i < proposal.targets.length; ++i) {\n            queueOrRevertInternal(\n                proposal.targets[i],\n                proposal.values[i],\n                proposal.signatures[i],\n                proposal.calldatas[i],\n                eta,\n                uint8(proposal.proposalType)\n            );\n        }\n        proposal.eta = eta;\n        emit ProposalQueued(proposalId, eta);\n    }\n\n    function queueOrRevertInternal(\n        address target,\n        uint value,\n        string memory signature,\n        bytes memory data,\n        uint eta,\n        uint8 proposalType\n    ) internal {\n        require(\n            !proposalTimelocks[proposalType].queuedTransactions(\n                keccak256(abi.encode(target, value, signature, data, eta))\n            ),\n            \"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\"\n        );\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\n    }\n\n    /**\n     * @notice Executes a queued proposal if eta has passed\n     * @param proposalId The id of the proposal to execute\n     */\n    function execute(uint proposalId) external {\n        require(\n            state(proposalId) == ProposalState.Queued,\n            \"GovernorBravo::execute: proposal can only be executed if it is queued\"\n        );\n        Proposal storage proposal = proposals[proposalId];\n        proposal.executed = true;\n        for (uint i; i < proposal.targets.length; ++i) {\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\n                proposal.targets[i],\n                proposal.values[i],\n                proposal.signatures[i],\n                proposal.calldatas[i],\n                proposal.eta\n            );\n        }\n        emit ProposalExecuted(proposalId);\n    }\n\n    /**\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\n     * @param proposalId The id of the proposal to cancel\n     */\n    function cancel(uint proposalId) external {\n        require(state(proposalId) != ProposalState.Executed, \"GovernorBravo::cancel: cannot cancel executed proposal\");\n\n        Proposal storage proposal = proposals[proposalId];\n        require(\n            msg.sender == guardian ||\n                msg.sender == proposal.proposer ||\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\n                proposalConfigs[proposal.proposalType].proposalThreshold,\n            \"GovernorBravo::cancel: proposer above threshold\"\n        );\n\n        proposal.canceled = true;\n        for (uint i = 0; i < proposal.targets.length; i++) {\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\n                proposal.targets[i],\n                proposal.values[i],\n                proposal.signatures[i],\n                proposal.calldatas[i],\n                proposal.eta\n            );\n        }\n\n        emit ProposalCanceled(proposalId);\n    }\n\n    /**\n     * @notice Gets actions of a proposal\n     * @param proposalId the id of the proposal\n     * @return targets, values, signatures, and calldatas of the proposal actions\n     */\n    function getActions(\n        uint proposalId\n    )\n        external\n        view\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\n    {\n        Proposal storage p = proposals[proposalId];\n        return (p.targets, p.values, p.signatures, p.calldatas);\n    }\n\n    /**\n     * @notice Gets the receipt for a voter on a given proposal\n     * @param proposalId the id of proposal\n     * @param voter The address of the voter\n     * @return The voting receipt\n     */\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\n        return proposals[proposalId].receipts[voter];\n    }\n\n    /**\n     * @notice Gets the state of a proposal\n     * @param proposalId The id of the proposal\n     * @return Proposal state\n     */\n    function state(uint proposalId) public view returns (ProposalState) {\n        require(\n            proposalCount >= proposalId && proposalId > initialProposalId,\n            \"GovernorBravo::state: invalid proposal id\"\n        );\n        Proposal storage proposal = proposals[proposalId];\n        if (proposal.canceled) {\n            return ProposalState.Canceled;\n        } else if (block.number <= proposal.startBlock) {\n            return ProposalState.Pending;\n        } else if (block.number <= proposal.endBlock) {\n            return ProposalState.Active;\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\n            return ProposalState.Defeated;\n        } else if (proposal.eta == 0) {\n            return ProposalState.Succeeded;\n        } else if (proposal.executed) {\n            return ProposalState.Executed;\n        } else if (\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\n        ) {\n            return ProposalState.Expired;\n        } else {\n            return ProposalState.Queued;\n        }\n    }\n\n    /**\n     * @notice Cast a vote for a proposal\n     * @param proposalId The id of the proposal to vote on\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\n     */\n    function castVote(uint proposalId, uint8 support) external {\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \"\");\n    }\n\n    /**\n     * @notice Cast a vote for a proposal with a reason\n     * @param proposalId The id of the proposal to vote on\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\n     * @param reason The reason given for the vote by the voter\n     */\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\n    }\n\n    /**\n     * @notice Cast a vote for a proposal by signature\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\n     * @param proposalId The id of the proposal to vote on\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\n     * @param v recovery id of ECDSA signature\n     * @param r part of the ECDSA sig output\n     * @param s part of the ECDSA sig output\n     */\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\n        bytes32 domainSeparator = keccak256(\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\n        );\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\n        bytes32 digest = keccak256(abi.encodePacked(\"\\x19\\x01\", domainSeparator, structHash));\n        address signatory = ecrecover(digest, v, r, s);\n        require(signatory != address(0), \"GovernorBravo::castVoteBySig: invalid signature\");\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \"\");\n    }\n\n    /**\n     * @notice Internal function that caries out voting logic\n     * @param voter The voter that is casting their vote\n     * @param proposalId The id of the proposal to vote on\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\n     * @return The number of votes cast\n     */\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\n        require(state(proposalId) == ProposalState.Active, \"GovernorBravo::castVoteInternal: voting is closed\");\n        require(support <= 2, \"GovernorBravo::castVoteInternal: invalid vote type\");\n        Proposal storage proposal = proposals[proposalId];\n        Receipt storage receipt = proposal.receipts[voter];\n        require(receipt.hasVoted == false, \"GovernorBravo::castVoteInternal: voter already voted\");\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\n\n        if (support == 0) {\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\n        } else if (support == 1) {\n            proposal.forVotes = add256(proposal.forVotes, votes);\n        } else if (support == 2) {\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\n        }\n\n        receipt.hasVoted = true;\n        receipt.support = support;\n        receipt.votes = votes;\n\n        return votes;\n    }\n\n    /**\n     * @notice Sets the new governance guardian\n     * @param newGuardian the address of the new guardian\n     */\n    function _setGuardian(address newGuardian) external {\n        require(msg.sender == guardian || msg.sender == admin, \"GovernorBravo::_setGuardian: admin or guardian only\");\n        require(newGuardian != address(0), \"GovernorBravo::_setGuardian: cannot live without a guardian\");\n        address oldGuardian = guardian;\n        guardian = newGuardian;\n\n        emit NewGuardian(oldGuardian, newGuardian);\n    }\n\n    /**\n     * @notice Initiate the GovernorBravo contract\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\n     */\n    function _initiate(address governorAlpha) external {\n        require(msg.sender == admin, \"GovernorBravo::_initiate: admin only\");\n        require(initialProposalId == 0, \"GovernorBravo::_initiate: can only initiate once\");\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\n        initialProposalId = proposalCount;\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\n            proposalTimelocks[i].acceptAdmin();\n        }\n    }\n\n    /**\n     * @notice Set max proposal operations\n     * @dev Admin only.\n     * @param proposalMaxOperations_ Max proposal operations\n     */\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\n        require(msg.sender == admin, \"GovernorBravo::_setProposalMaxOperations: admin only\");\n        uint oldProposalMaxOperations = proposalMaxOperations;\n        proposalMaxOperations = proposalMaxOperations_;\n\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\n    }\n\n    /**\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n     * @param newPendingAdmin New pending admin.\n     */\n    function _setPendingAdmin(address newPendingAdmin) external {\n        // Check caller = admin\n        require(msg.sender == admin, \"GovernorBravo:_setPendingAdmin: admin only\");\n\n        // Save current value, if any, for inclusion in log\n        address oldPendingAdmin = pendingAdmin;\n\n        // Store pendingAdmin with value newPendingAdmin\n        pendingAdmin = newPendingAdmin;\n\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\n    }\n\n    /**\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\n     * @dev Admin function for pending admin to accept role and update admin\n     */\n    function _acceptAdmin() external {\n        // Check caller is pendingAdmin and pendingAdmin ≠ address(0)\n        require(\n            msg.sender == pendingAdmin && msg.sender != address(0),\n            \"GovernorBravo:_acceptAdmin: pending admin only\"\n        );\n\n        // Save current values for inclusion in log\n        address oldAdmin = admin;\n        address oldPendingAdmin = pendingAdmin;\n\n        // Store admin with value pendingAdmin\n        admin = pendingAdmin;\n\n        // Clear the pending value\n        pendingAdmin = address(0);\n\n        emit NewAdmin(oldAdmin, admin);\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\n    }\n\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\n        uint c = a + b;\n        require(c >= a, \"addition overflow\");\n        return c;\n    }\n\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\n        require(b <= a, \"subtraction underflow\");\n        return a - b;\n    }\n\n    function getChainIdInternal() internal pure returns (uint) {\n        uint chainId;\n        assembly {\n            chainId := chainid()\n        }\n        return chainId;\n    }\n\n    function getGovernanceRouteCount() internal pure returns (uint8) {\n        return uint8(ProposalType.CRITICAL) + 1;\n    }\n}\n"},"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol":{"content":"pragma solidity ^0.5.16;\npragma experimental ABIEncoderV2;\n\n/**\n * @title GovernorBravoEvents\n * @author Venus\n * @notice Set of events emitted by the GovernorBravo contracts.\n */\ncontract GovernorBravoEvents {\n    /// @notice An event emitted when a new proposal is created\n    event ProposalCreated(\n        uint id,\n        address proposer,\n        address[] targets,\n        uint[] values,\n        string[] signatures,\n        bytes[] calldatas,\n        uint startBlock,\n        uint endBlock,\n        string description,\n        uint8 proposalType\n    );\n\n    /// @notice An event emitted when a vote has been cast on a proposal\n    /// @param voter The address which casted a vote\n    /// @param proposalId The proposal id which was voted on\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\n    /// @param votes Number of votes which were cast by the voter\n    /// @param reason The reason given for the vote by the voter\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\n\n    /// @notice An event emitted when a proposal has been canceled\n    event ProposalCanceled(uint id);\n\n    /// @notice An event emitted when a proposal has been queued in the Timelock\n    event ProposalQueued(uint id, uint eta);\n\n    /// @notice An event emitted when a proposal has been executed in the Timelock\n    event ProposalExecuted(uint id);\n\n    /// @notice An event emitted when the voting delay is set\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\n\n    /// @notice An event emitted when the voting period is set\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\n\n    /// @notice Emitted when implementation is changed\n    event NewImplementation(address oldImplementation, address newImplementation);\n\n    /// @notice Emitted when proposal threshold is set\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\n\n    /// @notice Emitted when pendingAdmin is changed\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\n\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\n    event NewAdmin(address oldAdmin, address newAdmin);\n\n    /// @notice Emitted when the new guardian address is set\n    event NewGuardian(address oldGuardian, address newGuardian);\n\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\n\n    /// @notice Emitted when the new validation params are set\n    event SetValidationParams(\n        uint256 oldMinVotingPeriod,\n        uint256 newMinVotingPeriod,\n        uint256 oldmaxVotingPeriod,\n        uint256 newmaxVotingPeriod,\n        uint256 oldminVotingDelay,\n        uint256 newminVotingDelay,\n        uint256 oldmaxVotingDelay,\n        uint256 newmaxVotingDelay\n    );\n\n    /// @notice Emitted when new Proposal configs added\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\n}\n\n/**\n * @title GovernorBravoDelegatorStorage\n * @author Venus\n * @notice Storage layout of the `GovernorBravoDelegator` contract\n */\ncontract GovernorBravoDelegatorStorage {\n    /// @notice Administrator for this contract\n    address public admin;\n\n    /// @notice Pending administrator for this contract\n    address public pendingAdmin;\n\n    /// @notice Active brains of Governor\n    address public implementation;\n}\n\n/**\n * @title GovernorBravoDelegateStorageV1\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\n * GovernorBravoDelegateStorageVX.\n */\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\n    uint public votingDelay;\n\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\n    uint public votingPeriod;\n\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\n    uint public proposalThreshold;\n\n    /// @notice Initial proposal id set at become\n    uint public initialProposalId;\n\n    /// @notice The total number of proposals\n    uint public proposalCount;\n\n    /// @notice The address of the Venus Protocol Timelock\n    TimelockInterface public timelock;\n\n    /// @notice The address of the Venus governance token\n    XvsVaultInterface public xvsVault;\n\n    /// @notice The official record of all proposals ever proposed\n    mapping(uint => Proposal) public proposals;\n\n    /// @notice The latest proposal for each proposer\n    mapping(address => uint) public latestProposalIds;\n\n    struct Proposal {\n        /// @notice Unique id for looking up a proposal\n        uint id;\n        /// @notice Creator of the proposal\n        address proposer;\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\n        uint eta;\n        /// @notice the ordered list of target addresses for calls to be made\n        address[] targets;\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\n        uint[] values;\n        /// @notice The ordered list of function signatures to be called\n        string[] signatures;\n        /// @notice The ordered list of calldata to be passed to each call\n        bytes[] calldatas;\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\n        uint startBlock;\n        /// @notice The block at which voting ends: votes must be cast prior to this block\n        uint endBlock;\n        /// @notice Current number of votes in favor of this proposal\n        uint forVotes;\n        /// @notice Current number of votes in opposition to this proposal\n        uint againstVotes;\n        /// @notice Current number of votes for abstaining for this proposal\n        uint abstainVotes;\n        /// @notice Flag marking whether the proposal has been canceled\n        bool canceled;\n        /// @notice Flag marking whether the proposal has been executed\n        bool executed;\n        /// @notice Receipts of ballots for the entire set of voters\n        mapping(address => Receipt) receipts;\n        /// @notice The type of the proposal\n        uint8 proposalType;\n    }\n\n    /// @notice Ballot receipt record for a voter\n    struct Receipt {\n        /// @notice Whether or not a vote has been cast\n        bool hasVoted;\n        /// @notice Whether or not the voter supports the proposal or abstains\n        uint8 support;\n        /// @notice The number of votes the voter had, which were cast\n        uint96 votes;\n    }\n\n    /// @notice Possible states that a proposal may be in\n    enum ProposalState {\n        Pending,\n        Active,\n        Canceled,\n        Defeated,\n        Succeeded,\n        Queued,\n        Expired,\n        Executed\n    }\n\n    /// @notice The maximum number of actions that can be included in a proposal\n    uint public proposalMaxOperations;\n\n    /// @notice A privileged role that can cancel any proposal\n    address public guardian;\n}\n\n/**\n * @title GovernorBravoDelegateStorageV2\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\n * GovernorBravoDelegateStorageVX.\n */\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\n    enum ProposalType {\n        NORMAL,\n        FASTTRACK,\n        CRITICAL\n    }\n\n    struct ProposalConfig {\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\n        uint256 votingDelay;\n        /// @notice The duration of voting on a proposal, in blocks\n        uint256 votingPeriod;\n        /// @notice The number of votes required in order for a voter to become a proposer\n        uint256 proposalThreshold;\n    }\n\n    /// @notice mapping containing configuration for each proposal type\n    mapping(uint => ProposalConfig) public proposalConfigs;\n\n    /// @notice mapping containing Timelock addresses for each proposal type\n    mapping(uint => TimelockInterface) public proposalTimelocks;\n}\n\n/**\n * @title GovernorBravoDelegateStorageV3\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\n * GovernorBravoDelegateStorageVX.\n */\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\n    struct ValidationParams {\n        uint256 minVotingPeriod;\n        uint256 maxVotingPeriod;\n        uint256 minVotingDelay;\n        uint256 maxVotingDelay;\n    }\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\n    ValidationParams public validationParams;\n}\n\n/**\n * @title TimelockInterface\n * @author Venus\n * @notice Interface implemented by the Timelock contract.\n */\ninterface TimelockInterface {\n    function delay() external view returns (uint);\n\n    function GRACE_PERIOD() external view returns (uint);\n\n    function acceptAdmin() external;\n\n    function queuedTransactions(bytes32 hash) external view returns (bool);\n\n    function queueTransaction(\n        address target,\n        uint value,\n        string calldata signature,\n        bytes calldata data,\n        uint eta\n    ) external returns (bytes32);\n\n    function cancelTransaction(\n        address target,\n        uint value,\n        string calldata signature,\n        bytes calldata data,\n        uint eta\n    ) external;\n\n    function executeTransaction(\n        address target,\n        uint value,\n        string calldata signature,\n        bytes calldata data,\n        uint eta\n    ) external payable returns (bytes memory);\n}\n\ninterface XvsVaultInterface {\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\n}\n\ninterface GovernorAlphaInterface {\n    /// @notice The total number of proposals\n    function proposalCount() external returns (uint);\n}\n"},"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol":{"content":"pragma solidity ^0.5.16;\n\nimport \"../Utils/IBEP20.sol\";\nimport \"../Utils/SafeBEP20.sol\";\nimport \"../Utils/Ownable.sol\";\n\n/**\n * @title VTreasury\n * @author Venus\n * @notice Protocol treasury that holds tokens owned by Venus\n */\ncontract VTreasury is Ownable {\n    using SafeMath for uint256;\n    using SafeBEP20 for IBEP20;\n\n    // WithdrawTreasuryBEP20 Event\n    event WithdrawTreasuryBEP20(address tokenAddress, uint256 withdrawAmount, address withdrawAddress);\n\n    // WithdrawTreasuryBNB Event\n    event WithdrawTreasuryBNB(uint256 withdrawAmount, address withdrawAddress);\n\n    /**\n     * @notice To receive BNB\n     */\n    function() external payable {}\n\n    /**\n     * @notice Withdraw Treasury BEP20 Tokens, Only owner call it\n     * @param tokenAddress The address of treasury token\n     * @param withdrawAmount The withdraw amount to owner\n     * @param withdrawAddress The withdraw address\n     */\n    function withdrawTreasuryBEP20(\n        address tokenAddress,\n        uint256 withdrawAmount,\n        address withdrawAddress\n    ) external onlyOwner {\n        uint256 actualWithdrawAmount = withdrawAmount;\n        // Get Treasury Token Balance\n        uint256 treasuryBalance = IBEP20(tokenAddress).balanceOf(address(this));\n\n        // Check Withdraw Amount\n        if (withdrawAmount > treasuryBalance) {\n            // Update actualWithdrawAmount\n            actualWithdrawAmount = treasuryBalance;\n        }\n\n        // Transfer BEP20 Token to withdrawAddress\n        IBEP20(tokenAddress).safeTransfer(withdrawAddress, actualWithdrawAmount);\n\n        emit WithdrawTreasuryBEP20(tokenAddress, actualWithdrawAmount, withdrawAddress);\n    }\n\n    /**\n     * @notice Withdraw Treasury BNB, Only owner call it\n     * @param withdrawAmount The withdraw amount to owner\n     * @param withdrawAddress The withdraw address\n     */\n    function withdrawTreasuryBNB(uint256 withdrawAmount, address payable withdrawAddress) external payable onlyOwner {\n        uint256 actualWithdrawAmount = withdrawAmount;\n        // Get Treasury BNB Balance\n        uint256 bnbBalance = address(this).balance;\n\n        // Check Withdraw Amount\n        if (withdrawAmount > bnbBalance) {\n            // Update actualWithdrawAmount\n            actualWithdrawAmount = bnbBalance;\n        }\n        // Transfer BNB to withdrawAddress\n        withdrawAddress.transfer(actualWithdrawAmount);\n\n        emit WithdrawTreasuryBNB(actualWithdrawAmount, withdrawAddress);\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/InterestRateModels/InterestRateModel.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity ^0.5.16;\n\n/**\n * @title Venus's InterestRateModel Interface\n * @author Venus\n */\ncontract InterestRateModel {\n    /// @notice Indicator that this is an InterestRateModel contract (for inspection)\n    bool public constant isInterestRateModel = true;\n\n    /**\n     * @notice Calculates the current borrow interest rate per block\n     * @param cash The total amount of cash the market has\n     * @param borrows The total amount of borrows the market has outstanding\n     * @param reserves The total amnount of reserves the market has\n     * @return The borrow rate per block (as a percentage, and scaled by 1e18)\n     */\n    function getBorrowRate(uint cash, uint borrows, uint reserves) external view returns (uint);\n\n    /**\n     * @notice Calculates the current supply interest rate per block\n     * @param cash The total amount of cash the market has\n     * @param borrows The total amount of borrows the market has outstanding\n     * @param reserves The total amnount of reserves the market has\n     * @param reserveFactorMantissa The current reserve factor the market has\n     * @return The supply rate per block (as a percentage, and scaled by 1e18)\n     */\n    function getSupplyRate(\n        uint cash,\n        uint borrows,\n        uint reserves,\n        uint reserveFactorMantissa\n    ) external view returns (uint);\n}\n"},"@venusprotocol/venus-protocol/contracts/test/BEP20.sol":{"content":"pragma solidity ^0.5.16;\n\nimport \"../Utils/SafeMath.sol\";\n\n// Mock import\nimport { GovernorBravoDelegate } from \"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\";\n\ninterface BEP20Base {\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    function totalSupply() external view returns (uint256);\n\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    function approve(address spender, uint256 value) external returns (bool);\n\n    function balanceOf(address who) external view returns (uint256);\n}\n\ncontract BEP20 is BEP20Base {\n    function transfer(address to, uint256 value) external returns (bool);\n\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n\ncontract BEP20NS is BEP20Base {\n    function transfer(address to, uint256 value) external;\n\n    function transferFrom(address from, address to, uint256 value) external;\n}\n\n/**\n * @title Standard BEP20 token\n * @dev Implementation of the basic standard token.\n *  See https://github.com/ethereum/EIPs/issues/20\n */\ncontract StandardToken is BEP20 {\n    using SafeMath for uint256;\n\n    string public name;\n    string public symbol;\n    uint8 public decimals;\n    uint256 public totalSupply;\n    mapping(address => mapping(address => uint256)) public allowance;\n    mapping(address => uint256) public balanceOf;\n\n    constructor(\n        uint256 _initialAmount,\n        string memory _tokenName,\n        uint8 _decimalUnits,\n        string memory _tokenSymbol\n    ) public {\n        totalSupply = _initialAmount;\n        balanceOf[msg.sender] = _initialAmount;\n        name = _tokenName;\n        symbol = _tokenSymbol;\n        decimals = _decimalUnits;\n    }\n\n    function transfer(address dst, uint256 amount) external returns (bool) {\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \"Insufficient balance\");\n        balanceOf[dst] = balanceOf[dst].add(amount, \"Balance overflow\");\n        emit Transfer(msg.sender, dst, amount);\n        return true;\n    }\n\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \"Insufficient allowance\");\n        balanceOf[src] = balanceOf[src].sub(amount, \"Insufficient balance\");\n        balanceOf[dst] = balanceOf[dst].add(amount, \"Balance overflow\");\n        emit Transfer(src, dst, amount);\n        return true;\n    }\n\n    function approve(address _spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][_spender] = amount;\n        emit Approval(msg.sender, _spender, amount);\n        return true;\n    }\n}\n\n/**\n * @title Non-Standard BEP20 token\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\n */\ncontract NonStandardToken is BEP20NS {\n    using SafeMath for uint256;\n\n    string public name;\n    uint8 public decimals;\n    string public symbol;\n    uint256 public totalSupply;\n    mapping(address => mapping(address => uint256)) public allowance;\n    mapping(address => uint256) public balanceOf;\n\n    constructor(\n        uint256 _initialAmount,\n        string memory _tokenName,\n        uint8 _decimalUnits,\n        string memory _tokenSymbol\n    ) public {\n        totalSupply = _initialAmount;\n        balanceOf[msg.sender] = _initialAmount;\n        name = _tokenName;\n        symbol = _tokenSymbol;\n        decimals = _decimalUnits;\n    }\n\n    function transfer(address dst, uint256 amount) external {\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \"Insufficient balance\");\n        balanceOf[dst] = balanceOf[dst].add(amount, \"Balance overflow\");\n        emit Transfer(msg.sender, dst, amount);\n    }\n\n    function transferFrom(address src, address dst, uint256 amount) external {\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \"Insufficient allowance\");\n        balanceOf[src] = balanceOf[src].sub(amount, \"Insufficient balance\");\n        balanceOf[dst] = balanceOf[dst].add(amount, \"Balance overflow\");\n        emit Transfer(src, dst, amount);\n    }\n\n    function approve(address _spender, uint256 amount) external returns (bool) {\n        allowance[msg.sender][_spender] = amount;\n        emit Approval(msg.sender, _spender, amount);\n        return true;\n    }\n}\n\ncontract BEP20Harness is StandardToken {\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\n    mapping(address => bool) public failTransferFromAddresses;\n\n    // To support testing, we allow the contract to always fail `transfer`.\n    mapping(address => bool) public failTransferToAddresses;\n\n    constructor(\n        uint256 _initialAmount,\n        string memory _tokenName,\n        uint8 _decimalUnits,\n        string memory _tokenSymbol\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\n\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\n        failTransferFromAddresses[src] = _fail;\n    }\n\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\n        failTransferToAddresses[dst] = _fail;\n    }\n\n    function harnessSetBalance(address _account, uint _amount) public {\n        balanceOf[_account] = _amount;\n    }\n\n    function transfer(address dst, uint256 amount) external returns (bool success) {\n        // Added for testing purposes\n        if (failTransferToAddresses[dst]) {\n            return false;\n        }\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \"Insufficient balance\");\n        balanceOf[dst] = balanceOf[dst].add(amount, \"Balance overflow\");\n        emit Transfer(msg.sender, dst, amount);\n        return true;\n    }\n\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\n        // Added for testing purposes\n        if (failTransferFromAddresses[src]) {\n            return false;\n        }\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \"Insufficient allowance\");\n        balanceOf[src] = balanceOf[src].sub(amount, \"Insufficient balance\");\n        balanceOf[dst] = balanceOf[dst].add(amount, \"Balance overflow\");\n        emit Transfer(src, dst, amount);\n        return true;\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol":{"content":"pragma solidity ^0.5.16;\n\nimport \"./BEP20.sol\";\n\n/**\n * @title The Venus Faucet Test Token\n * @author Venus\n * @notice A simple test token that lets anyone get more of it.\n */\ncontract FaucetToken is StandardToken {\n    constructor(\n        uint256 _initialAmount,\n        string memory _tokenName,\n        uint8 _decimalUnits,\n        string memory _tokenSymbol\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\n\n    function allocateTo(address _owner, uint256 value) public {\n        balanceOf[_owner] += value;\n        totalSupply += value;\n        emit Transfer(address(this), _owner, value);\n    }\n}\n\n/**\n * @title The Venus Faucet Test Token (non-standard)\n * @author Venus\n * @notice A simple test token that lets anyone get more of it.\n */\ncontract FaucetNonStandardToken is NonStandardToken {\n    constructor(\n        uint256 _initialAmount,\n        string memory _tokenName,\n        uint8 _decimalUnits,\n        string memory _tokenSymbol\n    ) public NonStandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\n\n    function allocateTo(address _owner, uint256 value) public {\n        balanceOf[_owner] += value;\n        totalSupply += value;\n        emit Transfer(address(this), _owner, value);\n    }\n}\n\n/**\n * @title The Venus Faucet Re-Entrant Test Token\n * @author Venus\n * @notice A test token that is malicious and tries to re-enter callers\n */\ncontract FaucetTokenReEntrantHarness {\n    using SafeMath for uint256;\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    string public name;\n    string public symbol;\n    uint8 public decimals;\n    uint256 internal totalSupply_;\n    mapping(address => mapping(address => uint256)) internal allowance_;\n    mapping(address => uint256) internal balanceOf_;\n\n    bytes public reEntryCallData;\n    string public reEntryFun;\n\n    constructor(\n        uint256 _initialAmount,\n        string memory _tokenName,\n        uint8 _decimalUnits,\n        string memory _tokenSymbol,\n        bytes memory _reEntryCallData,\n        string memory _reEntryFun\n    ) public {\n        totalSupply_ = _initialAmount;\n        balanceOf_[msg.sender] = _initialAmount;\n        name = _tokenName;\n        symbol = _tokenSymbol;\n        decimals = _decimalUnits;\n        reEntryCallData = _reEntryCallData;\n        reEntryFun = _reEntryFun;\n    }\n\n    modifier reEnter(string memory funName) {\n        string memory _reEntryFun = reEntryFun;\n        if (compareStrings(_reEntryFun, funName)) {\n            reEntryFun = \"\"; // Clear re-entry fun\n            (bool success, bytes memory returndata) = msg.sender.call(reEntryCallData);\n            assembly {\n                if eq(success, 0) {\n                    revert(add(returndata, 0x20), returndatasize())\n                }\n            }\n        }\n\n        _;\n    }\n\n    function compareStrings(string memory a, string memory b) internal pure returns (bool) {\n        return keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)));\n    }\n\n    function allocateTo(address _owner, uint256 value) public {\n        balanceOf_[_owner] += value;\n        totalSupply_ += value;\n        emit Transfer(address(this), _owner, value);\n    }\n\n    function totalSupply() public reEnter(\"totalSupply\") returns (uint256) {\n        return totalSupply_;\n    }\n\n    function allowance(address owner, address spender) public reEnter(\"allowance\") returns (uint256 remaining) {\n        return allowance_[owner][spender];\n    }\n\n    function approve(address spender, uint256 amount) public reEnter(\"approve\") returns (bool success) {\n        _approve(msg.sender, spender, amount);\n        return true;\n    }\n\n    function balanceOf(address owner) public reEnter(\"balanceOf\") returns (uint256 balance) {\n        return balanceOf_[owner];\n    }\n\n    function transfer(address dst, uint256 amount) public reEnter(\"transfer\") returns (bool success) {\n        _transfer(msg.sender, dst, amount);\n        return true;\n    }\n\n    function transferFrom(\n        address src,\n        address dst,\n        uint256 amount\n    ) public reEnter(\"transferFrom\") returns (bool success) {\n        _transfer(src, dst, amount);\n        _approve(src, msg.sender, allowance_[src][msg.sender].sub(amount));\n        return true;\n    }\n\n    function _approve(address owner, address spender, uint256 amount) internal {\n        require(spender != address(0), \"sender should be valid address\");\n        require(owner != address(0), \"owner should be valid address\");\n        allowance_[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    function _transfer(address src, address dst, uint256 amount) internal {\n        require(dst != address(0), \"dst should be valid address\");\n        balanceOf_[src] = balanceOf_[src].sub(amount);\n        balanceOf_[dst] = balanceOf_[dst].add(amount);\n        emit Transfer(src, dst, amount);\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol":{"content":"pragma solidity ^0.5.16;\n\nimport \"../InterestRateModels/InterestRateModel.sol\";\n\n/**\n * @title An Interest Rate Model for tests that can be instructed to return a failure instead of doing a calculation\n * @author Venus\n */\ncontract InterestRateModelHarness is InterestRateModel {\n    uint public constant opaqueBorrowFailureCode = 20;\n    bool public failBorrowRate;\n    uint public borrowRate;\n\n    constructor(uint borrowRate_) public {\n        borrowRate = borrowRate_;\n    }\n\n    function setFailBorrowRate(bool failBorrowRate_) public {\n        failBorrowRate = failBorrowRate_;\n    }\n\n    function setBorrowRate(uint borrowRate_) public {\n        borrowRate = borrowRate_;\n    }\n\n    function getBorrowRate(uint _cash, uint _borrows, uint _reserves) public view returns (uint) {\n        _cash; // unused\n        _borrows; // unused\n        _reserves; // unused\n        require(!failBorrowRate, \"INTEREST_RATE_MODEL_ERROR\");\n        return borrowRate;\n    }\n\n    function getSupplyRate(\n        uint _cash,\n        uint _borrows,\n        uint _reserves,\n        uint _reserveFactor\n    ) external view returns (uint) {\n        _cash; // unused\n        _borrows; // unused\n        _reserves; // unused\n        return borrowRate * (1 - _reserveFactor);\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/Utils/Address.sol":{"content":"pragma solidity ^0.5.5;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\n        // for accounts without code, i.e. `keccak256('')`\n        bytes32 codehash;\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            codehash := extcodehash(account)\n        }\n        return (codehash != accountHash && codehash != 0x0);\n    }\n\n    /**\n     * @dev Converts an `address` into `address payable`. Note that this is\n     * simply a type cast: the actual underlying value is not changed.\n     *\n     * _Available since v2.4.0._\n     */\n    function toPayable(address account) internal pure returns (address payable) {\n        return address(uint160(account));\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     *\n     * _Available since v2.4.0._\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        // solhint-disable-next-line avoid-call-value\n        // solium-disable-next-line security/no-call-value\n        (bool success, ) = recipient.call.value(amount)(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/Utils/Context.sol":{"content":"pragma solidity ^0.5.16;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\ncontract Context {\n    // Empty internal constructor, to prevent people from mistakenly deploying\n    // an instance of this contract, which should be used via inheritance.\n    constructor() internal {}\n\n    function _msgSender() internal view returns (address payable) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view returns (bytes memory) {\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n        return msg.data;\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol":{"content":"pragma solidity ^0.5.0;\n\n/**\n * @dev Interface of the BEP20 standard as defined in the EIP. Does not include\n * the optional functions; to access them see {BEP20Detailed}.\n */\ninterface IBEP20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n"},"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol":{"content":"pragma solidity ^0.5.16;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\ncontract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor() internal {\n        address msgSender = _msgSender();\n        _owner = msgSender;\n        emit OwnershipTransferred(address(0), msgSender);\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        require(_owner == _msgSender(), \"Ownable: caller is not the owner\");\n        _;\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby removing any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public onlyOwner {\n        emit OwnershipTransferred(_owner, address(0));\n        _owner = address(0);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public onlyOwner {\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     */\n    function _transferOwnership(address newOwner) internal {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        emit OwnershipTransferred(_owner, newOwner);\n        _owner = newOwner;\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/Utils/SafeBEP20.sol":{"content":"pragma solidity ^0.5.0;\n\nimport \"./SafeMath.sol\";\nimport \"./IBEP20.sol\";\nimport \"./Address.sol\";\n\n/**\n * @title SafeBEP20\n * @dev Wrappers around BEP20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeBEP20 for BEP20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeBEP20 {\n    using SafeMath for uint256;\n    using Address for address;\n\n    function safeTransfer(IBEP20 token, address to, uint256 value) internal {\n        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function safeTransferFrom(IBEP20 token, address from, address to, uint256 value) internal {\n        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    function safeApprove(IBEP20 token, address spender, uint256 value) internal {\n        // safeApprove should only be called when setting an initial allowance,\n        // or when resetting it to zero. To increase and decrease it, use\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n        // solhint-disable-next-line max-line-length\n        require(\n            (value == 0) || (token.allowance(address(this), spender) == 0),\n            \"SafeBEP20: approve from non-zero to non-zero allowance\"\n        );\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    function safeIncreaseAllowance(IBEP20 token, address spender, uint256 value) internal {\n        uint256 newAllowance = token.allowance(address(this), spender).add(value);\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    function safeDecreaseAllowance(IBEP20 token, address spender, uint256 value) internal {\n        uint256 newAllowance = token.allowance(address(this), spender).sub(\n            value,\n            \"SafeBEP20: decreased allowance below zero\"\n        );\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     */\n    function callOptionalReturn(IBEP20 token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves.\n\n        // A Solidity high level call has three parts:\n        //  1. The target address is checked to verify it contains contract code\n        //  2. The call itself is made, and success asserted\n        //  3. The return value is decoded, which in turn checks the size of the returned data.\n        // solhint-disable-next-line max-line-length\n        require(address(token).isContract(), \"SafeBEP20: call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = address(token).call(data);\n        require(success, \"SafeBEP20: low-level call failed\");\n\n        if (returndata.length > 0) {\n            // Return data is optional\n            // solhint-disable-next-line max-line-length\n            require(abi.decode(returndata, (bool)), \"SafeBEP20: BEP20 operation did not succeed\");\n        }\n    }\n}\n"},"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol":{"content":"pragma solidity ^0.5.16;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n    /**\n     * @dev Returns the addition of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `+` operator.\n     *\n     * Requirements:\n     * - Addition cannot overflow.\n     */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        return add(a, b, \"SafeMath: addition overflow\");\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     * - Subtraction cannot overflow.\n     */\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a, errorMessage);\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        return sub(a, b, \"SafeMath: subtraction overflow\");\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b <= a, errorMessage);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `*` operator.\n     *\n     * Requirements:\n     * - Multiplication cannot overflow.\n     */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b, \"SafeMath: multiplication overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers. Reverts on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        return div(a, b, \"SafeMath: division by zero\");\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        // Solidity only automatically asserts when dividing by 0\n        require(b > 0, errorMessage);\n        uint256 c = a / b;\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * Reverts when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        return mod(a, b, \"SafeMath: modulo by zero\");\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * Reverts with custom message when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b != 0, errorMessage);\n        return a % b;\n    }\n}\n"},"contracts/test/Imports-legacy.sol":{"content":"import { InterestRateModelHarness } from \"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol\";\n// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.5.16;\n\nimport { InterestRateModelHarness } from \"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol\";\nimport { FaucetToken } from \"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol\";\nimport { VTreasury } from \"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol\";\n"}},"settings":{"optimizer":{"enabled":true,"runs":200,"details":{"yul":false}},"outputSelection":{"*":{"*":["storageLayout","abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"errors":[{"component":"general","formattedMessage":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:2:1: Warning: Experimental features are turned on. Do not use experimental features on live deployments.\npragma experimental ABIEncoderV2;\n^-------------------------------^\n","message":"Experimental features are turned on. Do not use experimental features on live deployments.","severity":"warning","sourceLocation":{"end":58,"file":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol","start":25},"type":"Warning"},{"component":"general","formattedMessage":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:2:1: Warning: Experimental features are turned on. Do not use experimental features on live deployments.\npragma experimental ABIEncoderV2;\n^-------------------------------^\n","message":"Experimental features are turned on. Do not use experimental features on live deployments.","severity":"warning","sourceLocation":{"end":58,"file":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol","start":25},"type":"Warning"}],"sources":{"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol":{"ast":{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol","exportedSymbols":{"GovernorBravoDelegate":[1563]},"id":1564,"nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:0"},{"id":2,"literals":["experimental","ABIEncoderV2"],"nodeType":"PragmaDirective","src":"25:33:0"},{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol","file":"./GovernorBravoInterfaces.sol","id":3,"nodeType":"ImportDirective","scope":1564,"sourceUnit":1901,"src":"60:39:0","symbolAliases":[],"unitAlias":""},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":4,"name":"GovernorBravoDelegateStorageV3","nodeType":"UserDefinedTypeName","referencedDeclaration":1820,"src":"4615:30:0","typeDescriptions":{"typeIdentifier":"t_contract$_GovernorBravoDelegateStorageV3_$1820","typeString":"contract GovernorBravoDelegateStorageV3"}},"id":5,"nodeType":"InheritanceSpecifier","src":"4615:30:0"},{"arguments":null,"baseName":{"contractScope":null,"id":6,"name":"GovernorBravoEvents","nodeType":"UserDefinedTypeName","referencedDeclaration":1693,"src":"4647:19:0","typeDescriptions":{"typeIdentifier":"t_contract$_GovernorBravoEvents_$1693","typeString":"contract GovernorBravoEvents"}},"id":7,"nodeType":"InheritanceSpecifier","src":"4647:19:0"}],"contractDependencies":[1693,1700,1784,1806,1820],"contractKind":"contract","documentation":"@title GovernorBravoDelegate\n@notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\nVariable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\nimpact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\nwhich reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\n * ## Details\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\n- XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\ntokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\n * # Governor Bravo\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\n- Submit new proposal\n- Vote on a proposal\n- Cancel a proposal\n- Queue a proposal for execution with a timelock executor contract.\n`GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\n- A user's voting power must be greater than the `proposalThreshold` to submit a proposal\n- If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\ncancel a proposal at anytime before it is queued for execution.\n * ## Venus Improvement Proposal\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\nexecution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\nthat can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\n * - `NORMAL`\n- `FASTTRACK`\n- `CRITICAL`\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\n- `votingPeriod`: The number of blocks where voting will be open\n- `proposalThreshold`: The number of votes required in order submit a proposal\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\nflow of each type of VIP.\n * ## Voting\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\nafter the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\nweighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\ncomment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\n`castVoteBySig`.\n * ## Delegating\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\ntheir voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\nto let another user who they trust propose or vote in their place.\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\nvote delegation by calling the same function with a value of `0`.","fullyImplemented":true,"id":1563,"linearizedBaseContracts":[1563,1693,1820,1806,1784,1700],"name":"GovernorBravoDelegate","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":10,"name":"name","nodeType":"VariableDeclaration","scope":1563,"src":"4715:52:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory","typeString":"string"},"typeName":{"id":8,"name":"string","nodeType":"ElementaryTypeName","src":"4715:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"argumentTypes":null,"hexValue":"56656e757320476f7665726e6f7220427261766f","id":9,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4745:22:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_157d76627a3b71c0167806f5879f7a61d3e301322f3a3b9f900315f15937671a","typeString":"literal_string \"Venus Governor Bravo\""},"value":"Venus Governor Bravo"},"visibility":"public"},{"constant":true,"id":13,"name":"MIN_PROPOSAL_THRESHOLD","nodeType":"VariableDeclaration","scope":1563,"src":"4829:55:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11,"name":"uint","nodeType":"ElementaryTypeName","src":"4829:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"argumentTypes":null,"hexValue":"313530303030653138","id":12,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4875:9:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_150000000000000000000000_by_1","typeString":"int_const 150000000000000000000000"},"value":"150000e18"},"visibility":"public"},{"constant":true,"id":16,"name":"MAX_PROPOSAL_THRESHOLD","nodeType":"VariableDeclaration","scope":1563,"src":"4961:55:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14,"name":"uint","nodeType":"ElementaryTypeName","src":"4961:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"argumentTypes":null,"hexValue":"333030303030653138","id":15,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5007:9:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_300000000000000000000000_by_1","typeString":"int_const 300000000000000000000000"},"value":"300000e18"},"visibility":"public"},{"constant":true,"id":19,"name":"quorumVotes","nodeType":"VariableDeclaration","scope":1563,"src":"5169:44:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17,"name":"uint","nodeType":"ElementaryTypeName","src":"5169:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"argumentTypes":null,"hexValue":"363030303030653138","id":18,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5204:9:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_600000000000000000000000_by_1","typeString":"int_const 600000000000000000000000"},"value":"600000e18"},"visibility":"public"},{"constant":true,"id":24,"name":"DOMAIN_TYPEHASH","nodeType":"VariableDeclaration","scope":1563,"src":"5306:130:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":20,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5306:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":22,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5366:69:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866","typeString":"literal_string \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\""},"value":"EIP712Domain(string name,uint256 chainId,address verifyingContract)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866","typeString":"literal_string \"EIP712Domain(string name,uint256 chainId,address verifyingContract)\""}],"id":21,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"5356:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":23,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5356:80:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":true,"id":29,"name":"BALLOT_TYPEHASH","nodeType":"VariableDeclaration","scope":1563,"src":"5523:95:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5523:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820737570706f727429","id":27,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5575:42:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f","typeString":"literal_string \"Ballot(uint256 proposalId,uint8 support)\""},"value":"Ballot(uint256 proposalId,uint8 support)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f","typeString":"literal_string \"Ballot(uint256 proposalId,uint8 support)\""}],"id":26,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"5565:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":28,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5565:53:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"body":{"id":160,"nodeType":"Block","src":"6147:1306:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":53,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":46,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"6173:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":48,"indexExpression":{"argumentTypes":null,"hexValue":"30","id":47,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6191:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6173:20:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}],"id":45,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6165:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":49,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6165:29:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":51,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6206:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":50,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6198:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":52,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6198:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"6165:43:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e6e6f7420696e697469616c697a65207477696365","id":54,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6210:52:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_6f25ac680854b8c781b119c16680227155e4449b9a60b6c60ebf94217e242a05","typeString":"literal_string \"GovernorBravo::initialize: cannot initialize twice\""},"value":"GovernorBravo::initialize: cannot initialize twice"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6f25ac680854b8c781b119c16680227155e4449b9a60b6c60ebf94217e242a05","typeString":"literal_string \"GovernorBravo::initialize: cannot initialize twice\""}],"id":44,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"6157:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6157:106:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56,"nodeType":"ExpressionStatement","src":"6157:106:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":61,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":58,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"6281:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"6281:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":60,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"6295:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6281:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e206f6e6c79","id":62,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6302:39:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_6e47288757825adad4754037a004a97a318622f53744b99fe46d86485d9a8b20","typeString":"literal_string \"GovernorBravo::initialize: admin only\""},"value":"GovernorBravo::initialize: admin only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6e47288757825adad4754037a004a97a318622f53744b99fe46d86485d9a8b20","typeString":"literal_string \"GovernorBravo::initialize: admin only\""}],"id":57,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"6273:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6273:69:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64,"nodeType":"ExpressionStatement","src":"6273:69:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":70,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":66,"name":"xvsVault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31,"src":"6360:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":68,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6381:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":67,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6373:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":69,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6373:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"6360:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c696420787673207661756c742061646472657373","id":71,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6385:54:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_5ab034f1a77a9b76700fd7c58d31ab00d0df5756ff073b7bc6308cbb6e53ba63","typeString":"literal_string \"GovernorBravo::initialize: invalid xvs vault address\""},"value":"GovernorBravo::initialize: invalid xvs vault address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5ab034f1a77a9b76700fd7c58d31ab00d0df5756ff073b7bc6308cbb6e53ba63","typeString":"literal_string \"GovernorBravo::initialize: invalid xvs vault address\""}],"id":65,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"6352:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":72,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6352:88:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":73,"nodeType":"ExpressionStatement","src":"6352:88:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":79,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":75,"name":"guardian_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41,"src":"6458:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":77,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6479:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":76,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6471:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":78,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6471:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"6458:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c696420677561726469616e","id":80,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6483:45:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_b338c931b78836fd9f8d991c91d03bb69b9ce31c3938b98e6cf724626c475813","typeString":"literal_string \"GovernorBravo::initialize: invalid guardian\""},"value":"GovernorBravo::initialize: invalid guardian"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b338c931b78836fd9f8d991c91d03bb69b9ce31c3938b98e6cf724626c475813","typeString":"literal_string \"GovernorBravo::initialize: invalid guardian\""}],"id":74,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"6450:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":81,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6450:79:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":82,"nodeType":"ExpressionStatement","src":"6450:79:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":88,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":84,"name":"timelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39,"src":"6560:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_TimelockInterface_$1884_$dyn_memory_ptr","typeString":"contract TimelockInterface[] memory"}},"id":85,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"6560:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"id":86,"name":"getGovernanceRouteCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1562,"src":"6580:23:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":87,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6580:25:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6560:45:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a696e697469616c697a653a6e756d626572206f662074696d656c6f636b732073686f756c64206d61746368206e756d626572206f6620676f7665726e616e636520726f75746573","id":89,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6619:88:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_2cbe57922e8750dfed644cdf2c609422aa63934a21c1a15af3627d7d8d8b5c40","typeString":"literal_string \"GovernorBravo::initialize:number of timelocks should match number of governance routes\""},"value":"GovernorBravo::initialize:number of timelocks should match number of governance routes"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2cbe57922e8750dfed644cdf2c609422aa63934a21c1a15af3627d7d8d8b5c40","typeString":"literal_string \"GovernorBravo::initialize:number of timelocks should match number of governance routes\""}],"id":83,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"6539:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":90,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6539:178:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":91,"nodeType":"ExpressionStatement","src":"6539:178:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":97,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":93,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36,"src":"6748:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":94,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"6748:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"id":95,"name":"getGovernanceRouteCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1562,"src":"6775:23:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":96,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6775:25:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6748:52:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a696e697469616c697a653a6e756d626572206f662070726f706f73616c20636f6e666967732073686f756c64206d61746368206e756d626572206f6620676f7665726e616e636520726f75746573","id":98,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6814:95:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_ed7e6cd98a98fd39ec52e1875c12a0ba22b6df90076227f657dd19c7008e88d5","typeString":"literal_string \"GovernorBravo::initialize:number of proposal configs should match number of governance routes\""},"value":"GovernorBravo::initialize:number of proposal configs should match number of governance routes"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ed7e6cd98a98fd39ec52e1875c12a0ba22b6df90076227f657dd19c7008e88d5","typeString":"literal_string \"GovernorBravo::initialize:number of proposal configs should match number of governance routes\""}],"id":92,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"6727:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":99,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6727:192:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":100,"nodeType":"ExpressionStatement","src":"6727:192:0"},{"expression":{"argumentTypes":null,"id":105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":101,"name":"xvsVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1716,"src":"6930:8:0","typeDescriptions":{"typeIdentifier":"t_contract$_XvsVaultInterface_$1894","typeString":"contract XvsVaultInterface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":103,"name":"xvsVault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31,"src":"6959:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":102,"name":"XvsVaultInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1894,"src":"6941:17:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_XvsVaultInterface_$1894_$","typeString":"type(contract XvsVaultInterface)"}},"id":104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6941:28:0","typeDescriptions":{"typeIdentifier":"t_contract$_XvsVaultInterface_$1894","typeString":"contract XvsVaultInterface"}},"src":"6930:39:0","typeDescriptions":{"typeIdentifier":"t_contract$_XvsVaultInterface_$1894","typeString":"contract XvsVaultInterface"}},"id":106,"nodeType":"ExpressionStatement","src":"6930:39:0"},{"expression":{"argumentTypes":null,"id":109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":107,"name":"proposalMaxOperations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1781,"src":"6979:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"hexValue":"3130","id":108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7003:2:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"6979:26:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":110,"nodeType":"ExpressionStatement","src":"6979:26:0"},{"expression":{"argumentTypes":null,"id":113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":111,"name":"guardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1783,"src":"7015:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":112,"name":"guardian_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41,"src":"7026:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7015:20:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":114,"nodeType":"ExpressionStatement","src":"7015:20:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":116,"name":"validationParams_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"7118:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}],"id":115,"name":"setValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":223,"src":"7098:19:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ValidationParams_$1817_memory_ptr_$returns$__$","typeString":"function (struct GovernorBravoDelegateStorageV3.ValidationParams memory)"}},"id":117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7098:38:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":118,"nodeType":"ExpressionStatement","src":"7098:38:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":120,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36,"src":"7165:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}],"id":119,"name":"setProposalConfigs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":372,"src":"7146:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr_$returns$__$","typeString":"function (struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory)"}},"id":121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7146:36:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":122,"nodeType":"ExpressionStatement","src":"7146:36:0"},{"assignments":[124],"declarations":[{"constant":false,"id":124,"name":"arrLength","nodeType":"VariableDeclaration","scope":160,"src":"7193:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":123,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":127,"initialValue":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":125,"name":"timelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39,"src":"7213:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_TimelockInterface_$1884_$dyn_memory_ptr","typeString":"contract TimelockInterface[] memory"}},"id":126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"7213:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7193:36:0"},{"body":{"id":158,"nodeType":"Block","src":"7275:172:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":139,"name":"timelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39,"src":"7305:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_TimelockInterface_$1884_$dyn_memory_ptr","typeString":"contract TimelockInterface[] memory"}},"id":141,"indexExpression":{"argumentTypes":null,"id":140,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"7315:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7305:12:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}],"id":138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7297:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7297:21:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7330:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7322:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7322:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"7297:35:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a696e697469616c697a653a696e76616c69642074696d656c6f636b2061646472657373","id":147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7334:52:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_b8067cd3d222ecf6e5c0d3ecc90f1955f3fe41146bbafa2a4e3a0409914f3f29","typeString":"literal_string \"GovernorBravo::initialize:invalid timelock address\""},"value":"GovernorBravo::initialize:invalid timelock address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b8067cd3d222ecf6e5c0d3ecc90f1955f3fe41146bbafa2a4e3a0409914f3f29","typeString":"literal_string \"GovernorBravo::initialize:invalid timelock address\""}],"id":137,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"7289:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7289:98:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":149,"nodeType":"ExpressionStatement","src":"7289:98:0"},{"expression":{"argumentTypes":null,"id":156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":150,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"7401:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":152,"indexExpression":{"argumentTypes":null,"id":151,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"7419:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7401:20:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":153,"name":"timelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39,"src":"7424:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_TimelockInterface_$1884_$dyn_memory_ptr","typeString":"contract TimelockInterface[] memory"}},"id":155,"indexExpression":{"argumentTypes":null,"id":154,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"7434:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7424:12:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"src":"7401:35:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":157,"nodeType":"ExpressionStatement","src":"7401:35:0"}]},"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":131,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"7255:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"id":132,"name":"arrLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":124,"src":"7259:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7255:13:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":159,"initializationExpression":{"assignments":[129],"declarations":[{"constant":false,"id":129,"name":"i","nodeType":"VariableDeclaration","scope":159,"src":"7244:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":128,"name":"uint256","nodeType":"ElementaryTypeName","src":"7244:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":130,"initialValue":null,"nodeType":"VariableDeclarationStatement","src":"7244:9:0"},"loopExpression":{"expression":{"argumentTypes":null,"id":135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7270:3:0","subExpression":{"argumentTypes":null,"id":134,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"7272:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":136,"nodeType":"ExpressionStatement","src":"7270:3:0"},"nodeType":"ForStatement","src":"7239:208:0"}]},"documentation":"@notice Used to initialize the contract during delegator contructor\n@param xvsVault_ The address of the XvsVault\n@param proposalConfigs_ Governance configs for each governance route\n@param timelocks Timelock addresses for each governance route","id":161,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nodeType":"FunctionDefinition","parameters":{"id":42,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31,"name":"xvsVault_","nodeType":"VariableDeclaration","scope":161,"src":"5942:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30,"name":"address","nodeType":"ElementaryTypeName","src":"5942:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":33,"name":"validationParams_","nodeType":"VariableDeclaration","scope":161,"src":"5969:41:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams"},"typeName":{"contractScope":null,"id":32,"name":"ValidationParams","nodeType":"UserDefinedTypeName","referencedDeclaration":1817,"src":"5969:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams"}},"value":null,"visibility":"internal"},{"constant":false,"id":36,"name":"proposalConfigs_","nodeType":"VariableDeclaration","scope":161,"src":"6020:40:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig[]"},"typeName":{"baseType":{"contractScope":null,"id":34,"name":"ProposalConfig","nodeType":"UserDefinedTypeName","referencedDeclaration":1797,"src":"6020:14:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig"}},"id":35,"length":null,"nodeType":"ArrayTypeName","src":"6020:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_storage_$dyn_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":39,"name":"timelocks","nodeType":"VariableDeclaration","scope":161,"src":"6070:36:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_TimelockInterface_$1884_$dyn_memory_ptr","typeString":"contract TimelockInterface[]"},"typeName":{"baseType":{"contractScope":null,"id":37,"name":"TimelockInterface","nodeType":"UserDefinedTypeName","referencedDeclaration":1884,"src":"6070:17:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":38,"length":null,"nodeType":"ArrayTypeName","src":"6070:19:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_TimelockInterface_$1884_$dyn_storage_ptr","typeString":"contract TimelockInterface[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":41,"name":"guardian_","nodeType":"VariableDeclaration","scope":161,"src":"6116:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40,"name":"address","nodeType":"ElementaryTypeName","src":"6116:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"5932:207:0"},"returnParameters":{"id":43,"nodeType":"ParameterList","parameters":[],"src":"6147:0:0"},"scope":1563,"src":"5913:1540:0","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":222,"nodeType":"Block","src":"7739:951:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":167,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"7757:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"7757:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":169,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"7771:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7757:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657456616c69646174696f6e506172616d733a2061646d696e206f6e6c79","id":171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7778:48:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_9249543d475667ab11a15df0c696ac156e6f321ce45279cb4ce2779d4b2a0777","typeString":"literal_string \"GovernorBravo::setValidationParams: admin only\""},"value":"GovernorBravo::setValidationParams: admin only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9249543d475667ab11a15df0c696ac156e6f321ce45279cb4ce2779d4b2a0777","typeString":"literal_string \"GovernorBravo::setValidationParams: admin only\""}],"id":166,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"7749:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7749:78:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":173,"nodeType":"ExpressionStatement","src":"7749:78:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":175,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"7858:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1810,"src":"7858:35:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7896:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7858:39:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":179,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"7917:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1814,"src":"7917:34:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7954:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7917:38:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7858:97:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":184,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"7975:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1814,"src":"7975:34:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":186,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"8012:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1816,"src":"8012:34:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7975:71:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7858:188:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":190,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"8066:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1810,"src":"8066:35:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":192,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"8104:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1812,"src":"8104:35:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8066:73:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7858:281:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657456616c69646174696f6e506172616d733a20696e76616c696420706172616d73","id":196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8153:52:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_cd364ff71d1c9ccb9fb26ff33a8b50c10bbe4e457b608b727daf24b0b8c2c10a","typeString":"literal_string \"GovernorBravo::setValidationParams: invalid params\""},"value":"GovernorBravo::setValidationParams: invalid params"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cd364ff71d1c9ccb9fb26ff33a8b50c10bbe4e457b608b727daf24b0b8c2c10a","typeString":"literal_string \"GovernorBravo::setValidationParams: invalid params\""}],"id":174,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"7837:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7837:378:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":198,"nodeType":"ExpressionStatement","src":"7837:378:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":200,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"8263:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":201,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1810,"src":"8263:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":202,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"8309:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":203,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1810,"src":"8309:35:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":204,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"8358:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1812,"src":"8358:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":206,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"8404:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1812,"src":"8404:35:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":208,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"8453:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1814,"src":"8453:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":210,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"8498:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1814,"src":"8498:34:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":212,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"8546:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1816,"src":"8546:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":214,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"8591:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"id":215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1816,"src":"8591:34:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":199,"name":"SetValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1684,"src":"8230:19:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8230:405:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":217,"nodeType":"EmitStatement","src":"8225:410:0"},{"expression":{"argumentTypes":null,"id":220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":218,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"8645:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":219,"name":"newValidationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":163,"src":"8664:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams memory"}},"src":"8645:38:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":221,"nodeType":"ExpressionStatement","src":"8645:38:0"}]},"documentation":"** @notice Sets the validation parameters for voting delay and voting period** @param newValidationParams Struct containing new minimum and maximum voting period and delay","id":223,"implemented":true,"kind":"function","modifiers":[],"name":"setValidationParams","nodeType":"FunctionDefinition","parameters":{"id":164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":163,"name":"newValidationParams","nodeType":"VariableDeclaration","scope":223,"src":"7687:43:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams"},"typeName":{"contractScope":null,"id":162,"name":"ValidationParams","nodeType":"UserDefinedTypeName","referencedDeclaration":1817,"src":"7687:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams"}},"value":null,"visibility":"internal"}],"src":"7686:45:0"},"returnParameters":{"id":165,"nodeType":"ParameterList","parameters":[],"src":"7739:0:0"},"scope":1563,"src":"7658:1032:0","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":371,"nodeType":"Block","src":"9058:2153:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":230,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"9076:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"9076:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":232,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"9090:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9076:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a2061646d696e206f6e6c79","id":234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9097:47:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_61c3f808b5608b95fe2ffe63aac48147971bbba021cb60a3575a2f00ad1acfb9","typeString":"literal_string \"GovernorBravo::setProposalConfigs: admin only\""},"value":"GovernorBravo::setProposalConfigs: admin only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_61c3f808b5608b95fe2ffe63aac48147971bbba021cb60a3575a2f00ad1acfb9","typeString":"literal_string \"GovernorBravo::setProposalConfigs: admin only\""}],"id":229,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"9068:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9068:77:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":236,"nodeType":"ExpressionStatement","src":"9068:77:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":238,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"9176:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1810,"src":"9176:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9211:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9176:36:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":242,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"9232:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1812,"src":"9232:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":244,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9267:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9232:36:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9176:92:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":247,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"9288:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1814,"src":"9288:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9322:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9288:35:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9176:147:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":252,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"9343:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1816,"src":"9343:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9377:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9343:35:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9176:202:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a2076616c69646174696f6e20706172616d73206e6f7420636f6e6669677572656420796574","id":257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9392:73:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_13f7dd7828bf10bc6ba8c05b8552739593d8700d84a90bf37cfea7435c1b98bf","typeString":"literal_string \"GovernorBravo::setProposalConfigs: validation params not configured yet\""},"value":"GovernorBravo::setProposalConfigs: validation params not configured yet"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13f7dd7828bf10bc6ba8c05b8552739593d8700d84a90bf37cfea7435c1b98bf","typeString":"literal_string \"GovernorBravo::setProposalConfigs: validation params not configured yet\""}],"id":237,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"9155:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9155:320:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":259,"nodeType":"ExpressionStatement","src":"9155:320:0"},{"assignments":[261],"declarations":[{"constant":false,"id":261,"name":"arrLength","nodeType":"VariableDeclaration","scope":371,"src":"9485:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":260,"name":"uint256","nodeType":"ElementaryTypeName","src":"9485:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":264,"initialValue":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":262,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"9505:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"9505:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9485:43:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":266,"name":"arrLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"9559:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"id":267,"name":"getGovernanceRouteCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1562,"src":"9572:23:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9572:25:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9559:38:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a20696e76616c69642070726f706f73616c20636f6e666967206c656e677468","id":270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9611:67:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_071b71d63813d4a31b341b84998bd3de464acb320be495a258f57e3250d26460","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid proposal config length\""},"value":"GovernorBravo::setProposalConfigs: invalid proposal config length"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_071b71d63813d4a31b341b84998bd3de464acb320be495a258f57e3250d26460","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid proposal config length\""}],"id":265,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"9538:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9538:150:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":272,"nodeType":"ExpressionStatement","src":"9538:150:0"},{"body":{"id":369,"nodeType":"Block","src":"9734:1471:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":283,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"9773:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":285,"indexExpression":{"argumentTypes":null,"id":284,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"9790:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9773:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"votingPeriod","nodeType":"MemberAccess","referencedDeclaration":1794,"src":"9773:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":287,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"9809:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1810,"src":"9809:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9773:68:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a20696e76616c6964206d696e20766f74696e6720706572696f64","id":290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9859:62:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_288a3f3cb7aa52f5b61db10635c290ffb8916c269372f6fb7f83afc80370224c","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid min voting period\""},"value":"GovernorBravo::setProposalConfigs: invalid min voting period"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_288a3f3cb7aa52f5b61db10635c290ffb8916c269372f6fb7f83afc80370224c","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid min voting period\""}],"id":282,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"9748:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9748:187:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":292,"nodeType":"ExpressionStatement","src":"9748:187:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":294,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"9974:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":296,"indexExpression":{"argumentTypes":null,"id":295,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"9991:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9974:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":297,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"votingPeriod","nodeType":"MemberAccess","referencedDeclaration":1794,"src":"9974:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":298,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"10010:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingPeriod","nodeType":"MemberAccess","referencedDeclaration":1812,"src":"10010:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9974:68:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a20696e76616c6964206d617820766f74696e6720706572696f64","id":301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10060:62:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_fa35c580255f15542f061ad4601fd20b6c551ec182a551e8edfd451496850794","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid max voting period\""},"value":"GovernorBravo::setProposalConfigs: invalid max voting period"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fa35c580255f15542f061ad4601fd20b6c551ec182a551e8edfd451496850794","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid max voting period\""}],"id":293,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"9949:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9949:187:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":303,"nodeType":"ExpressionStatement","src":"9949:187:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":305,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"10175:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":307,"indexExpression":{"argumentTypes":null,"id":306,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"10192:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10175:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":308,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"votingDelay","nodeType":"MemberAccess","referencedDeclaration":1792,"src":"10175:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":309,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"10210:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":310,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"minVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1814,"src":"10210:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10175:66:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a20696e76616c6964206d696e20766f74696e672064656c6179","id":312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10259:61:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_a21aea780f1010450247b8365866570e34672d8247a00443eea188e5ef73a6ba","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid min voting delay\""},"value":"GovernorBravo::setProposalConfigs: invalid min voting delay"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a21aea780f1010450247b8365866570e34672d8247a00443eea188e5ef73a6ba","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid min voting delay\""}],"id":304,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"10150:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10150:184:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":314,"nodeType":"ExpressionStatement","src":"10150:184:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":316,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"10373:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":318,"indexExpression":{"argumentTypes":null,"id":317,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"10390:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10373:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"votingDelay","nodeType":"MemberAccess","referencedDeclaration":1792,"src":"10373:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":320,"name":"validationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1819,"src":"10408:16:0","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams storage ref"}},"id":321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxVotingDelay","nodeType":"MemberAccess","referencedDeclaration":1816,"src":"10408:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10373:66:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a20696e76616c6964206d617820766f74696e672064656c6179","id":323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10457:61:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_9594eeae41e4e8cc242e5f508cbdf21e9da924817d8c9baa86a7b47681829e11","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid max voting delay\""},"value":"GovernorBravo::setProposalConfigs: invalid max voting delay"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9594eeae41e4e8cc242e5f508cbdf21e9da924817d8c9baa86a7b47681829e11","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid max voting delay\""}],"id":315,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"10348:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10348:184:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":325,"nodeType":"ExpressionStatement","src":"10348:184:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":327,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"10571:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":329,"indexExpression":{"argumentTypes":null,"id":328,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"10588:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10571:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":330,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalThreshold","nodeType":"MemberAccess","referencedDeclaration":1796,"src":"10571:37:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":331,"name":"MIN_PROPOSAL_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"10612:22:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10571:63:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a20696e76616c6964206d696e2070726f706f73616c207468726573686f6c64","id":333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10652:67:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_e68ad4824d0f6bf4ad43061ea0313645f403d31589a51d69273a3988fdd34db5","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid min proposal threshold\""},"value":"GovernorBravo::setProposalConfigs: invalid min proposal threshold"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e68ad4824d0f6bf4ad43061ea0313645f403d31589a51d69273a3988fdd34db5","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid min proposal threshold\""}],"id":326,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"10546:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10546:187:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":335,"nodeType":"ExpressionStatement","src":"10546:187:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":337,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"10772:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":339,"indexExpression":{"argumentTypes":null,"id":338,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"10789:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10772:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":340,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalThreshold","nodeType":"MemberAccess","referencedDeclaration":1796,"src":"10772:37:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"id":341,"name":"MAX_PROPOSAL_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16,"src":"10813:22:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10772:63:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967733a20696e76616c6964206d61782070726f706f73616c207468726573686f6c64","id":343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10853:67:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_079c8cdbb783e360009b093884e2fa0239819e80f7446387c8b96e628005976d","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid max proposal threshold\""},"value":"GovernorBravo::setProposalConfigs: invalid max proposal threshold"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_079c8cdbb783e360009b093884e2fa0239819e80f7446387c8b96e628005976d","typeString":"literal_string \"GovernorBravo::setProposalConfigs: invalid max proposal threshold\""}],"id":336,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"10747:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10747:187:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":345,"nodeType":"ExpressionStatement","src":"10747:187:0"},{"expression":{"argumentTypes":null,"id":352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":346,"name":"proposalConfigs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1801,"src":"10949:15:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ProposalConfig_$1797_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref)"}},"id":348,"indexExpression":{"argumentTypes":null,"id":347,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"10965:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10949:18:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":349,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"10970:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":351,"indexExpression":{"argumentTypes":null,"id":350,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"10987:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10970:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"src":"10949:40:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref"}},"id":353,"nodeType":"ExpressionStatement","src":"10949:40:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":355,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"11044:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":357,"indexExpression":{"argumentTypes":null,"id":356,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"11061:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11044:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":358,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"votingPeriod","nodeType":"MemberAccess","referencedDeclaration":1794,"src":"11044:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":359,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"11094:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":361,"indexExpression":{"argumentTypes":null,"id":360,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"11111:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11094:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":362,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"votingDelay","nodeType":"MemberAccess","referencedDeclaration":1792,"src":"11094:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":363,"name":"proposalConfigs_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"11143:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory[] memory"}},"id":365,"indexExpression":{"argumentTypes":null,"id":364,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"11160:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11143:19:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_memory","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig memory"}},"id":366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalThreshold","nodeType":"MemberAccess","referencedDeclaration":1796,"src":"11143:37:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":354,"name":"SetProposalConfigs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1692,"src":"11008:18:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256)"}},"id":367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11008:186:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":368,"nodeType":"EmitStatement","src":"11003:191:0"}]},"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":276,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"9714:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"id":277,"name":"arrLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"9718:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9714:13:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":370,"initializationExpression":{"assignments":[274],"declarations":[{"constant":false,"id":274,"name":"i","nodeType":"VariableDeclaration","scope":370,"src":"9703:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":273,"name":"uint256","nodeType":"ElementaryTypeName","src":"9703:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":275,"initialValue":null,"nodeType":"VariableDeclarationStatement","src":"9703:9:0"},"loopExpression":{"expression":{"argumentTypes":null,"id":280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9729:3:0","subExpression":{"argumentTypes":null,"id":279,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":274,"src":"9731:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":281,"nodeType":"ExpressionStatement","src":"9729:3:0"},"nodeType":"ForStatement","src":"9698:1507:0"}]},"documentation":"** @notice Sets the configuration for different proposal types** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types** @param proposalConfigs_ Array of proposal configuration structs to update","id":372,"implemented":true,"kind":"function","modifiers":[],"name":"setProposalConfigs","nodeType":"FunctionDefinition","parameters":{"id":227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":226,"name":"proposalConfigs_","nodeType":"VariableDeclaration","scope":372,"src":"9009:40:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_memory_$dyn_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig[]"},"typeName":{"baseType":{"contractScope":null,"id":224,"name":"ProposalConfig","nodeType":"UserDefinedTypeName","referencedDeclaration":1797,"src":"9009:14:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig"}},"id":225,"length":null,"nodeType":"ArrayTypeName","src":"9009:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ProposalConfig_$1797_storage_$dyn_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig[]"}},"value":null,"visibility":"internal"}],"src":"9008:42:0"},"returnParameters":{"id":228,"nodeType":"ParameterList","parameters":[],"src":"9058:0:0"},"scope":1563,"src":"8981:2230:0","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":578,"nodeType":"Block","src":"12296:2667:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":394,"name":"initialProposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1710,"src":"12372:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"hexValue":"30","id":395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12393:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12372:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7220427261766f206e6f7420616374697665","id":397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12396:51:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_2f7689ed1f85dde3dc8971cd363eb00503765913f120e6240508da9a370f15c7","typeString":"literal_string \"GovernorBravo::propose: Governor Bravo not active\""},"value":"GovernorBravo::propose: Governor Bravo not active"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2f7689ed1f85dde3dc8971cd363eb00503765913f120e6240508da9a370f15c7","typeString":"literal_string \"GovernorBravo::propose: Governor Bravo not active\""}],"id":393,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"12364:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12364:84:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":399,"nodeType":"ExpressionStatement","src":"12364:84:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":403,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"12502:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12502:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":406,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4020,"src":"12521:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"number","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12521:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"31","id":408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12535:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":405,"name":"sub256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1537,"src":"12514:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12514:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":401,"name":"xvsVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1716,"src":"12479:8:0","typeDescriptions":{"typeIdentifier":"t_contract$_XvsVaultInterface_$1894","typeString":"contract XvsVaultInterface"}},"id":402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriorVotes","nodeType":"MemberAccess","referencedDeclaration":1893,"src":"12479:22:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint96_$","typeString":"function (address,uint256) view external returns (uint96)"}},"id":410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12479:59:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":411,"name":"proposalConfigs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1801,"src":"12558:15:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ProposalConfig_$1797_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref)"}},"id":415,"indexExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":413,"name":"proposalType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":388,"src":"12580:12:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}],"id":412,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12574:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12574:19:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12558:36:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref"}},"id":416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalThreshold","nodeType":"MemberAccess","referencedDeclaration":1796,"src":"12558:54:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12479:133:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657220766f7465732062656c6f772070726f706f73616c207468726573686f6c64","id":418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12626:65:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_cce33201973389eb5d5eadb02095f9ccc730733696a536c64362c77126b5086b","typeString":"literal_string \"GovernorBravo::propose: proposer votes below proposal threshold\""},"value":"GovernorBravo::propose: proposer votes below proposal threshold"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cce33201973389eb5d5eadb02095f9ccc730733696a536c64362c77126b5086b","typeString":"literal_string \"GovernorBravo::propose: proposer votes below proposal threshold\""}],"id":400,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"12458:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12458:243:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":420,"nodeType":"ExpressionStatement","src":"12458:243:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":422,"name":"targets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"12732:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12732:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":424,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"12750:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12750:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12732:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":427,"name":"targets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"12783:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12783:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":429,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":381,"src":"12801:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12801:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12783:35:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12732:86:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":433,"name":"targets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"12838:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12838:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":435,"name":"calldatas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":384,"src":"12856:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12856:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12838:34:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12732:140:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d61746368","id":439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12886:70:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_69621e97c5d982910ff5cd550f5bc5eae1e6396f0f2af9267879c186d483c16b","typeString":"literal_string \"GovernorBravo::propose: proposal function information arity mismatch\""},"value":"GovernorBravo::propose: proposal function information arity mismatch"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_69621e97c5d982910ff5cd550f5bc5eae1e6396f0f2af9267879c186d483c16b","typeString":"literal_string \"GovernorBravo::propose: proposal function information arity mismatch\""}],"id":421,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"12711:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12711:255:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":441,"nodeType":"ExpressionStatement","src":"12711:255:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":443,"name":"targets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"12984:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"12984:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"hexValue":"30","id":445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13002:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12984:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f7669646520616374696f6e73","id":447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13005:46:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_942e2bb983822c6256804c0e2d65587399729d07b6b48b9e3fe435de5044b803","typeString":"literal_string \"GovernorBravo::propose: must provide actions\""},"value":"GovernorBravo::propose: must provide actions"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_942e2bb983822c6256804c0e2d65587399729d07b6b48b9e3fe435de5044b803","typeString":"literal_string \"GovernorBravo::propose: must provide actions\""}],"id":442,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"12976:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12976:76:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":449,"nodeType":"ExpressionStatement","src":"12976:76:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":451,"name":"targets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"13070:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"13070:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"id":453,"name":"proposalMaxOperations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1781,"src":"13088:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13070:39:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7920616374696f6e73","id":455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13111:42:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_b54d69ba9f9abad90f1f013b8ab5a1d9b4c579f5bc801e2709d01ada775467a3","typeString":"literal_string \"GovernorBravo::propose: too many actions\""},"value":"GovernorBravo::propose: too many actions"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b54d69ba9f9abad90f1f013b8ab5a1d9b4c579f5bc801e2709d01ada775467a3","typeString":"literal_string \"GovernorBravo::propose: too many actions\""}],"id":450,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"13062:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13062:92:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":457,"nodeType":"ExpressionStatement","src":"13062:92:0"},{"assignments":[459],"declarations":[{"constant":false,"id":459,"name":"latestProposalId","nodeType":"VariableDeclaration","scope":578,"src":"13165:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":458,"name":"uint","nodeType":"ElementaryTypeName","src":"13165:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":464,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":460,"name":"latestProposalIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1724,"src":"13189:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":463,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":461,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"13207:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"13207:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13189:29:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13165:53:0"},{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":465,"name":"latestProposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":459,"src":"13232:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"hexValue":"30","id":466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13252:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13232:21:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":491,"nodeType":"IfStatement","src":"13228:548:0","trueBody":{"id":490,"nodeType":"Block","src":"13255:521:0","statements":[{"assignments":[469],"declarations":[{"constant":false,"id":469,"name":"proposersLatestProposalState","nodeType":"VariableDeclaration","scope":490,"src":"13269:42:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"},"typeName":{"contractScope":null,"id":468,"name":"ProposalState","nodeType":"UserDefinedTypeName","referencedDeclaration":1779,"src":"13269:13:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"value":null,"visibility":"internal"}],"id":473,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":471,"name":"latestProposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":459,"src":"13320:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":470,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1043,"src":"13314:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_enum$_ProposalState_$1779_$","typeString":"function (uint256) view returns (enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13314:23:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"nodeType":"VariableDeclarationStatement","src":"13269:68:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"},"id":478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":475,"name":"proposersLatestProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":469,"src":"13376:28:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":476,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"13408:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Active","nodeType":"MemberAccess","referencedDeclaration":null,"src":"13408:20:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"src":"13376:52:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c6976652070726f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c7265616479206163746976652070726f706f73616c","id":479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13446:90:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_c50c351fb39a3fd6000549d303eb3b76f9e50a4f12a9fca3ac5b1e05e941e83d","typeString":"literal_string \"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\""},"value":"GovernorBravo::propose: one live proposal per proposer, found an already active proposal"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c50c351fb39a3fd6000549d303eb3b76f9e50a4f12a9fca3ac5b1e05e941e83d","typeString":"literal_string \"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\""}],"id":474,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"13351:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13351:199:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":481,"nodeType":"ExpressionStatement","src":"13351:199:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"},"id":486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":483,"name":"proposersLatestProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":469,"src":"13589:28:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":484,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"13621:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Pending","nodeType":"MemberAccess","referencedDeclaration":null,"src":"13621:21:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"src":"13589:53:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c6976652070726f706f73616c207065722070726f706f7365722c20666f756e6420616e20616c72656164792070656e64696e672070726f706f73616c","id":487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13660:91:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_b68c77fe71de4f5cded2058593f89b465f4c2da104481b127e1b9b6156e12ee0","typeString":"literal_string \"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\""},"value":"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b68c77fe71de4f5cded2058593f89b465f4c2da104481b127e1b9b6156e12ee0","typeString":"literal_string \"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\""}],"id":482,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"13564:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13564:201:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":489,"nodeType":"ExpressionStatement","src":"13564:201:0"}]}},{"assignments":[493],"declarations":[{"constant":false,"id":493,"name":"startBlock","nodeType":"VariableDeclaration","scope":578,"src":"13786:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":492,"name":"uint","nodeType":"ElementaryTypeName","src":"13786:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":504,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":495,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4020,"src":"13811:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"number","nodeType":"MemberAccess","referencedDeclaration":null,"src":"13811:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":497,"name":"proposalConfigs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1801,"src":"13825:15:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ProposalConfig_$1797_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref)"}},"id":501,"indexExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":499,"name":"proposalType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":388,"src":"13847:12:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}],"id":498,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13841:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13841:19:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13825:36:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref"}},"id":502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"votingDelay","nodeType":"MemberAccess","referencedDeclaration":1792,"src":"13825:48:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":494,"name":"add256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"13804:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13804:70:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13786:88:0"},{"assignments":[506],"declarations":[{"constant":false,"id":506,"name":"endBlock","nodeType":"VariableDeclaration","scope":578,"src":"13884:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":505,"name":"uint","nodeType":"ElementaryTypeName","src":"13884:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":516,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":508,"name":"startBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":493,"src":"13907:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":509,"name":"proposalConfigs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1801,"src":"13919:15:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ProposalConfig_$1797_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref)"}},"id":513,"indexExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":511,"name":"proposalType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":388,"src":"13941:12:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}],"id":510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13935:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13935:19:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13919:36:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref"}},"id":514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"votingPeriod","nodeType":"MemberAccess","referencedDeclaration":1794,"src":"13919:49:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":507,"name":"add256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"13900:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13900:69:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13884:85:0"},{"expression":{"argumentTypes":null,"id":518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13980:15:0","subExpression":{"argumentTypes":null,"id":517,"name":"proposalCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1712,"src":"13980:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":519,"nodeType":"ExpressionStatement","src":"13980:15:0"},{"assignments":[521],"declarations":[{"constant":false,"id":521,"name":"newProposal","nodeType":"VariableDeclaration","scope":578,"src":"14005:27:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"},"typeName":{"contractScope":null,"id":520,"name":"Proposal","nodeType":"UserDefinedTypeName","referencedDeclaration":1763,"src":"14005:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"}},"value":null,"visibility":"internal"}],"id":542,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":523,"name":"proposalCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1712,"src":"14062:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":524,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"14099:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"14099:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"hexValue":"30","id":526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14128:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"argumentTypes":null,"id":527,"name":"targets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"14152:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"argumentTypes":null,"id":528,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"14181:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"argumentTypes":null,"id":529,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":381,"src":"14213:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_$dyn_memory_ptr","typeString":"string memory[] memory"}},{"argumentTypes":null,"id":530,"name":"calldatas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":384,"src":"14248:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},{"argumentTypes":null,"id":531,"name":"startBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":493,"src":"14283:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":532,"name":"endBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":506,"src":"14317:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"30","id":533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14349:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"argumentTypes":null,"hexValue":"30","id":534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14378:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"argumentTypes":null,"hexValue":"30","id":535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14407:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"argumentTypes":null,"hexValue":"66616c7365","id":536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14432:5:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"argumentTypes":null,"hexValue":"66616c7365","id":537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14461:5:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":539,"name":"proposalType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":388,"src":"14500:12:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}],"id":538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14494:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14494:19:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_string_memory_$dyn_memory_ptr","typeString":"string memory[] memory"},{"typeIdentifier":"t_array$_t_bytes_memory_$dyn_memory_ptr","typeString":"bytes memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":522,"name":"Proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1763,"src":"14035:8:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Proposal_$1763_storage_ptr_$","typeString":"type(struct GovernorBravoDelegateStorageV1.Proposal storage pointer)"}},"id":541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["id","proposer","eta","targets","values","signatures","calldatas","startBlock","endBlock","forVotes","againstVotes","abstainVotes","canceled","executed","proposalType"],"nodeType":"FunctionCall","src":"14035:489:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_memory","typeString":"struct GovernorBravoDelegateStorageV1.Proposal memory"}},"nodeType":"VariableDeclarationStatement","src":"14005:519:0"},{"expression":{"argumentTypes":null,"id":548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":543,"name":"proposals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"14535:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal storage ref)"}},"id":546,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":544,"name":"newProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"14545:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal memory"}},"id":545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":1726,"src":"14545:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14535:25:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":547,"name":"newProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"14563:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal memory"}},"src":"14535:39:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"id":549,"nodeType":"ExpressionStatement","src":"14535:39:0"},{"expression":{"argumentTypes":null,"id":556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":550,"name":"latestProposalIds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1724,"src":"14584:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":553,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":551,"name":"newProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"14602:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal memory"}},"id":552,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposer","nodeType":"MemberAccess","referencedDeclaration":1728,"src":"14602:20:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14584:39:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":554,"name":"newProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"14626:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal memory"}},"id":555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":1726,"src":"14626:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14584:56:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":557,"nodeType":"ExpressionStatement","src":"14584:56:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":559,"name":"newProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"14685:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal memory"}},"id":560,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":1726,"src":"14685:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":561,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"14713:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"14713:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":563,"name":"targets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":375,"src":"14737:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"argumentTypes":null,"id":564,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":378,"src":"14758:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"argumentTypes":null,"id":565,"name":"signatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":381,"src":"14778:10:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_$dyn_memory_ptr","typeString":"string memory[] memory"}},{"argumentTypes":null,"id":566,"name":"calldatas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":384,"src":"14802:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},{"argumentTypes":null,"id":567,"name":"startBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":493,"src":"14825:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":568,"name":"endBlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":506,"src":"14849:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":569,"name":"description","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":386,"src":"14871:11:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":571,"name":"proposalType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":388,"src":"14902:12:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}],"id":570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14896:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14896:19:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_string_memory_$dyn_memory_ptr","typeString":"string memory[] memory"},{"typeIdentifier":"t_array$_t_bytes_memory_$dyn_memory_ptr","typeString":"bytes memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":558,"name":"ProposalCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1592,"src":"14656:15:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_string_memory_$dyn_memory_ptr_$_t_array$_t_bytes_memory_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$_t_uint8_$returns$__$","typeString":"function (uint256,address,address[] memory,uint256[] memory,string memory[] memory,bytes memory[] memory,uint256,uint256,string memory,uint8)"}},"id":573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14656:269:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":574,"nodeType":"EmitStatement","src":"14651:274:0"},{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":575,"name":"newProposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"14942:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal memory"}},"id":576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":1726,"src":"14942:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":392,"id":577,"nodeType":"Return","src":"14935:21:0"}]},"documentation":"@notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\ntargets, values, signatures, and calldatas must be of equal length\n@dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\n of duplicate actions, it's recommended to split those actions into separate proposals\n@param targets Target addresses for proposal calls\n@param values BNB values for proposal calls\n@param signatures Function signatures for proposal calls\n@param calldatas Calldatas for proposal calls\n@param description String description of the proposal\n@param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\n@return Proposal id of new proposal","id":579,"implemented":true,"kind":"function","modifiers":[],"name":"propose","nodeType":"FunctionDefinition","parameters":{"id":389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":375,"name":"targets","nodeType":"VariableDeclaration","scope":579,"src":"12073:24:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":373,"name":"address","nodeType":"ElementaryTypeName","src":"12073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":374,"length":null,"nodeType":"ArrayTypeName","src":"12073:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":378,"name":"values","nodeType":"VariableDeclaration","scope":579,"src":"12107:20:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":376,"name":"uint","nodeType":"ElementaryTypeName","src":"12107:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":377,"length":null,"nodeType":"ArrayTypeName","src":"12107:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":381,"name":"signatures","nodeType":"VariableDeclaration","scope":579,"src":"12137:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":379,"name":"string","nodeType":"ElementaryTypeName","src":"12137:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":380,"length":null,"nodeType":"ArrayTypeName","src":"12137:8:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":384,"name":"calldatas","nodeType":"VariableDeclaration","scope":579,"src":"12173:24:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":382,"name":"bytes","nodeType":"ElementaryTypeName","src":"12173:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":383,"length":null,"nodeType":"ArrayTypeName","src":"12173:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":386,"name":"description","nodeType":"VariableDeclaration","scope":579,"src":"12207:25:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":385,"name":"string","nodeType":"ElementaryTypeName","src":"12207:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":388,"name":"proposalType","nodeType":"VariableDeclaration","scope":579,"src":"12242:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"},"typeName":{"contractScope":null,"id":387,"name":"ProposalType","nodeType":"UserDefinedTypeName","referencedDeclaration":1790,"src":"12242:12:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}},"value":null,"visibility":"internal"}],"src":"12063:210:0"},"returnParameters":{"id":392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":391,"name":"","nodeType":"VariableDeclaration","scope":579,"src":"12290:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":390,"name":"uint","nodeType":"ElementaryTypeName","src":"12290:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"12289:6:0"},"scope":1563,"src":"12047:2916:0","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":663,"nodeType":"Block","src":"15135:745:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"},"id":590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":586,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":581,"src":"15172:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":585,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1043,"src":"15166:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_enum$_ProposalState_$1779_$","typeString":"function (uint256) view returns (enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15166:17:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":588,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"15187:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Succeeded","nodeType":"MemberAccess","referencedDeclaration":null,"src":"15187:23:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"src":"15166:44:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c2063616e206f6e6c792062652071756575656420696620697420697320737563636565646564","id":591,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15224:70:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_8b18b74b598045096f64bbdf9460c8b5777b3d00c07ed948d457fa444a8ee5bd","typeString":"literal_string \"GovernorBravo::queue: proposal can only be queued if it is succeeded\""},"value":"GovernorBravo::queue: proposal can only be queued if it is succeeded"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8b18b74b598045096f64bbdf9460c8b5777b3d00c07ed948d457fa444a8ee5bd","typeString":"literal_string \"GovernorBravo::queue: proposal can only be queued if it is succeeded\""}],"id":584,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"15145:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15145:159:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":593,"nodeType":"ExpressionStatement","src":"15145:159:0"},{"assignments":[595],"declarations":[{"constant":false,"id":595,"name":"proposal","nodeType":"VariableDeclaration","scope":663,"src":"15314:25:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"},"typeName":{"contractScope":null,"id":594,"name":"Proposal","nodeType":"UserDefinedTypeName","referencedDeclaration":1763,"src":"15314:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"}},"value":null,"visibility":"internal"}],"id":599,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":596,"name":"proposals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"15342:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal storage ref)"}},"id":598,"indexExpression":{"argumentTypes":null,"id":597,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":581,"src":"15352:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15342:21:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"15314:49:0"},{"assignments":[601],"declarations":[{"constant":false,"id":601,"name":"eta","nodeType":"VariableDeclaration","scope":663,"src":"15373:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":600,"name":"uint","nodeType":"ElementaryTypeName","src":"15373:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":614,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":603,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4020,"src":"15391:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":null,"src":"15391:15:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":605,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"15408:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":610,"indexExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":607,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"15432:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalType","nodeType":"MemberAccess","referencedDeclaration":1762,"src":"15432:21:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15426:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15426:28:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15408:47:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delay","nodeType":"MemberAccess","referencedDeclaration":1825,"src":"15408:53:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15408:55:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":602,"name":"add256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"15384:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15384:80:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15373:91:0"},{"body":{"id":650,"nodeType":"Block","src":"15521:279:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":627,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"15574:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":628,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"targets","nodeType":"MemberAccess","referencedDeclaration":1733,"src":"15574:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":630,"indexExpression":{"argumentTypes":null,"id":629,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":616,"src":"15591:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15574:19:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":631,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"15611:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":1736,"src":"15611:15:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":634,"indexExpression":{"argumentTypes":null,"id":633,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":616,"src":"15627:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15611:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":635,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"15647:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":636,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"signatures","nodeType":"MemberAccess","referencedDeclaration":1739,"src":"15647:19:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":638,"indexExpression":{"argumentTypes":null,"id":637,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":616,"src":"15667:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15647:22:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":639,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"15687:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"calldatas","nodeType":"MemberAccess","referencedDeclaration":1742,"src":"15687:18:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":642,"indexExpression":{"argumentTypes":null,"id":641,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":616,"src":"15706:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15687:21:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},{"argumentTypes":null,"id":643,"name":"eta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":601,"src":"15726:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":645,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"15753:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalType","nodeType":"MemberAccess","referencedDeclaration":1762,"src":"15753:21:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":644,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15747:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15747:28:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":626,"name":"queueOrRevertInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"15535:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint8_$returns$__$","typeString":"function (address,uint256,string memory,bytes memory,uint256,uint8)"}},"id":648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15535:254:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":649,"nodeType":"ExpressionStatement","src":"15535:254:0"}]},"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":618,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":616,"src":"15487:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":619,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"15491:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":620,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"targets","nodeType":"MemberAccess","referencedDeclaration":1733,"src":"15491:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":621,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"15491:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15487:27:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":651,"initializationExpression":{"assignments":[616],"declarations":[{"constant":false,"id":616,"name":"i","nodeType":"VariableDeclaration","scope":651,"src":"15479:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":615,"name":"uint","nodeType":"ElementaryTypeName","src":"15479:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":617,"initialValue":null,"nodeType":"VariableDeclarationStatement","src":"15479:6:0"},"loopExpression":{"expression":{"argumentTypes":null,"id":624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15516:3:0","subExpression":{"argumentTypes":null,"id":623,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":616,"src":"15518:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":625,"nodeType":"ExpressionStatement","src":"15516:3:0"},"nodeType":"ForStatement","src":"15474:326:0"},{"expression":{"argumentTypes":null,"id":656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":652,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":595,"src":"15809:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":1730,"src":"15809:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":655,"name":"eta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":601,"src":"15824:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15809:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":657,"nodeType":"ExpressionStatement","src":"15809:18:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":659,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":581,"src":"15857:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":660,"name":"eta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":601,"src":"15869:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":658,"name":"ProposalQueued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"15842:14:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15842:31:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":662,"nodeType":"EmitStatement","src":"15837:36:0"}]},"documentation":"@notice Queues a proposal of state succeeded\n@param proposalId The id of the proposal to queue","id":664,"implemented":true,"kind":"function","modifiers":[],"name":"queue","nodeType":"FunctionDefinition","parameters":{"id":582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":581,"name":"proposalId","nodeType":"VariableDeclaration","scope":664,"src":"15109:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":580,"name":"uint","nodeType":"ElementaryTypeName","src":"15109:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"15108:17:0"},"returnParameters":{"id":583,"nodeType":"ParameterList","parameters":[],"src":"15135:0:0"},"scope":1563,"src":"15094:786:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":710,"nodeType":"Block","src":"16082:385:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16113:141:0","subExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":687,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":666,"src":"16203:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":688,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":668,"src":"16211:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":689,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":670,"src":"16218:9:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"id":690,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":672,"src":"16229:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"argumentTypes":null,"id":691,"name":"eta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":674,"src":"16235:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":685,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"16192:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":686,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","referencedDeclaration":null,"src":"16192:10:0","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16192:47:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":684,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"16182:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16182:58:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":680,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"16114:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":682,"indexExpression":{"argumentTypes":null,"id":681,"name":"proposalType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":676,"src":"16132:12:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16114:31:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"queuedTransactions","nodeType":"MemberAccess","referencedDeclaration":1840,"src":"16114:50:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$returns$_t_bool_$","typeString":"function (bytes32) view external returns (bool)"}},"id":694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16114:140:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a71756575654f72526576657274496e7465726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20616c72656164792071756575656420617420657461","id":696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16268:87:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_1c438b0cfaad67e6d7c60ceb8ef7ecff37faff9e792b7a026c00b374a537d965","typeString":"literal_string \"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\""},"value":"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1c438b0cfaad67e6d7c60ceb8ef7ecff37faff9e792b7a026c00b374a537d965","typeString":"literal_string \"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\""}],"id":679,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"16092:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16092:273:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":698,"nodeType":"ExpressionStatement","src":"16092:273:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":703,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":666,"src":"16424:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":704,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":668,"src":"16432:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":705,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":670,"src":"16439:9:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"id":706,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":672,"src":"16450:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"argumentTypes":null,"id":707,"name":"eta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":674,"src":"16456:3:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":699,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"16375:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":701,"indexExpression":{"argumentTypes":null,"id":700,"name":"proposalType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":676,"src":"16393:12:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16375:31:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"queueTransaction","nodeType":"MemberAccess","referencedDeclaration":1855,"src":"16375:48:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (address,uint256,string memory,bytes memory,uint256) external returns (bytes32)"}},"id":708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16375:85:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":709,"nodeType":"ExpressionStatement","src":"16375:85:0"}]},"documentation":null,"id":711,"implemented":true,"kind":"function","modifiers":[],"name":"queueOrRevertInternal","nodeType":"FunctionDefinition","parameters":{"id":677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":666,"name":"target","nodeType":"VariableDeclaration","scope":711,"src":"15926:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":665,"name":"address","nodeType":"ElementaryTypeName","src":"15926:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":668,"name":"value","nodeType":"VariableDeclaration","scope":711,"src":"15950:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":667,"name":"uint","nodeType":"ElementaryTypeName","src":"15950:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":670,"name":"signature","nodeType":"VariableDeclaration","scope":711,"src":"15970:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":669,"name":"string","nodeType":"ElementaryTypeName","src":"15970:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":672,"name":"data","nodeType":"VariableDeclaration","scope":711,"src":"16003:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":671,"name":"bytes","nodeType":"ElementaryTypeName","src":"16003:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"},{"constant":false,"id":674,"name":"eta","nodeType":"VariableDeclaration","scope":711,"src":"16030:8:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":673,"name":"uint","nodeType":"ElementaryTypeName","src":"16030:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":676,"name":"proposalType","nodeType":"VariableDeclaration","scope":711,"src":"16048:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":675,"name":"uint8","nodeType":"ElementaryTypeName","src":"16048:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"}],"src":"15916:156:0"},"returnParameters":{"id":678,"nodeType":"ParameterList","parameters":[],"src":"16082:0:0"},"scope":1563,"src":"15886:581:0","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":782,"nodeType":"Block","src":"16651:653:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"},"id":722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":718,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"16688:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":717,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1043,"src":"16682:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_enum$_ProposalState_$1779_$","typeString":"function (uint256) view returns (enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16682:17:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":720,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"16703:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Queued","nodeType":"MemberAccess","referencedDeclaration":null,"src":"16703:20:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"src":"16682:41:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c2063616e206f6e6c7920626520657865637574656420696620697420697320717565756564","id":723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16737:71:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_5fbf48e8c3a21a3625f21d95c8b2dda12d19a9eb23201ab81343d35beaf2fa53","typeString":"literal_string \"GovernorBravo::execute: proposal can only be executed if it is queued\""},"value":"GovernorBravo::execute: proposal can only be executed if it is queued"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5fbf48e8c3a21a3625f21d95c8b2dda12d19a9eb23201ab81343d35beaf2fa53","typeString":"literal_string \"GovernorBravo::execute: proposal can only be executed if it is queued\""}],"id":716,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"16661:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16661:157:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":725,"nodeType":"ExpressionStatement","src":"16661:157:0"},{"assignments":[727],"declarations":[{"constant":false,"id":727,"name":"proposal","nodeType":"VariableDeclaration","scope":782,"src":"16828:25:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"},"typeName":{"contractScope":null,"id":726,"name":"Proposal","nodeType":"UserDefinedTypeName","referencedDeclaration":1763,"src":"16828:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"}},"value":null,"visibility":"internal"}],"id":731,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":728,"name":"proposals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"16856:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal storage ref)"}},"id":730,"indexExpression":{"argumentTypes":null,"id":729,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"16866:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16856:21:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16828:49:0"},{"expression":{"argumentTypes":null,"id":736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":732,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"16887:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"executed","nodeType":"MemberAccess","referencedDeclaration":1756,"src":"16887:17:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"hexValue":"74727565","id":735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16907:4:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16887:24:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":737,"nodeType":"ExpressionStatement","src":"16887:24:0"},{"body":{"id":776,"nodeType":"Block","src":"16968:287:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":756,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"17066:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"targets","nodeType":"MemberAccess","referencedDeclaration":1733,"src":"17066:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":759,"indexExpression":{"argumentTypes":null,"id":758,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"17083:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17066:19:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":760,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"17103:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":1736,"src":"17103:15:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":763,"indexExpression":{"argumentTypes":null,"id":762,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"17119:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17103:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":764,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"17139:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"signatures","nodeType":"MemberAccess","referencedDeclaration":1739,"src":"17139:19:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":767,"indexExpression":{"argumentTypes":null,"id":766,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"17159:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17139:22:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":768,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"17179:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":769,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"calldatas","nodeType":"MemberAccess","referencedDeclaration":1742,"src":"17179:18:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":771,"indexExpression":{"argumentTypes":null,"id":770,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"17198:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17179:21:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":772,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"17218:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":773,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":1730,"src":"17218:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":749,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"16982:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":754,"indexExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":751,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"17006:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalType","nodeType":"MemberAccess","referencedDeclaration":1762,"src":"17006:21:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17000:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17000:28:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16982:47:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeTransaction","nodeType":"MemberAccess","referencedDeclaration":1883,"src":"16982:66:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,uint256,string memory,bytes memory,uint256) payable external returns (bytes memory)"}},"id":774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16982:262:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":775,"nodeType":"ExpressionStatement","src":"16982:262:0"}]},"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":741,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"16934:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":742,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":727,"src":"16938:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"targets","nodeType":"MemberAccess","referencedDeclaration":1733,"src":"16938:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":744,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"16938:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16934:27:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":777,"initializationExpression":{"assignments":[739],"declarations":[{"constant":false,"id":739,"name":"i","nodeType":"VariableDeclaration","scope":777,"src":"16926:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":738,"name":"uint","nodeType":"ElementaryTypeName","src":"16926:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":740,"initialValue":null,"nodeType":"VariableDeclarationStatement","src":"16926:6:0"},"loopExpression":{"expression":{"argumentTypes":null,"id":747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16963:3:0","subExpression":{"argumentTypes":null,"id":746,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":739,"src":"16965:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":748,"nodeType":"ExpressionStatement","src":"16963:3:0"},"nodeType":"ForStatement","src":"16921:334:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":779,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":713,"src":"17286:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":778,"name":"ProposalExecuted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1618,"src":"17269:16:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17269:28:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":781,"nodeType":"EmitStatement","src":"17264:33:0"}]},"documentation":"@notice Executes a queued proposal if eta has passed\n@param proposalId The id of the proposal to execute","id":783,"implemented":true,"kind":"function","modifiers":[],"name":"execute","nodeType":"FunctionDefinition","parameters":{"id":714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":713,"name":"proposalId","nodeType":"VariableDeclaration","scope":783,"src":"16625:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":712,"name":"uint","nodeType":"ElementaryTypeName","src":"16625:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"16624:17:0"},"returnParameters":{"id":715,"nodeType":"ParameterList","parameters":[],"src":"16651:0:0"},"scope":1563,"src":"16608:696:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":884,"nodeType":"Block","src":"17547:943:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"},"id":794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":790,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":785,"src":"17571:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":789,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1043,"src":"17565:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_enum$_ProposalState_$1779_$","typeString":"function (uint256) view returns (enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17565:17:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":792,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"17586:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Executed","nodeType":"MemberAccess","referencedDeclaration":null,"src":"17586:22:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"src":"17565:43:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063616e63656c2065786563757465642070726f706f73616c","id":795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17610:56:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_d48c38cdee932c14d51343eb15469a6b4385fa79519fea37fc1716c00abad924","typeString":"literal_string \"GovernorBravo::cancel: cannot cancel executed proposal\""},"value":"GovernorBravo::cancel: cannot cancel executed proposal"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d48c38cdee932c14d51343eb15469a6b4385fa79519fea37fc1716c00abad924","typeString":"literal_string \"GovernorBravo::cancel: cannot cancel executed proposal\""}],"id":788,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"17557:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17557:110:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":797,"nodeType":"ExpressionStatement","src":"17557:110:0"},{"assignments":[799],"declarations":[{"constant":false,"id":799,"name":"proposal","nodeType":"VariableDeclaration","scope":884,"src":"17678:25:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"},"typeName":{"contractScope":null,"id":798,"name":"Proposal","nodeType":"UserDefinedTypeName","referencedDeclaration":1763,"src":"17678:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"}},"value":null,"visibility":"internal"}],"id":803,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":800,"name":"proposals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"17706:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal storage ref)"}},"id":802,"indexExpression":{"argumentTypes":null,"id":801,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":785,"src":"17716:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17706:21:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17678:49:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":805,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"17758:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"17758:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":807,"name":"guardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1783,"src":"17772:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17758:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":809,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"17800:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"17800:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":811,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"17814:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposer","nodeType":"MemberAccess","referencedDeclaration":1728,"src":"17814:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17800:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17758:73:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":817,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"17874:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposer","nodeType":"MemberAccess","referencedDeclaration":1728,"src":"17874:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":820,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4020,"src":"17900:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"number","nodeType":"MemberAccess","referencedDeclaration":null,"src":"17900:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"31","id":822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17914:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":819,"name":"sub256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1537,"src":"17893:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17893:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":815,"name":"xvsVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1716,"src":"17851:8:0","typeDescriptions":{"typeIdentifier":"t_contract$_XvsVaultInterface_$1894","typeString":"contract XvsVaultInterface"}},"id":816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriorVotes","nodeType":"MemberAccess","referencedDeclaration":1893,"src":"17851:22:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint96_$","typeString":"function (address,uint256) view external returns (uint96)"}},"id":824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17851:66:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":825,"name":"proposalConfigs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1801,"src":"17936:15:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ProposalConfig_$1797_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref)"}},"id":828,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":826,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"17952:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalType","nodeType":"MemberAccess","referencedDeclaration":1762,"src":"17952:21:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17936:38:0","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig storage ref"}},"id":829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalThreshold","nodeType":"MemberAccess","referencedDeclaration":1796,"src":"17936:56:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17851:141:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17758:234:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722061626f7665207468726573686f6c64","id":832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18006:49:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_af71986e0c1f80c2512b8b2deae5a125bfd8f0bdb9eb99f370c87681d9dd1dd1","typeString":"literal_string \"GovernorBravo::cancel: proposer above threshold\""},"value":"GovernorBravo::cancel: proposer above threshold"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_af71986e0c1f80c2512b8b2deae5a125bfd8f0bdb9eb99f370c87681d9dd1dd1","typeString":"literal_string \"GovernorBravo::cancel: proposer above threshold\""}],"id":804,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"17737:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17737:328:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":834,"nodeType":"ExpressionStatement","src":"17737:328:0"},{"expression":{"argumentTypes":null,"id":839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":835,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"18076:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"canceled","nodeType":"MemberAccess","referencedDeclaration":1754,"src":"18076:17:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"hexValue":"74727565","id":838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18096:4:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"18076:24:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":840,"nodeType":"ExpressionStatement","src":"18076:24:0"},{"body":{"id":878,"nodeType":"Block","src":"18161:279:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":858,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"18251:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"targets","nodeType":"MemberAccess","referencedDeclaration":1733,"src":"18251:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":861,"indexExpression":{"argumentTypes":null,"id":860,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"18268:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18251:19:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":862,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"18288:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":1736,"src":"18288:15:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":865,"indexExpression":{"argumentTypes":null,"id":864,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"18304:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18288:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":866,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"18324:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"signatures","nodeType":"MemberAccess","referencedDeclaration":1739,"src":"18324:19:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":869,"indexExpression":{"argumentTypes":null,"id":868,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"18344:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18324:22:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":870,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"18364:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"calldatas","nodeType":"MemberAccess","referencedDeclaration":1742,"src":"18364:18:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}},"id":873,"indexExpression":{"argumentTypes":null,"id":872,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"18383:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18364:21:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":874,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"18403:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":1730,"src":"18403:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":853,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"18175:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":856,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":854,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"18193:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalType","nodeType":"MemberAccess","referencedDeclaration":1762,"src":"18193:21:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18175:40:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"cancelTransaction","nodeType":"MemberAccess","referencedDeclaration":1868,"src":"18175:58:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (address,uint256,string memory,bytes memory,uint256) external"}},"id":876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18175:254:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":877,"nodeType":"ExpressionStatement","src":"18175:254:0"}]},"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":845,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"18127:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":846,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"18131:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"targets","nodeType":"MemberAccess","referencedDeclaration":1733,"src":"18131:16:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"18131:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18127:27:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":879,"initializationExpression":{"assignments":[842],"declarations":[{"constant":false,"id":842,"name":"i","nodeType":"VariableDeclaration","scope":879,"src":"18115:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":841,"name":"uint","nodeType":"ElementaryTypeName","src":"18115:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":844,"initialValue":{"argumentTypes":null,"hexValue":"30","id":843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18124:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18115:10:0"},"loopExpression":{"expression":{"argumentTypes":null,"id":851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18156:3:0","subExpression":{"argumentTypes":null,"id":850,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":842,"src":"18156:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":852,"nodeType":"ExpressionStatement","src":"18156:3:0"},"nodeType":"ForStatement","src":"18110:330:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":881,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":785,"src":"18472:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":880,"name":"ProposalCanceled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1608,"src":"18455:16:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18455:28:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":883,"nodeType":"EmitStatement","src":"18450:33:0"}]},"documentation":"@notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\n@param proposalId The id of the proposal to cancel","id":885,"implemented":true,"kind":"function","modifiers":[],"name":"cancel","nodeType":"FunctionDefinition","parameters":{"id":786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":785,"name":"proposalId","nodeType":"VariableDeclaration","scope":885,"src":"17521:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":784,"name":"uint","nodeType":"ElementaryTypeName","src":"17521:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"17520:17:0"},"returnParameters":{"id":787,"nodeType":"ParameterList","parameters":[],"src":"17547:0:0"},"scope":1563,"src":"17505:985:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":918,"nodeType":"Block","src":"18888:124:0","statements":[{"assignments":[903],"declarations":[{"constant":false,"id":903,"name":"p","nodeType":"VariableDeclaration","scope":918,"src":"18898:18:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"},"typeName":{"contractScope":null,"id":902,"name":"Proposal","nodeType":"UserDefinedTypeName","referencedDeclaration":1763,"src":"18898:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"}},"value":null,"visibility":"internal"}],"id":907,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":904,"name":"proposals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"18919:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal storage ref)"}},"id":906,"indexExpression":{"argumentTypes":null,"id":905,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":887,"src":"18929:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18919:21:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"18898:42:0"},{"expression":{"argumentTypes":null,"components":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":908,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"18958:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"targets","nodeType":"MemberAccess","referencedDeclaration":1733,"src":"18958:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":910,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"18969:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"values","nodeType":"MemberAccess","referencedDeclaration":1736,"src":"18969:8:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":912,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"18979:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":913,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"signatures","nodeType":"MemberAccess","referencedDeclaration":1739,"src":"18979:12:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":914,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"18993:1:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"calldatas","nodeType":"MemberAccess","referencedDeclaration":1742,"src":"18993:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage","typeString":"bytes storage ref[] storage ref"}}],"id":916,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18957:48:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_storage_$_t_array$_t_uint256_$dyn_storage_$_t_array$_t_string_storage_$dyn_storage_$_t_array$_t_bytes_storage_$dyn_storage_$","typeString":"tuple(address[] storage ref,uint256[] storage ref,string storage ref[] storage ref,bytes storage ref[] storage ref)"}},"functionReturnParameters":901,"id":917,"nodeType":"Return","src":"18950:55:0"}]},"documentation":"@notice Gets actions of a proposal\n@param proposalId the id of the proposal\n@return targets, values, signatures, and calldatas of the proposal actions","id":919,"implemented":true,"kind":"function","modifiers":[],"name":"getActions","nodeType":"FunctionDefinition","parameters":{"id":888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":887,"name":"proposalId","nodeType":"VariableDeclaration","scope":919,"src":"18713:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":886,"name":"uint","nodeType":"ElementaryTypeName","src":"18713:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"18703:31:0"},"returnParameters":{"id":901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":891,"name":"targets","nodeType":"VariableDeclaration","scope":919,"src":"18782:24:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":889,"name":"address","nodeType":"ElementaryTypeName","src":"18782:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":890,"length":null,"nodeType":"ArrayTypeName","src":"18782:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":894,"name":"values","nodeType":"VariableDeclaration","scope":919,"src":"18808:20:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":892,"name":"uint","nodeType":"ElementaryTypeName","src":"18808:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":893,"length":null,"nodeType":"ArrayTypeName","src":"18808:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":897,"name":"signatures","nodeType":"VariableDeclaration","scope":919,"src":"18830:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":895,"name":"string","nodeType":"ElementaryTypeName","src":"18830:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":896,"length":null,"nodeType":"ArrayTypeName","src":"18830:8:0","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":900,"name":"calldatas","nodeType":"VariableDeclaration","scope":919,"src":"18858:24:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":898,"name":"bytes","nodeType":"ElementaryTypeName","src":"18858:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":899,"length":null,"nodeType":"ArrayTypeName","src":"18858:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"value":null,"visibility":"internal"}],"src":"18781:102:0"},"scope":1563,"src":"18684:328:0","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":{"id":935,"nodeType":"Block","src":"19312:61:0","statements":[{"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":928,"name":"proposals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"19329:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal storage ref)"}},"id":930,"indexExpression":{"argumentTypes":null,"id":929,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":921,"src":"19339:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19329:21:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"id":931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receipts","nodeType":"MemberAccess","referencedDeclaration":1760,"src":"19329:30:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Receipt_$1770_storage_$","typeString":"mapping(address => struct GovernorBravoDelegateStorageV1.Receipt storage ref)"}},"id":933,"indexExpression":{"argumentTypes":null,"id":932,"name":"voter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":923,"src":"19360:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19329:37:0","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage","typeString":"struct GovernorBravoDelegateStorageV1.Receipt storage ref"}},"functionReturnParameters":927,"id":934,"nodeType":"Return","src":"19322:44:0"}]},"documentation":"@notice Gets the receipt for a voter on a given proposal\n@param proposalId the id of proposal\n@param voter The address of the voter\n@return The voting receipt","id":936,"implemented":true,"kind":"function","modifiers":[],"name":"getReceipt","nodeType":"FunctionDefinition","parameters":{"id":924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":921,"name":"proposalId","nodeType":"VariableDeclaration","scope":936,"src":"19241:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":920,"name":"uint","nodeType":"ElementaryTypeName","src":"19241:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":923,"name":"voter","nodeType":"VariableDeclaration","scope":936,"src":"19258:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":922,"name":"address","nodeType":"ElementaryTypeName","src":"19258:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"19240:32:0"},"returnParameters":{"id":927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":926,"name":"","nodeType":"VariableDeclaration","scope":936,"src":"19296:14:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_memory_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt"},"typeName":{"contractScope":null,"id":925,"name":"Receipt","nodeType":"UserDefinedTypeName","referencedDeclaration":1770,"src":"19296:7:0","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt"}},"value":null,"visibility":"internal"}],"src":"19295:16:0"},"scope":1563,"src":"19221:152:0","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":{"id":1042,"nodeType":"Block","src":"19585:1066:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":944,"name":"proposalCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1712,"src":"19616:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":945,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":938,"src":"19633:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19616:27:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":947,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":938,"src":"19647:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"id":948,"name":"initialProposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1710,"src":"19660:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19647:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19616:61:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070726f706f73616c206964","id":951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19691:43:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_e61e89529abd71ebdc7fb8670e3797adfb63b8cd78cee477b188afbc4e6a151a","typeString":"literal_string \"GovernorBravo::state: invalid proposal id\""},"value":"GovernorBravo::state: invalid proposal id"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e61e89529abd71ebdc7fb8670e3797adfb63b8cd78cee477b188afbc4e6a151a","typeString":"literal_string \"GovernorBravo::state: invalid proposal id\""}],"id":943,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"19595:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19595:149:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":953,"nodeType":"ExpressionStatement","src":"19595:149:0"},{"assignments":[955],"declarations":[{"constant":false,"id":955,"name":"proposal","nodeType":"VariableDeclaration","scope":1042,"src":"19754:25:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"},"typeName":{"contractScope":null,"id":954,"name":"Proposal","nodeType":"UserDefinedTypeName","referencedDeclaration":1763,"src":"19754:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"}},"value":null,"visibility":"internal"}],"id":959,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":956,"name":"proposals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"19782:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal storage ref)"}},"id":958,"indexExpression":{"argumentTypes":null,"id":957,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":938,"src":"19792:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19782:21:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"19754:49:0"},{"condition":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":960,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"19817:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":961,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"canceled","nodeType":"MemberAccess","referencedDeclaration":1754,"src":"19817:17:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":966,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4020,"src":"19900:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"number","nodeType":"MemberAccess","referencedDeclaration":null,"src":"19900:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":968,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"19916:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":969,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"startBlock","nodeType":"MemberAccess","referencedDeclaration":1744,"src":"19916:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19900:35:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":975,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4020,"src":"20000:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"number","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20000:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":977,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"20016:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"endBlock","nodeType":"MemberAccess","referencedDeclaration":1746,"src":"20016:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20000:33:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":984,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"20097:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"forVotes","nodeType":"MemberAccess","referencedDeclaration":1748,"src":"20097:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":986,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"20118:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":987,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"againstVotes","nodeType":"MemberAccess","referencedDeclaration":1750,"src":"20118:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20097:42:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":989,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"20143:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"forVotes","nodeType":"MemberAccess","referencedDeclaration":1748,"src":"20143:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"id":991,"name":"quorumVotes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19,"src":"20163:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20143:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20097:77:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":998,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"20240:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":999,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":1730,"src":"20240:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"30","id":1000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20256:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20240:17:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1006,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"20324:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"executed","nodeType":"MemberAccess","referencedDeclaration":1756,"src":"20324:17:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1012,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4020,"src":"20420:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":1013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20420:15:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1015,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"20446:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eta","nodeType":"MemberAccess","referencedDeclaration":1730,"src":"20446:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":1017,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"20460:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":1022,"indexExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1019,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":955,"src":"20484:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"proposalType","nodeType":"MemberAccess","referencedDeclaration":1762,"src":"20484:21:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":1018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20478:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":1021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20478:28:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20460:47:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":1023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"GRACE_PERIOD","nodeType":"MemberAccess","referencedDeclaration":1830,"src":"20460:60:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":1024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20460:62:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1014,"name":"add256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"20439:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20439:84:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20420:103:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":1034,"nodeType":"Block","src":"20593:52:0","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1031,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"20614:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":1032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Queued","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20614:20:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"functionReturnParameters":942,"id":1033,"nodeType":"Return","src":"20607:27:0"}]},"id":1035,"nodeType":"IfStatement","src":"20403:242:0","trueBody":{"id":1030,"nodeType":"Block","src":"20534:53:0","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1027,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"20555:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":1028,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Expired","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20555:21:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"functionReturnParameters":942,"id":1029,"nodeType":"Return","src":"20548:28:0"}]}},"id":1036,"nodeType":"IfStatement","src":"20320:325:0","trueBody":{"id":1011,"nodeType":"Block","src":"20343:54:0","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1008,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"20364:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":1009,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Executed","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20364:22:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"functionReturnParameters":942,"id":1010,"nodeType":"Return","src":"20357:29:0"}]}},"id":1037,"nodeType":"IfStatement","src":"20236:409:0","trueBody":{"id":1005,"nodeType":"Block","src":"20259:55:0","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1002,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"20280:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":1003,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Succeeded","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20280:23:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"functionReturnParameters":942,"id":1004,"nodeType":"Return","src":"20273:30:0"}]}},"id":1038,"nodeType":"IfStatement","src":"20093:552:0","trueBody":{"id":997,"nodeType":"Block","src":"20176:54:0","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":994,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"20197:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Defeated","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20197:22:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"functionReturnParameters":942,"id":996,"nodeType":"Return","src":"20190:29:0"}]}},"id":1039,"nodeType":"IfStatement","src":"19996:649:0","trueBody":{"id":983,"nodeType":"Block","src":"20035:52:0","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":980,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"20056:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Active","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20056:20:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"functionReturnParameters":942,"id":982,"nodeType":"Return","src":"20049:27:0"}]}},"id":1040,"nodeType":"IfStatement","src":"19896:749:0","trueBody":{"id":974,"nodeType":"Block","src":"19937:53:0","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":971,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"19958:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":972,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Pending","nodeType":"MemberAccess","referencedDeclaration":null,"src":"19958:21:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"functionReturnParameters":942,"id":973,"nodeType":"Return","src":"19951:28:0"}]}},"id":1041,"nodeType":"IfStatement","src":"19813:832:0","trueBody":{"id":965,"nodeType":"Block","src":"19836:54:0","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":962,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"19857:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Canceled","nodeType":"MemberAccess","referencedDeclaration":null,"src":"19857:22:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"functionReturnParameters":942,"id":964,"nodeType":"Return","src":"19850:29:0"}]}}]},"documentation":"@notice Gets the state of a proposal\n@param proposalId The id of the proposal\n@return Proposal state","id":1043,"implemented":true,"kind":"function","modifiers":[],"name":"state","nodeType":"FunctionDefinition","parameters":{"id":939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":938,"name":"proposalId","nodeType":"VariableDeclaration","scope":1043,"src":"19532:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":937,"name":"uint","nodeType":"ElementaryTypeName","src":"19532:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"19531:17:0"},"returnParameters":{"id":942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":941,"name":"","nodeType":"VariableDeclaration","scope":1043,"src":"19570:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"},"typeName":{"contractScope":null,"id":940,"name":"ProposalState","nodeType":"UserDefinedTypeName","referencedDeclaration":1779,"src":"19570:13:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"value":null,"visibility":"internal"}],"src":"19569:15:0"},"scope":1563,"src":"19517:1134:0","stateMutability":"view","superFunction":null,"visibility":"public"},{"body":{"id":1064,"nodeType":"Block","src":"20915:118:0","statements":[{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1051,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"20939:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20939:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":1053,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1045,"src":"20951:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1054,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1047,"src":"20963:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1056,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"20989:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"20989:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":1058,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1045,"src":"21001:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1059,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1047,"src":"21013:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":1055,"name":"castVoteInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1298,"src":"20972:16:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint8_$returns$_t_uint96_$","typeString":"function (address,uint256,uint8) returns (uint96)"}},"id":1060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20972:49:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"argumentTypes":null,"hexValue":"","id":1061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21023:2:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":1050,"name":"VoteCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1604,"src":"20930:8:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint8_$_t_uint256_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint8,uint256,string memory)"}},"id":1062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20930:96:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1063,"nodeType":"EmitStatement","src":"20925:101:0"}]},"documentation":"@notice Cast a vote for a proposal\n@param proposalId The id of the proposal to vote on\n@param support The support value for the vote. 0=against, 1=for, 2=abstain","id":1065,"implemented":true,"kind":"function","modifiers":[],"name":"castVote","nodeType":"FunctionDefinition","parameters":{"id":1048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1045,"name":"proposalId","nodeType":"VariableDeclaration","scope":1065,"src":"20874:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1044,"name":"uint","nodeType":"ElementaryTypeName","src":"20874:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1047,"name":"support","nodeType":"VariableDeclaration","scope":1065,"src":"20891:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1046,"name":"uint8","nodeType":"ElementaryTypeName","src":"20891:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"}],"src":"20873:32:0"},"returnParameters":{"id":1049,"nodeType":"ParameterList","parameters":[],"src":"20915:0:0"},"scope":1563,"src":"20856:177:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":1088,"nodeType":"Block","src":"21409:122:0","statements":[{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1075,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"21433:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"21433:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":1077,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1067,"src":"21445:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1078,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1069,"src":"21457:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1080,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"21483:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"21483:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":1082,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1067,"src":"21495:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1083,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1069,"src":"21507:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":1079,"name":"castVoteInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1298,"src":"21466:16:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint8_$returns$_t_uint96_$","typeString":"function (address,uint256,uint8) returns (uint96)"}},"id":1084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21466:49:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"argumentTypes":null,"id":1085,"name":"reason","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1071,"src":"21517:6:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":1074,"name":"VoteCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1604,"src":"21424:8:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint8_$_t_uint256_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint8,uint256,string memory)"}},"id":1086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21424:100:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1087,"nodeType":"EmitStatement","src":"21419:105:0"}]},"documentation":"@notice Cast a vote for a proposal with a reason\n@param proposalId The id of the proposal to vote on\n@param support The support value for the vote. 0=against, 1=for, 2=abstain\n@param reason The reason given for the vote by the voter","id":1089,"implemented":true,"kind":"function","modifiers":[],"name":"castVoteWithReason","nodeType":"FunctionDefinition","parameters":{"id":1072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1067,"name":"proposalId","nodeType":"VariableDeclaration","scope":1089,"src":"21344:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1066,"name":"uint","nodeType":"ElementaryTypeName","src":"21344:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1069,"name":"support","nodeType":"VariableDeclaration","scope":1089,"src":"21361:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1068,"name":"uint8","nodeType":"ElementaryTypeName","src":"21361:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":1071,"name":"reason","nodeType":"VariableDeclaration","scope":1089,"src":"21376:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1070,"name":"string","nodeType":"ElementaryTypeName","src":"21376:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"21343:56:0"},"returnParameters":{"id":1073,"nodeType":"ParameterList","parameters":[],"src":"21409:0:0"},"scope":1563,"src":"21316:215:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":1173,"nodeType":"Block","src":"22068:607:0","statements":[{"assignments":[1103],"declarations":[{"constant":false,"id":1103,"name":"domainSeparator","nodeType":"VariableDeclaration","scope":1173,"src":"22078:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1102,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22078:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"}],"id":1120,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1107,"name":"DOMAIN_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"22138:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1110,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10,"src":"22171:4:0","typeDescriptions":{"typeIdentifier":"t_string_memory","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory","typeString":"string memory"}],"id":1109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22165:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":"bytes"},"id":1111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22165:11:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1108,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"22155:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":1112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22155:22:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"id":1113,"name":"getChainIdInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1549,"src":"22179:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint256_$","typeString":"function () pure returns (uint256)"}},"id":1114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22179:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1116,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4060,"src":"22209:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_GovernorBravoDelegate_$1563","typeString":"contract GovernorBravoDelegate"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_GovernorBravoDelegate_$1563","typeString":"contract GovernorBravoDelegate"}],"id":1115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22201:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":1117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22201:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"argumentTypes":null,"id":1105,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"22127:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","referencedDeclaration":null,"src":"22127:10:0","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22127:88:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1104,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"22104:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":1119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22104:121:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"22078:147:0"},{"assignments":[1122],"declarations":[{"constant":false,"id":1122,"name":"structHash","nodeType":"VariableDeclaration","scope":1173,"src":"22235:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1121,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22235:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"}],"id":1131,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1126,"name":"BALLOT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29,"src":"22277:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"argumentTypes":null,"id":1127,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"22294:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1128,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1093,"src":"22306:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"argumentTypes":null,"id":1124,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"22266:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","referencedDeclaration":null,"src":"22266:10:0","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22266:48:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1123,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"22256:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":1130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22256:59:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"22235:80:0"},{"assignments":[1133],"declarations":[{"constant":false,"id":1133,"name":"digest","nodeType":"VariableDeclaration","scope":1173,"src":"22325:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1132,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22325:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"}],"id":1142,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"1901","id":1137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22369:10:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string \"\u0019\u0001\""},"value":"\u0019\u0001"},{"argumentTypes":null,"id":1138,"name":"domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"22381:15:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"argumentTypes":null,"id":1139,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1122,"src":"22398:10:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string \"\u0019\u0001\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"argumentTypes":null,"id":1135,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"22352:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","referencedDeclaration":null,"src":"22352:16:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":1140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22352:57:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1134,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"22342:9:0","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":1141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22342:68:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"22325:85:0"},{"assignments":[1144],"declarations":[{"constant":false,"id":1144,"name":"signatory","nodeType":"VariableDeclaration","scope":1173,"src":"22420:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"22420:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"id":1151,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1146,"name":"digest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"22450:6:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"argumentTypes":null,"id":1147,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1095,"src":"22458:1:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"argumentTypes":null,"id":1148,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1097,"src":"22461:1:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"argumentTypes":null,"id":1149,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1099,"src":"22464:1:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":1145,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4022,"src":"22440:9:0","typeDescriptions":{"typeIdentifier":"t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":1150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22440:26:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"22420:46:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1153,"name":"signatory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"22484:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":1155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22505:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22497:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":1156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22497:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"22484:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e76616c6964207369676e6174757265","id":1158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22509:49:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_606b6b9610d6d8b33c2c9914e54c767f3ea3c0ecf287b2262a751d4ec2b89d60","typeString":"literal_string \"GovernorBravo::castVoteBySig: invalid signature\""},"value":"GovernorBravo::castVoteBySig: invalid signature"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_606b6b9610d6d8b33c2c9914e54c767f3ea3c0ecf287b2262a751d4ec2b89d60","typeString":"literal_string \"GovernorBravo::castVoteBySig: invalid signature\""}],"id":1152,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"22476:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22476:83:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1160,"nodeType":"ExpressionStatement","src":"22476:83:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1162,"name":"signatory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"22583:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":1163,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"22594:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1164,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1093,"src":"22606:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1166,"name":"signatory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1144,"src":"22632:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":1167,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1091,"src":"22643:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1168,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1093,"src":"22655:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":1165,"name":"castVoteInternal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1298,"src":"22615:16:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint8_$returns$_t_uint96_$","typeString":"function (address,uint256,uint8) returns (uint96)"}},"id":1169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22615:48:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"argumentTypes":null,"hexValue":"","id":1170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"22665:2:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":1161,"name":"VoteCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1604,"src":"22574:8:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint8_$_t_uint256_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,uint256,uint8,uint256,string memory)"}},"id":1171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22574:94:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1172,"nodeType":"EmitStatement","src":"22569:99:0"}]},"documentation":"@notice Cast a vote for a proposal by signature\n@dev External function that accepts EIP-712 signatures for voting on proposals.\n@param proposalId The id of the proposal to vote on\n@param support The support value for the vote. 0=against, 1=for, 2=abstain\n@param v recovery id of ECDSA signature\n@param r part of the ECDSA sig output\n@param s part of the ECDSA sig output","id":1174,"implemented":true,"kind":"function","modifiers":[],"name":"castVoteBySig","nodeType":"FunctionDefinition","parameters":{"id":1100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1091,"name":"proposalId","nodeType":"VariableDeclaration","scope":1174,"src":"21996:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1090,"name":"uint","nodeType":"ElementaryTypeName","src":"21996:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1093,"name":"support","nodeType":"VariableDeclaration","scope":1174,"src":"22013:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1092,"name":"uint8","nodeType":"ElementaryTypeName","src":"22013:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":1095,"name":"v","nodeType":"VariableDeclaration","scope":1174,"src":"22028:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1094,"name":"uint8","nodeType":"ElementaryTypeName","src":"22028:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":1097,"name":"r","nodeType":"VariableDeclaration","scope":1174,"src":"22037:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1096,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22037:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"},{"constant":false,"id":1099,"name":"s","nodeType":"VariableDeclaration","scope":1174,"src":"22048:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1098,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22048:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"}],"src":"21995:63:0"},"returnParameters":{"id":1101,"nodeType":"ParameterList","parameters":[],"src":"22068:0:0"},"scope":1563,"src":"21973:702:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":1297,"nodeType":"Block","src":"23096:945:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"},"id":1191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1187,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1178,"src":"23120:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1186,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1043,"src":"23114:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_enum$_ProposalState_$1779_$","typeString":"function (uint256) view returns (enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":1188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23114:17:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1189,"name":"ProposalState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1779,"src":"23135:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalState_$1779_$","typeString":"type(enum GovernorBravoDelegateStorageV1.ProposalState)"}},"id":1190,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Active","nodeType":"MemberAccess","referencedDeclaration":null,"src":"23135:20:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalState_$1779","typeString":"enum GovernorBravoDelegateStorageV1.ProposalState"}},"src":"23114:41:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a20766f74696e6720697320636c6f736564","id":1192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23157:51:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_4d8168be21aac620ed72791717aa2911167b316e34d177cc4b315ea45590cb98","typeString":"literal_string \"GovernorBravo::castVoteInternal: voting is closed\""},"value":"GovernorBravo::castVoteInternal: voting is closed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4d8168be21aac620ed72791717aa2911167b316e34d177cc4b315ea45590cb98","typeString":"literal_string \"GovernorBravo::castVoteInternal: voting is closed\""}],"id":1185,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"23106:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23106:103:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1194,"nodeType":"ExpressionStatement","src":"23106:103:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":1198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1196,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1180,"src":"23227:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"hexValue":"32","id":1197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23238:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"23227:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a20696e76616c696420766f74652074797065","id":1199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23241:52:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_08ca01306f73add02bd237ec4eb9b88988c263b20bc18a865949156e713112d3","typeString":"literal_string \"GovernorBravo::castVoteInternal: invalid vote type\""},"value":"GovernorBravo::castVoteInternal: invalid vote type"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08ca01306f73add02bd237ec4eb9b88988c263b20bc18a865949156e713112d3","typeString":"literal_string \"GovernorBravo::castVoteInternal: invalid vote type\""}],"id":1195,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"23219:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23219:75:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1201,"nodeType":"ExpressionStatement","src":"23219:75:0"},{"assignments":[1203],"declarations":[{"constant":false,"id":1203,"name":"proposal","nodeType":"VariableDeclaration","scope":1297,"src":"23304:25:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"},"typeName":{"contractScope":null,"id":1202,"name":"Proposal","nodeType":"UserDefinedTypeName","referencedDeclaration":1763,"src":"23304:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"}},"value":null,"visibility":"internal"}],"id":1207,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":1204,"name":"proposals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1720,"src":"23332:9:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal storage ref)"}},"id":1206,"indexExpression":{"argumentTypes":null,"id":1205,"name":"proposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1178,"src":"23342:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23332:21:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage ref"}},"nodeType":"VariableDeclarationStatement","src":"23304:49:0"},{"assignments":[1209],"declarations":[{"constant":false,"id":1209,"name":"receipt","nodeType":"VariableDeclaration","scope":1297,"src":"23363:23:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt"},"typeName":{"contractScope":null,"id":1208,"name":"Receipt","nodeType":"UserDefinedTypeName","referencedDeclaration":1770,"src":"23363:7:0","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt"}},"value":null,"visibility":"internal"}],"id":1214,"initialValue":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1210,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"23389:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receipts","nodeType":"MemberAccess","referencedDeclaration":1760,"src":"23389:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Receipt_$1770_storage_$","typeString":"mapping(address => struct GovernorBravoDelegateStorageV1.Receipt storage ref)"}},"id":1213,"indexExpression":{"argumentTypes":null,"id":1212,"name":"voter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1176,"src":"23407:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23389:24:0","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage","typeString":"struct GovernorBravoDelegateStorageV1.Receipt storage ref"}},"nodeType":"VariableDeclarationStatement","src":"23363:50:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1216,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1209,"src":"23431:7:0","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt storage pointer"}},"id":1217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"hasVoted","nodeType":"MemberAccess","referencedDeclaration":1765,"src":"23431:16:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"66616c7365","id":1218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23451:5:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"23431:25:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a20766f74657220616c726561647920766f746564","id":1220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23458:54:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_4db4ad45458d858d12fec9cccfea17def9275e2163ec97403e3da078a04e1a11","typeString":"literal_string \"GovernorBravo::castVoteInternal: voter already voted\""},"value":"GovernorBravo::castVoteInternal: voter already voted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4db4ad45458d858d12fec9cccfea17def9275e2163ec97403e3da078a04e1a11","typeString":"literal_string \"GovernorBravo::castVoteInternal: voter already voted\""}],"id":1215,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"23423:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23423:90:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1222,"nodeType":"ExpressionStatement","src":"23423:90:0"},{"assignments":[1224],"declarations":[{"constant":false,"id":1224,"name":"votes","nodeType":"VariableDeclaration","scope":1297,"src":"23523:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":1223,"name":"uint96","nodeType":"ElementaryTypeName","src":"23523:6:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"value":null,"visibility":"internal"}],"id":1231,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1227,"name":"voter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1176,"src":"23561:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1228,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"23568:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"startBlock","nodeType":"MemberAccess","referencedDeclaration":1744,"src":"23568:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":1225,"name":"xvsVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1716,"src":"23538:8:0","typeDescriptions":{"typeIdentifier":"t_contract$_XvsVaultInterface_$1894","typeString":"contract XvsVaultInterface"}},"id":1226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriorVotes","nodeType":"MemberAccess","referencedDeclaration":1893,"src":"23538:22:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint96_$","typeString":"function (address,uint256) view external returns (uint96)"}},"id":1230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23538:50:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"23523:65:0"},{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":1234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1232,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1180,"src":"23603:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"30","id":1233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23614:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23603:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":1248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1246,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1180,"src":"23712:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"31","id":1247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23723:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23712:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":1262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1260,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1180,"src":"23813:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"32","id":1261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23824:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"23813:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":1274,"nodeType":"IfStatement","src":"23809:103:0","trueBody":{"id":1273,"nodeType":"Block","src":"23827:85:0","statements":[{"expression":{"argumentTypes":null,"id":1271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1263,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"23841:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"abstainVotes","nodeType":"MemberAccess","referencedDeclaration":1752,"src":"23841:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1267,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"23872:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1268,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"abstainVotes","nodeType":"MemberAccess","referencedDeclaration":1752,"src":"23872:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1269,"name":"votes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"23895:5:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":1266,"name":"add256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"23865:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23865:36:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23841:60:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1272,"nodeType":"ExpressionStatement","src":"23841:60:0"}]}},"id":1275,"nodeType":"IfStatement","src":"23708:204:0","trueBody":{"id":1259,"nodeType":"Block","src":"23726:77:0","statements":[{"expression":{"argumentTypes":null,"id":1257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1249,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"23740:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"forVotes","nodeType":"MemberAccess","referencedDeclaration":1748,"src":"23740:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1253,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"23767:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1254,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"forVotes","nodeType":"MemberAccess","referencedDeclaration":1748,"src":"23767:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1255,"name":"votes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"23786:5:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":1252,"name":"add256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"23760:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23760:32:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23740:52:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1258,"nodeType":"ExpressionStatement","src":"23740:52:0"}]}},"id":1276,"nodeType":"IfStatement","src":"23599:313:0","trueBody":{"id":1245,"nodeType":"Block","src":"23617:85:0","statements":[{"expression":{"argumentTypes":null,"id":1243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1235,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"23631:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"againstVotes","nodeType":"MemberAccess","referencedDeclaration":1750,"src":"23631:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1239,"name":"proposal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1203,"src":"23662:8:0","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal storage pointer"}},"id":1240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"againstVotes","nodeType":"MemberAccess","referencedDeclaration":1750,"src":"23662:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1241,"name":"votes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"23685:5:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":1238,"name":"add256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1516,"src":"23655:6:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23655:36:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23631:60:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1244,"nodeType":"ExpressionStatement","src":"23631:60:0"}]}},{"expression":{"argumentTypes":null,"id":1281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1277,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1209,"src":"23922:7:0","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt storage pointer"}},"id":1279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"hasVoted","nodeType":"MemberAccess","referencedDeclaration":1765,"src":"23922:16:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"hexValue":"74727565","id":1280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23941:4:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23922:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1282,"nodeType":"ExpressionStatement","src":"23922:23:0"},{"expression":{"argumentTypes":null,"id":1287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1283,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1209,"src":"23955:7:0","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt storage pointer"}},"id":1285,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"support","nodeType":"MemberAccess","referencedDeclaration":1767,"src":"23955:15:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":1286,"name":"support","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1180,"src":"23973:7:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"23955:25:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":1288,"nodeType":"ExpressionStatement","src":"23955:25:0"},{"expression":{"argumentTypes":null,"id":1293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1289,"name":"receipt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1209,"src":"23990:7:0","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt storage pointer"}},"id":1291,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"votes","nodeType":"MemberAccess","referencedDeclaration":1769,"src":"23990:13:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":1292,"name":"votes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"24006:5:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"23990:21:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"id":1294,"nodeType":"ExpressionStatement","src":"23990:21:0"},{"expression":{"argumentTypes":null,"id":1295,"name":"votes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"24029:5:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":1184,"id":1296,"nodeType":"Return","src":"24022:12:0"}]},"documentation":"@notice Internal function that caries out voting logic\n@param voter The voter that is casting their vote\n@param proposalId The id of the proposal to vote on\n@param support The support value for the vote. 0=against, 1=for, 2=abstain\n@return The number of votes cast","id":1298,"implemented":true,"kind":"function","modifiers":[],"name":"castVoteInternal","nodeType":"FunctionDefinition","parameters":{"id":1181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1176,"name":"voter","nodeType":"VariableDeclaration","scope":1298,"src":"23023:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1175,"name":"address","nodeType":"ElementaryTypeName","src":"23023:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1178,"name":"proposalId","nodeType":"VariableDeclaration","scope":1298,"src":"23038:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1177,"name":"uint","nodeType":"ElementaryTypeName","src":"23038:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1180,"name":"support","nodeType":"VariableDeclaration","scope":1298,"src":"23055:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1179,"name":"uint8","nodeType":"ElementaryTypeName","src":"23055:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"}],"src":"23022:47:0"},"returnParameters":{"id":1184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1183,"name":"","nodeType":"VariableDeclaration","scope":1298,"src":"23088:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":1182,"name":"uint96","nodeType":"ElementaryTypeName","src":"23088:6:0","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"value":null,"visibility":"internal"}],"src":"23087:8:0"},"scope":1563,"src":"22997:1044:0","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":1338,"nodeType":"Block","src":"24221:358:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1304,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"24239:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"24239:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":1306,"name":"guardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1783,"src":"24253:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24239:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1308,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"24265:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"24265:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":1310,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"24279:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24265:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"24239:45:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a5f736574477561726469616e3a2061646d696e206f7220677561726469616e206f6e6c79","id":1313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24286:53:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_f13903e1eabc7759eed6c0bff3ddcc707d2fd566e366ac64c25fa90624578ecc","typeString":"literal_string \"GovernorBravo::_setGuardian: admin or guardian only\""},"value":"GovernorBravo::_setGuardian: admin or guardian only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f13903e1eabc7759eed6c0bff3ddcc707d2fd566e366ac64c25fa90624578ecc","typeString":"literal_string \"GovernorBravo::_setGuardian: admin or guardian only\""}],"id":1303,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"24231:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24231:109:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1315,"nodeType":"ExpressionStatement","src":"24231:109:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1317,"name":"newGuardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1300,"src":"24358:11:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":1319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24381:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1318,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24373:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":1320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24373:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"24358:25:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a5f736574477561726469616e3a2063616e6e6f74206c69766520776974686f7574206120677561726469616e","id":1322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24385:61:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_eefe3d246cd1a613548764705d4b203394f59e072e13911ce8f5cea82fc81a5c","typeString":"literal_string \"GovernorBravo::_setGuardian: cannot live without a guardian\""},"value":"GovernorBravo::_setGuardian: cannot live without a guardian"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_eefe3d246cd1a613548764705d4b203394f59e072e13911ce8f5cea82fc81a5c","typeString":"literal_string \"GovernorBravo::_setGuardian: cannot live without a guardian\""}],"id":1316,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"24350:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24350:97:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1324,"nodeType":"ExpressionStatement","src":"24350:97:0"},{"assignments":[1326],"declarations":[{"constant":false,"id":1326,"name":"oldGuardian","nodeType":"VariableDeclaration","scope":1338,"src":"24457:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1325,"name":"address","nodeType":"ElementaryTypeName","src":"24457:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"id":1328,"initialValue":{"argumentTypes":null,"id":1327,"name":"guardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1783,"src":"24479:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"24457:30:0"},{"expression":{"argumentTypes":null,"id":1331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":1329,"name":"guardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1783,"src":"24497:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":1330,"name":"newGuardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1300,"src":"24508:11:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24497:22:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1332,"nodeType":"ExpressionStatement","src":"24497:22:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1334,"name":"oldGuardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1326,"src":"24547:11:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":1335,"name":"newGuardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1300,"src":"24560:11:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1333,"name":"NewGuardian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1660,"src":"24535:11:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24535:37:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1337,"nodeType":"EmitStatement","src":"24530:42:0"}]},"documentation":"@notice Sets the new governance guardian\n@param newGuardian the address of the new guardian","id":1339,"implemented":true,"kind":"function","modifiers":[],"name":"_setGuardian","nodeType":"FunctionDefinition","parameters":{"id":1301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1300,"name":"newGuardian","nodeType":"VariableDeclaration","scope":1339,"src":"24191:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1299,"name":"address","nodeType":"ElementaryTypeName","src":"24191:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"24190:21:0"},"returnParameters":{"id":1302,"nodeType":"ParameterList","parameters":[],"src":"24221:0:0"},"scope":1563,"src":"24169:410:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":1389,"nodeType":"Block","src":"24918:420:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1345,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"24936:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"24936:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":1347,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"24950:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24936:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e206f6e6c79","id":1349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24957:38:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_c71cb3e7fc78df5497c78b1de8f5dd56ad9be94f8e673bd31105debcc4940e0c","typeString":"literal_string \"GovernorBravo::_initiate: admin only\""},"value":"GovernorBravo::_initiate: admin only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c71cb3e7fc78df5497c78b1de8f5dd56ad9be94f8e673bd31105debcc4940e0c","typeString":"literal_string \"GovernorBravo::_initiate: admin only\""}],"id":1344,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"24928:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24928:68:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1351,"nodeType":"ExpressionStatement","src":"24928:68:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1353,"name":"initialProposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1710,"src":"25014:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"30","id":1354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25035:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25014:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e6c7920696e697469617465206f6e6365","id":1356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25038:50:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_928739bbf55fe0185a70df55366e78160f0fe2084090e539cc66d62f04507e17","typeString":"literal_string \"GovernorBravo::_initiate: can only initiate once\""},"value":"GovernorBravo::_initiate: can only initiate once"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_928739bbf55fe0185a70df55366e78160f0fe2084090e539cc66d62f04507e17","typeString":"literal_string \"GovernorBravo::_initiate: can only initiate once\""}],"id":1352,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"25006:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25006:83:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1358,"nodeType":"ExpressionStatement","src":"25006:83:0"},{"expression":{"argumentTypes":null,"id":1365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":1359,"name":"proposalCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1712,"src":"25099:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1361,"name":"governorAlpha","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1341,"src":"25138:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1360,"name":"GovernorAlphaInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1900,"src":"25115:22:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GovernorAlphaInterface_$1900_$","typeString":"type(contract GovernorAlphaInterface)"}},"id":1362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25115:37:0","typeDescriptions":{"typeIdentifier":"t_contract$_GovernorAlphaInterface_$1900","typeString":"contract GovernorAlphaInterface"}},"id":1363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"proposalCount","nodeType":"MemberAccess","referencedDeclaration":1899,"src":"25115:51:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_uint256_$","typeString":"function () external returns (uint256)"}},"id":1364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25115:53:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25099:69:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1366,"nodeType":"ExpressionStatement","src":"25099:69:0"},{"expression":{"argumentTypes":null,"id":1369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":1367,"name":"initialProposalId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1710,"src":"25178:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":1368,"name":"proposalCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1712,"src":"25198:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25178:33:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1370,"nodeType":"ExpressionStatement","src":"25178:33:0"},{"body":{"id":1387,"nodeType":"Block","src":"25273:59:0","statements":[{"expression":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":1381,"name":"proposalTimelocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1805,"src":"25287:17:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"}},"id":1383,"indexExpression":{"argumentTypes":null,"id":1382,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1372,"src":"25305:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25287:20:0","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"id":1384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"acceptAdmin","nodeType":"MemberAccess","referencedDeclaration":1833,"src":"25287:32:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":1385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25287:34:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1386,"nodeType":"ExpressionStatement","src":"25287:34:0"}]},"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1374,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1372,"src":"25237:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"id":1375,"name":"getGovernanceRouteCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1562,"src":"25241:23:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":1376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25241:25:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"25237:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1388,"initializationExpression":{"assignments":[1372],"declarations":[{"constant":false,"id":1372,"name":"i","nodeType":"VariableDeclaration","scope":1388,"src":"25226:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1371,"name":"uint256","nodeType":"ElementaryTypeName","src":"25226:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":1373,"initialValue":null,"nodeType":"VariableDeclarationStatement","src":"25226:9:0"},"loopExpression":{"expression":{"argumentTypes":null,"id":1379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"25268:3:0","subExpression":{"argumentTypes":null,"id":1378,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1372,"src":"25270:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1380,"nodeType":"ExpressionStatement","src":"25268:3:0"},"nodeType":"ForStatement","src":"25221:111:0"}]},"documentation":"@notice Initiate the GovernorBravo contract\n@dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\n@param governorAlpha The address for the Governor to continue the proposal id count from","id":1390,"implemented":true,"kind":"function","modifiers":[],"name":"_initiate","nodeType":"FunctionDefinition","parameters":{"id":1342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1341,"name":"governorAlpha","nodeType":"VariableDeclaration","scope":1390,"src":"24886:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1340,"name":"address","nodeType":"ElementaryTypeName","src":"24886:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"24885:23:0"},"returnParameters":{"id":1343,"nodeType":"ParameterList","parameters":[],"src":"24918:0:0"},"scope":1563,"src":"24867:471:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":1416,"nodeType":"Block","src":"25561:314:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1396,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"25579:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"25579:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":1398,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"25593:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"25579:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a3a5f73657450726f706f73616c4d61784f7065726174696f6e733a2061646d696e206f6e6c79","id":1400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25600:54:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_b749d63b62ec9246db67e424bdb9ab02b022070d8cd7b8fbd4eca85c166a94e5","typeString":"literal_string \"GovernorBravo::_setProposalMaxOperations: admin only\""},"value":"GovernorBravo::_setProposalMaxOperations: admin only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b749d63b62ec9246db67e424bdb9ab02b022070d8cd7b8fbd4eca85c166a94e5","typeString":"literal_string \"GovernorBravo::_setProposalMaxOperations: admin only\""}],"id":1395,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"25571:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25571:84:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1402,"nodeType":"ExpressionStatement","src":"25571:84:0"},{"assignments":[1404],"declarations":[{"constant":false,"id":1404,"name":"oldProposalMaxOperations","nodeType":"VariableDeclaration","scope":1416,"src":"25665:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1403,"name":"uint","nodeType":"ElementaryTypeName","src":"25665:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":1406,"initialValue":{"argumentTypes":null,"id":1405,"name":"proposalMaxOperations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1781,"src":"25697:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25665:53:0"},{"expression":{"argumentTypes":null,"id":1409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":1407,"name":"proposalMaxOperations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1781,"src":"25728:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":1408,"name":"proposalMaxOperations_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1392,"src":"25752:22:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25728:46:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1410,"nodeType":"ExpressionStatement","src":"25728:46:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1412,"name":"oldProposalMaxOperations","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1404,"src":"25819:24:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1413,"name":"proposalMaxOperations_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1392,"src":"25845:22:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1411,"name":"ProposalMaxOperationsUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1666,"src":"25790:28:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":1414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25790:78:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1415,"nodeType":"EmitStatement","src":"25785:83:0"}]},"documentation":"@notice Set max proposal operations\n@dev Admin only.\n@param proposalMaxOperations_ Max proposal operations","id":1417,"implemented":true,"kind":"function","modifiers":[],"name":"_setProposalMaxOperations","nodeType":"FunctionDefinition","parameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1392,"name":"proposalMaxOperations_","nodeType":"VariableDeclaration","scope":1417,"src":"25523:27:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1391,"name":"uint","nodeType":"ElementaryTypeName","src":"25523:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"25522:29:0"},"returnParameters":{"id":1394,"nodeType":"ParameterList","parameters":[],"src":"25561:0:0"},"scope":1563,"src":"25488:387:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":1443,"nodeType":"Block","src":"26249:461:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1423,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"26299:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"26299:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":1425,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"26313:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26299:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2061646d696e206f6e6c79","id":1427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"26320:44:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_15b86236d8e6aaae4fbee852729fd208d60cf2b5c9f6ec4ea2291e707cb07995","typeString":"literal_string \"GovernorBravo:_setPendingAdmin: admin only\""},"value":"GovernorBravo:_setPendingAdmin: admin only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_15b86236d8e6aaae4fbee852729fd208d60cf2b5c9f6ec4ea2291e707cb07995","typeString":"literal_string \"GovernorBravo:_setPendingAdmin: admin only\""}],"id":1422,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"26291:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26291:74:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1429,"nodeType":"ExpressionStatement","src":"26291:74:0"},{"assignments":[1431],"declarations":[{"constant":false,"id":1431,"name":"oldPendingAdmin","nodeType":"VariableDeclaration","scope":1443,"src":"26436:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1430,"name":"address","nodeType":"ElementaryTypeName","src":"26436:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"id":1433,"initialValue":{"argumentTypes":null,"id":1432,"name":"pendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1697,"src":"26462:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"26436:38:0"},{"expression":{"argumentTypes":null,"id":1436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":1434,"name":"pendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1697,"src":"26542:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":1435,"name":"newPendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1419,"src":"26557:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26542:30:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1437,"nodeType":"ExpressionStatement","src":"26542:30:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1439,"name":"oldPendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1431,"src":"26670:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":1440,"name":"newPendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1419,"src":"26687:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1438,"name":"NewPendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1648,"src":"26654:15:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26654:49:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1442,"nodeType":"EmitStatement","src":"26649:54:0"}]},"documentation":"@notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n@dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\n@param newPendingAdmin New pending admin.","id":1444,"implemented":true,"kind":"function","modifiers":[],"name":"_setPendingAdmin","nodeType":"FunctionDefinition","parameters":{"id":1420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1419,"name":"newPendingAdmin","nodeType":"VariableDeclaration","scope":1444,"src":"26215:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1418,"name":"address","nodeType":"ElementaryTypeName","src":"26215:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"26214:25:0"},"returnParameters":{"id":1421,"nodeType":"ParameterList","parameters":[],"src":"26249:0:0"},"scope":1563,"src":"26189:521:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":1490,"nodeType":"Block","src":"26923:622:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1448,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"27026:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"27026:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":1450,"name":"pendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1697,"src":"27040:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"27026:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"id":1457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1452,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"27056:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"27056:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":1455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27078:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27070:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":1456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27070:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"27056:24:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"27026:54:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e64696e672061646d696e206f6e6c79","id":1459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"27094:48:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_a193c43d3fcb6bad7dee9cd0aee4d22b57650045fda67e20f8280b4ef9e1a8a8","typeString":"literal_string \"GovernorBravo:_acceptAdmin: pending admin only\""},"value":"GovernorBravo:_acceptAdmin: pending admin only"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a193c43d3fcb6bad7dee9cd0aee4d22b57650045fda67e20f8280b4ef9e1a8a8","typeString":"literal_string \"GovernorBravo:_acceptAdmin: pending admin only\""}],"id":1447,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"27005:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27005:147:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1461,"nodeType":"ExpressionStatement","src":"27005:147:0"},{"assignments":[1463],"declarations":[{"constant":false,"id":1463,"name":"oldAdmin","nodeType":"VariableDeclaration","scope":1490,"src":"27215:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1462,"name":"address","nodeType":"ElementaryTypeName","src":"27215:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"id":1465,"initialValue":{"argumentTypes":null,"id":1464,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"27234:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"27215:24:0"},{"assignments":[1467],"declarations":[{"constant":false,"id":1467,"name":"oldPendingAdmin","nodeType":"VariableDeclaration","scope":1490,"src":"27249:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1466,"name":"address","nodeType":"ElementaryTypeName","src":"27249:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"id":1469,"initialValue":{"argumentTypes":null,"id":1468,"name":"pendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1697,"src":"27275:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"27249:38:0"},{"expression":{"argumentTypes":null,"id":1472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":1470,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"27345:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":1471,"name":"pendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1697,"src":"27353:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"27345:20:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1473,"nodeType":"ExpressionStatement","src":"27345:20:0"},{"expression":{"argumentTypes":null,"id":1478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":1474,"name":"pendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1697,"src":"27411:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":1476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27434:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27426:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":1477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27426:10:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"27411:25:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1479,"nodeType":"ExpressionStatement","src":"27411:25:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1481,"name":"oldAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1463,"src":"27461:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":1482,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1695,"src":"27471:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1480,"name":"NewAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1654,"src":"27452:8:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27452:25:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1484,"nodeType":"EmitStatement","src":"27447:30:0"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1486,"name":"oldPendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1467,"src":"27508:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":1487,"name":"pendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1697,"src":"27525:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1485,"name":"NewPendingAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1648,"src":"27492:15:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27492:46:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1489,"nodeType":"EmitStatement","src":"27487:51:0"}]},"documentation":"@notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\n@dev Admin function for pending admin to accept role and update admin","id":1491,"implemented":true,"kind":"function","modifiers":[],"name":"_acceptAdmin","nodeType":"FunctionDefinition","parameters":{"id":1445,"nodeType":"ParameterList","parameters":[],"src":"26911:2:0"},"returnParameters":{"id":1446,"nodeType":"ParameterList","parameters":[],"src":"26923:0:0"},"scope":1563,"src":"26890:655:0","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":1515,"nodeType":"Block","src":"27618:95:0","statements":[{"assignments":[1501],"declarations":[{"constant":false,"id":1501,"name":"c","nodeType":"VariableDeclaration","scope":1515,"src":"27628:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1500,"name":"uint","nodeType":"ElementaryTypeName","src":"27628:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":1505,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1502,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1493,"src":"27637:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"argumentTypes":null,"id":1503,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1495,"src":"27641:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27637:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27628:14:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1507,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"27660:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":1508,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1493,"src":"27665:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27660:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"6164646974696f6e206f766572666c6f77","id":1510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"27668:19:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_8c0d96e929759368d857f737222dcb6a5217a09dbc29c3e61addc531fdea00f5","typeString":"literal_string \"addition overflow\""},"value":"addition overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8c0d96e929759368d857f737222dcb6a5217a09dbc29c3e61addc531fdea00f5","typeString":"literal_string \"addition overflow\""}],"id":1506,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"27652:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27652:36:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1512,"nodeType":"ExpressionStatement","src":"27652:36:0"},{"expression":{"argumentTypes":null,"id":1513,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"27705:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1499,"id":1514,"nodeType":"Return","src":"27698:8:0"}]},"documentation":null,"id":1516,"implemented":true,"kind":"function","modifiers":[],"name":"add256","nodeType":"FunctionDefinition","parameters":{"id":1496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1493,"name":"a","nodeType":"VariableDeclaration","scope":1516,"src":"27567:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1492,"name":"uint256","nodeType":"ElementaryTypeName","src":"27567:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1495,"name":"b","nodeType":"VariableDeclaration","scope":1516,"src":"27578:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1494,"name":"uint256","nodeType":"ElementaryTypeName","src":"27578:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"27566:22:0"},"returnParameters":{"id":1499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1498,"name":"","nodeType":"VariableDeclaration","scope":1516,"src":"27612:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1497,"name":"uint","nodeType":"ElementaryTypeName","src":"27612:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"27611:6:0"},"scope":1563,"src":"27551:162:0","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":1536,"nodeType":"Block","src":"27786:79:0","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1526,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1520,"src":"27804:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"id":1527,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1518,"src":"27809:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27804:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"7375627472616374696f6e20756e646572666c6f77","id":1529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"27812:23:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_f22f6b3017af2aff30fb71d5e8f8adc6cd3022431e6fc88c01d6d8b2adb30f31","typeString":"literal_string \"subtraction underflow\""},"value":"subtraction underflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f22f6b3017af2aff30fb71d5e8f8adc6cd3022431e6fc88c01d6d8b2adb30f31","typeString":"literal_string \"subtraction underflow\""}],"id":1525,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"27796:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27796:40:0","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1531,"nodeType":"ExpressionStatement","src":"27796:40:0"},{"expression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1532,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1518,"src":"27853:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"argumentTypes":null,"id":1533,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1520,"src":"27857:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27853:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1524,"id":1535,"nodeType":"Return","src":"27846:12:0"}]},"documentation":null,"id":1537,"implemented":true,"kind":"function","modifiers":[],"name":"sub256","nodeType":"FunctionDefinition","parameters":{"id":1521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1518,"name":"a","nodeType":"VariableDeclaration","scope":1537,"src":"27735:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1517,"name":"uint256","nodeType":"ElementaryTypeName","src":"27735:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1520,"name":"b","nodeType":"VariableDeclaration","scope":1537,"src":"27746:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1519,"name":"uint256","nodeType":"ElementaryTypeName","src":"27746:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"27734:22:0"},"returnParameters":{"id":1524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1523,"name":"","nodeType":"VariableDeclaration","scope":1537,"src":"27780:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1522,"name":"uint","nodeType":"ElementaryTypeName","src":"27780:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"27779:6:0"},"scope":1563,"src":"27719:146:0","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":1548,"nodeType":"Block","src":"27930:115:0","statements":[{"assignments":[1543],"declarations":[{"constant":false,"id":1543,"name":"chainId","nodeType":"VariableDeclaration","scope":1548,"src":"27940:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1542,"name":"uint","nodeType":"ElementaryTypeName","src":"27940:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":1544,"initialValue":null,"nodeType":"VariableDeclarationStatement","src":"27940:12:0"},{"externalReferences":[{"chainId":{"declaration":1543,"isOffset":false,"isSlot":false,"src":"27985:7:0","valueSize":1}}],"id":1545,"nodeType":"InlineAssembly","operations":"{ chainId := chainid() }","src":"27962:53:0"},{"expression":{"argumentTypes":null,"id":1546,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1543,"src":"28031:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1541,"id":1547,"nodeType":"Return","src":"28024:14:0"}]},"documentation":null,"id":1549,"implemented":true,"kind":"function","modifiers":[],"name":"getChainIdInternal","nodeType":"FunctionDefinition","parameters":{"id":1538,"nodeType":"ParameterList","parameters":[],"src":"27898:2:0"},"returnParameters":{"id":1541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1540,"name":"","nodeType":"VariableDeclaration","scope":1549,"src":"27924:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1539,"name":"uint","nodeType":"ElementaryTypeName","src":"27924:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"27923:6:0"},"scope":1563,"src":"27871:174:0","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":1561,"nodeType":"Block","src":"28116:56:0","statements":[{"expression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":1559,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":1555,"name":"ProposalType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1790,"src":"28139:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProposalType_$1790_$","typeString":"type(enum GovernorBravoDelegateStorageV2.ProposalType)"}},"id":1556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"CRITICAL","nodeType":"MemberAccess","referencedDeclaration":null,"src":"28139:21:0","typeDescriptions":{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ProposalType_$1790","typeString":"enum GovernorBravoDelegateStorageV2.ProposalType"}],"id":1554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28133:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":"uint8"},"id":1557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28133:28:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"argumentTypes":null,"hexValue":"31","id":1558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28164:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28133:32:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":1553,"id":1560,"nodeType":"Return","src":"28126:39:0"}]},"documentation":null,"id":1562,"implemented":true,"kind":"function","modifiers":[],"name":"getGovernanceRouteCount","nodeType":"FunctionDefinition","parameters":{"id":1550,"nodeType":"ParameterList","parameters":[],"src":"28083:2:0"},"returnParameters":{"id":1553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1552,"name":"","nodeType":"VariableDeclaration","scope":1562,"src":"28109:5:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1551,"name":"uint8","nodeType":"ElementaryTypeName","src":"28109:5:0","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"}],"src":"28108:7:0"},"scope":1563,"src":"28051:121:0","stateMutability":"pure","superFunction":null,"visibility":"internal"}],"scope":1564,"src":"4581:23593:0"}],"src":"0:28175:0"},"id":0},"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol":{"ast":{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol","exportedSymbols":{"GovernorAlphaInterface":[1900],"GovernorBravoDelegateStorageV1":[1784],"GovernorBravoDelegateStorageV2":[1806],"GovernorBravoDelegateStorageV3":[1820],"GovernorBravoDelegatorStorage":[1700],"GovernorBravoEvents":[1693],"TimelockInterface":[1884],"XvsVaultInterface":[1894]},"id":1901,"nodeType":"SourceUnit","nodes":[{"id":1565,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:1"},{"id":1566,"literals":["experimental","ABIEncoderV2"],"nodeType":"PragmaDirective","src":"25:33:1"},{"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":"@title GovernorBravoEvents\n@author Venus\n@notice Set of events emitted by the GovernorBravo contracts.","fullyImplemented":true,"id":1693,"linearizedBaseContracts":[1693],"name":"GovernorBravoEvents","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":"@notice An event emitted when a new proposal is created","id":1592,"name":"ProposalCreated","nodeType":"EventDefinition","parameters":{"id":1591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1568,"indexed":false,"name":"id","nodeType":"VariableDeclaration","scope":1592,"src":"310:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1567,"name":"uint","nodeType":"ElementaryTypeName","src":"310:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1570,"indexed":false,"name":"proposer","nodeType":"VariableDeclaration","scope":1592,"src":"327:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1569,"name":"address","nodeType":"ElementaryTypeName","src":"327:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1573,"indexed":false,"name":"targets","nodeType":"VariableDeclaration","scope":1592,"src":"353:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1571,"name":"address","nodeType":"ElementaryTypeName","src":"353:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1572,"length":null,"nodeType":"ArrayTypeName","src":"353:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":1576,"indexed":false,"name":"values","nodeType":"VariableDeclaration","scope":1592,"src":"380:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1574,"name":"uint","nodeType":"ElementaryTypeName","src":"380:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1575,"length":null,"nodeType":"ArrayTypeName","src":"380:6:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":1579,"indexed":false,"name":"signatures","nodeType":"VariableDeclaration","scope":1592,"src":"403:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":1577,"name":"string","nodeType":"ElementaryTypeName","src":"403:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":1578,"length":null,"nodeType":"ArrayTypeName","src":"403:8:1","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":1582,"indexed":false,"name":"calldatas","nodeType":"VariableDeclaration","scope":1592,"src":"432:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":1580,"name":"bytes","nodeType":"ElementaryTypeName","src":"432:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":1581,"length":null,"nodeType":"ArrayTypeName","src":"432:7:1","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":1584,"indexed":false,"name":"startBlock","nodeType":"VariableDeclaration","scope":1592,"src":"459:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1583,"name":"uint","nodeType":"ElementaryTypeName","src":"459:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1586,"indexed":false,"name":"endBlock","nodeType":"VariableDeclaration","scope":1592,"src":"484:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1585,"name":"uint","nodeType":"ElementaryTypeName","src":"484:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1588,"indexed":false,"name":"description","nodeType":"VariableDeclaration","scope":1592,"src":"507:18:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1587,"name":"string","nodeType":"ElementaryTypeName","src":"507:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":1590,"indexed":false,"name":"proposalType","nodeType":"VariableDeclaration","scope":1592,"src":"535:18:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1589,"name":"uint8","nodeType":"ElementaryTypeName","src":"535:5:1","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"}],"src":"300:259:1"},"src":"279:281:1"},{"anonymous":false,"documentation":"@notice An event emitted when a vote has been cast on a proposal\n @param voter The address which casted a vote\n @param proposalId The proposal id which was voted on\n @param support Support value for the vote. 0=against, 1=for, 2=abstain\n @param votes Number of votes which were cast by the voter\n @param reason The reason given for the vote by the voter","id":1604,"name":"VoteCast","nodeType":"EventDefinition","parameters":{"id":1603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1594,"indexed":true,"name":"voter","nodeType":"VariableDeclaration","scope":1604,"src":"978:21:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1593,"name":"address","nodeType":"ElementaryTypeName","src":"978:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1596,"indexed":false,"name":"proposalId","nodeType":"VariableDeclaration","scope":1604,"src":"1001:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1595,"name":"uint","nodeType":"ElementaryTypeName","src":"1001:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1598,"indexed":false,"name":"support","nodeType":"VariableDeclaration","scope":1604,"src":"1018:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1597,"name":"uint8","nodeType":"ElementaryTypeName","src":"1018:5:1","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":1600,"indexed":false,"name":"votes","nodeType":"VariableDeclaration","scope":1604,"src":"1033:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1599,"name":"uint","nodeType":"ElementaryTypeName","src":"1033:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1602,"indexed":false,"name":"reason","nodeType":"VariableDeclaration","scope":1604,"src":"1045:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1601,"name":"string","nodeType":"ElementaryTypeName","src":"1045:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"977:82:1"},"src":"963:97:1"},{"anonymous":false,"documentation":"@notice An event emitted when a proposal has been canceled","id":1608,"name":"ProposalCanceled","nodeType":"EventDefinition","parameters":{"id":1607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1606,"indexed":false,"name":"id","nodeType":"VariableDeclaration","scope":1608,"src":"1156:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1605,"name":"uint","nodeType":"ElementaryTypeName","src":"1156:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1155:9:1"},"src":"1133:32:1"},{"anonymous":false,"documentation":"@notice An event emitted when a proposal has been queued in the Timelock","id":1614,"name":"ProposalQueued","nodeType":"EventDefinition","parameters":{"id":1613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1610,"indexed":false,"name":"id","nodeType":"VariableDeclaration","scope":1614,"src":"1273:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1609,"name":"uint","nodeType":"ElementaryTypeName","src":"1273:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1612,"indexed":false,"name":"eta","nodeType":"VariableDeclaration","scope":1614,"src":"1282:8:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1611,"name":"uint","nodeType":"ElementaryTypeName","src":"1282:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1272:19:1"},"src":"1252:40:1"},{"anonymous":false,"documentation":"@notice An event emitted when a proposal has been executed in the Timelock","id":1618,"name":"ProposalExecuted","nodeType":"EventDefinition","parameters":{"id":1617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1616,"indexed":false,"name":"id","nodeType":"VariableDeclaration","scope":1618,"src":"1404:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1615,"name":"uint","nodeType":"ElementaryTypeName","src":"1404:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1403:9:1"},"src":"1381:32:1"},{"anonymous":false,"documentation":"@notice An event emitted when the voting delay is set","id":1624,"name":"VotingDelaySet","nodeType":"EventDefinition","parameters":{"id":1623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1620,"indexed":false,"name":"oldVotingDelay","nodeType":"VariableDeclaration","scope":1624,"src":"1502:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1619,"name":"uint","nodeType":"ElementaryTypeName","src":"1502:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1622,"indexed":false,"name":"newVotingDelay","nodeType":"VariableDeclaration","scope":1624,"src":"1523:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1621,"name":"uint","nodeType":"ElementaryTypeName","src":"1523:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1501:42:1"},"src":"1481:63:1"},{"anonymous":false,"documentation":"@notice An event emitted when the voting period is set","id":1630,"name":"VotingPeriodSet","nodeType":"EventDefinition","parameters":{"id":1629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1626,"indexed":false,"name":"oldVotingPeriod","nodeType":"VariableDeclaration","scope":1630,"src":"1635:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1625,"name":"uint","nodeType":"ElementaryTypeName","src":"1635:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1628,"indexed":false,"name":"newVotingPeriod","nodeType":"VariableDeclaration","scope":1630,"src":"1657:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1627,"name":"uint","nodeType":"ElementaryTypeName","src":"1657:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1634:44:1"},"src":"1613:66:1"},{"anonymous":false,"documentation":"@notice Emitted when implementation is changed","id":1636,"name":"NewImplementation","nodeType":"EventDefinition","parameters":{"id":1635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"indexed":false,"name":"oldImplementation","nodeType":"VariableDeclaration","scope":1636,"src":"1764:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1631,"name":"address","nodeType":"ElementaryTypeName","src":"1764:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1634,"indexed":false,"name":"newImplementation","nodeType":"VariableDeclaration","scope":1636,"src":"1791:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1633,"name":"address","nodeType":"ElementaryTypeName","src":"1791:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"1763:54:1"},"src":"1740:78:1"},{"anonymous":false,"documentation":"@notice Emitted when proposal threshold is set","id":1642,"name":"ProposalThresholdSet","nodeType":"EventDefinition","parameters":{"id":1641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1638,"indexed":false,"name":"oldProposalThreshold","nodeType":"VariableDeclaration","scope":1642,"src":"1906:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1637,"name":"uint","nodeType":"ElementaryTypeName","src":"1906:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1640,"indexed":false,"name":"newProposalThreshold","nodeType":"VariableDeclaration","scope":1642,"src":"1933:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1639,"name":"uint","nodeType":"ElementaryTypeName","src":"1933:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1905:54:1"},"src":"1879:81:1"},{"anonymous":false,"documentation":"@notice Emitted when pendingAdmin is changed","id":1648,"name":"NewPendingAdmin","nodeType":"EventDefinition","parameters":{"id":1647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1644,"indexed":false,"name":"oldPendingAdmin","nodeType":"VariableDeclaration","scope":1648,"src":"2041:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1643,"name":"address","nodeType":"ElementaryTypeName","src":"2041:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1646,"indexed":false,"name":"newPendingAdmin","nodeType":"VariableDeclaration","scope":1648,"src":"2066:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1645,"name":"address","nodeType":"ElementaryTypeName","src":"2066:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"2040:50:1"},"src":"2019:72:1"},{"anonymous":false,"documentation":"@notice Emitted when pendingAdmin is accepted, which means admin is updated","id":1654,"name":"NewAdmin","nodeType":"EventDefinition","parameters":{"id":1653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1650,"indexed":false,"name":"oldAdmin","nodeType":"VariableDeclaration","scope":1654,"src":"2196:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1649,"name":"address","nodeType":"ElementaryTypeName","src":"2196:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1652,"indexed":false,"name":"newAdmin","nodeType":"VariableDeclaration","scope":1654,"src":"2214:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1651,"name":"address","nodeType":"ElementaryTypeName","src":"2214:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"2195:36:1"},"src":"2181:51:1"},{"anonymous":false,"documentation":"@notice Emitted when the new guardian address is set","id":1660,"name":"NewGuardian","nodeType":"EventDefinition","parameters":{"id":1659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1656,"indexed":false,"name":"oldGuardian","nodeType":"VariableDeclaration","scope":1660,"src":"2317:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1655,"name":"address","nodeType":"ElementaryTypeName","src":"2317:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1658,"indexed":false,"name":"newGuardian","nodeType":"VariableDeclaration","scope":1660,"src":"2338:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1657,"name":"address","nodeType":"ElementaryTypeName","src":"2338:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"2316:42:1"},"src":"2299:60:1"},{"anonymous":false,"documentation":"@notice Emitted when the maximum number of operations in one proposal is updated","id":1666,"name":"ProposalMaxOperationsUpdated","nodeType":"EventDefinition","parameters":{"id":1665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1662,"indexed":false,"name":"oldMaxOperations","nodeType":"VariableDeclaration","scope":1666,"src":"2489:21:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1661,"name":"uint","nodeType":"ElementaryTypeName","src":"2489:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1664,"indexed":false,"name":"newMaxOperations","nodeType":"VariableDeclaration","scope":1666,"src":"2512:21:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1663,"name":"uint","nodeType":"ElementaryTypeName","src":"2512:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2488:46:1"},"src":"2454:81:1"},{"anonymous":false,"documentation":"@notice Emitted when the new validation params are set","id":1684,"name":"SetValidationParams","nodeType":"EventDefinition","parameters":{"id":1683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1668,"indexed":false,"name":"oldMinVotingPeriod","nodeType":"VariableDeclaration","scope":1684,"src":"2639:26:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1667,"name":"uint256","nodeType":"ElementaryTypeName","src":"2639:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1670,"indexed":false,"name":"newMinVotingPeriod","nodeType":"VariableDeclaration","scope":1684,"src":"2675:26:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1669,"name":"uint256","nodeType":"ElementaryTypeName","src":"2675:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1672,"indexed":false,"name":"oldmaxVotingPeriod","nodeType":"VariableDeclaration","scope":1684,"src":"2711:26:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1671,"name":"uint256","nodeType":"ElementaryTypeName","src":"2711:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1674,"indexed":false,"name":"newmaxVotingPeriod","nodeType":"VariableDeclaration","scope":1684,"src":"2747:26:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1673,"name":"uint256","nodeType":"ElementaryTypeName","src":"2747:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1676,"indexed":false,"name":"oldminVotingDelay","nodeType":"VariableDeclaration","scope":1684,"src":"2783:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1675,"name":"uint256","nodeType":"ElementaryTypeName","src":"2783:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1678,"indexed":false,"name":"newminVotingDelay","nodeType":"VariableDeclaration","scope":1684,"src":"2818:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1677,"name":"uint256","nodeType":"ElementaryTypeName","src":"2818:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1680,"indexed":false,"name":"oldmaxVotingDelay","nodeType":"VariableDeclaration","scope":1684,"src":"2853:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1679,"name":"uint256","nodeType":"ElementaryTypeName","src":"2853:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1682,"indexed":false,"name":"newmaxVotingDelay","nodeType":"VariableDeclaration","scope":1684,"src":"2888:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1681,"name":"uint256","nodeType":"ElementaryTypeName","src":"2888:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2629:290:1"},"src":"2604:316:1"},{"anonymous":false,"documentation":"@notice Emitted when new Proposal configs added","id":1692,"name":"SetProposalConfigs","nodeType":"EventDefinition","parameters":{"id":1691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1686,"indexed":false,"name":"votingPeriod","nodeType":"VariableDeclaration","scope":1692,"src":"3007:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1685,"name":"uint256","nodeType":"ElementaryTypeName","src":"3007:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1688,"indexed":false,"name":"votingDelay","nodeType":"VariableDeclaration","scope":1692,"src":"3029:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1687,"name":"uint256","nodeType":"ElementaryTypeName","src":"3029:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1690,"indexed":false,"name":"proposalThreshold","nodeType":"VariableDeclaration","scope":1692,"src":"3050:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1689,"name":"uint256","nodeType":"ElementaryTypeName","src":"3050:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3006:70:1"},"src":"2982:95:1"}],"scope":1901,"src":"180:2899:1"},{"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":"@title GovernorBravoDelegatorStorage\n@author Venus\n@notice Storage layout of the `GovernorBravoDelegator` contract","fullyImplemented":true,"id":1700,"linearizedBaseContracts":[1700],"name":"GovernorBravoDelegatorStorage","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":1695,"name":"admin","nodeType":"VariableDeclaration","scope":1700,"src":"3306:20:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1694,"name":"address","nodeType":"ElementaryTypeName","src":"3306:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"public"},{"constant":false,"id":1697,"name":"pendingAdmin","nodeType":"VariableDeclaration","scope":1700,"src":"3389:27:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1696,"name":"address","nodeType":"ElementaryTypeName","src":"3389:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"public"},{"constant":false,"id":1699,"name":"implementation","nodeType":"VariableDeclaration","scope":1700,"src":"3465:29:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1698,"name":"address","nodeType":"ElementaryTypeName","src":"3465:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"public"}],"scope":1901,"src":"3213:284:1"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":1701,"name":"GovernorBravoDelegatorStorage","nodeType":"UserDefinedTypeName","referencedDeclaration":1700,"src":"3810:29:1","typeDescriptions":{"typeIdentifier":"t_contract$_GovernorBravoDelegatorStorage_$1700","typeString":"contract GovernorBravoDelegatorStorage"}},"id":1702,"nodeType":"InheritanceSpecifier","src":"3810:29:1"}],"contractDependencies":[1700],"contractKind":"contract","documentation":"@title GovernorBravoDelegateStorageV1\n@dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\ncontract which implements GovernorBravoDelegateStorageV1 and following the naming convention\nGovernorBravoDelegateStorageVX.","fullyImplemented":true,"id":1784,"linearizedBaseContracts":[1784,1700],"name":"GovernorBravoDelegateStorageV1","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":1704,"name":"votingDelay","nodeType":"VariableDeclaration","scope":1784,"src":"3952:23:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint","nodeType":"ElementaryTypeName","src":"3952:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"constant":false,"id":1706,"name":"votingPeriod","nodeType":"VariableDeclaration","scope":1784,"src":"4057:24:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1705,"name":"uint","nodeType":"ElementaryTypeName","src":"4057:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"constant":false,"id":1708,"name":"proposalThreshold","nodeType":"VariableDeclaration","scope":1784,"src":"4186:29:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1707,"name":"uint","nodeType":"ElementaryTypeName","src":"4186:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"constant":false,"id":1710,"name":"initialProposalId","nodeType":"VariableDeclaration","scope":1784,"src":"4272:29:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1709,"name":"uint","nodeType":"ElementaryTypeName","src":"4272:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"constant":false,"id":1712,"name":"proposalCount","nodeType":"VariableDeclaration","scope":1784,"src":"4354:25:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1711,"name":"uint","nodeType":"ElementaryTypeName","src":"4354:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"constant":false,"id":1714,"name":"timelock","nodeType":"VariableDeclaration","scope":1784,"src":"4445:33:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"},"typeName":{"contractScope":null,"id":1713,"name":"TimelockInterface","nodeType":"UserDefinedTypeName","referencedDeclaration":1884,"src":"4445:17:1","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}},"value":null,"visibility":"public"},{"constant":false,"id":1716,"name":"xvsVault","nodeType":"VariableDeclaration","scope":1784,"src":"4543:33:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_XvsVaultInterface_$1894","typeString":"contract XvsVaultInterface"},"typeName":{"contractScope":null,"id":1715,"name":"XvsVaultInterface","nodeType":"UserDefinedTypeName","referencedDeclaration":1894,"src":"4543:17:1","typeDescriptions":{"typeIdentifier":"t_contract$_XvsVaultInterface_$1894","typeString":"contract XvsVaultInterface"}},"value":null,"visibility":"public"},{"constant":false,"id":1720,"name":"proposals","nodeType":"VariableDeclaration","scope":1784,"src":"4650:42:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal)"},"typeName":{"id":1719,"keyType":{"id":1717,"name":"uint","nodeType":"ElementaryTypeName","src":"4658:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4650:25:1","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Proposal_$1763_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal)"},"valueType":{"contractScope":null,"id":1718,"name":"Proposal","nodeType":"UserDefinedTypeName","referencedDeclaration":1763,"src":"4666:8:1","typeDescriptions":{"typeIdentifier":"t_struct$_Proposal_$1763_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Proposal"}}},"value":null,"visibility":"public"},{"constant":false,"id":1724,"name":"latestProposalIds","nodeType":"VariableDeclaration","scope":1784,"src":"4753:49:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":1723,"keyType":{"id":1721,"name":"address","nodeType":"ElementaryTypeName","src":"4761:7:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4753:24:1","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":1722,"name":"uint","nodeType":"ElementaryTypeName","src":"4772:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"value":null,"visibility":"public"},{"canonicalName":"GovernorBravoDelegateStorageV1.Proposal","id":1763,"members":[{"constant":false,"id":1726,"name":"id","nodeType":"VariableDeclaration","scope":1763,"src":"4891:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1725,"name":"uint","nodeType":"ElementaryTypeName","src":"4891:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1728,"name":"proposer","nodeType":"VariableDeclaration","scope":1763,"src":"4952:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1727,"name":"address","nodeType":"ElementaryTypeName","src":"4952:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1730,"name":"eta","nodeType":"VariableDeclaration","scope":1763,"src":"5090:8:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1729,"name":"uint","nodeType":"ElementaryTypeName","src":"5090:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1733,"name":"targets","nodeType":"VariableDeclaration","scope":1763,"src":"5186:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1731,"name":"address","nodeType":"ElementaryTypeName","src":"5186:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1732,"length":null,"nodeType":"ArrayTypeName","src":"5186:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":1736,"name":"values","nodeType":"VariableDeclaration","scope":1763,"src":"5314:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1734,"name":"uint","nodeType":"ElementaryTypeName","src":"5314:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1735,"length":null,"nodeType":"ArrayTypeName","src":"5314:6:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":1739,"name":"signatures","nodeType":"VariableDeclaration","scope":1763,"src":"5410:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":1737,"name":"string","nodeType":"ElementaryTypeName","src":"5410:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":1738,"length":null,"nodeType":"ArrayTypeName","src":"5410:8:1","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":1742,"name":"calldatas","nodeType":"VariableDeclaration","scope":1763,"src":"5514:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":1740,"name":"bytes","nodeType":"ElementaryTypeName","src":"5514:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":1741,"length":null,"nodeType":"ArrayTypeName","src":"5514:7:1","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"value":null,"visibility":"internal"},{"constant":false,"id":1744,"name":"startBlock","nodeType":"VariableDeclaration","scope":1763,"src":"5649:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1743,"name":"uint","nodeType":"ElementaryTypeName","src":"5649:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1746,"name":"endBlock","nodeType":"VariableDeclaration","scope":1763,"src":"5765:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1745,"name":"uint","nodeType":"ElementaryTypeName","src":"5765:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1748,"name":"forVotes","nodeType":"VariableDeclaration","scope":1763,"src":"5858:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1747,"name":"uint","nodeType":"ElementaryTypeName","src":"5858:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1750,"name":"againstVotes","nodeType":"VariableDeclaration","scope":1763,"src":"5956:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1749,"name":"uint","nodeType":"ElementaryTypeName","src":"5956:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1752,"name":"abstainVotes","nodeType":"VariableDeclaration","scope":1763,"src":"6060:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1751,"name":"uint","nodeType":"ElementaryTypeName","src":"6060:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1754,"name":"canceled","nodeType":"VariableDeclaration","scope":1763,"src":"6159:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1753,"name":"bool","nodeType":"ElementaryTypeName","src":"6159:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"},{"constant":false,"id":1756,"name":"executed","nodeType":"VariableDeclaration","scope":1763,"src":"6254:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1755,"name":"bool","nodeType":"ElementaryTypeName","src":"6254:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"},{"constant":false,"id":1760,"name":"receipts","nodeType":"VariableDeclaration","scope":1763,"src":"6346:36:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Receipt_$1770_storage_$","typeString":"mapping(address => struct GovernorBravoDelegateStorageV1.Receipt)"},"typeName":{"id":1759,"keyType":{"id":1757,"name":"address","nodeType":"ElementaryTypeName","src":"6354:7:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6346:27:1","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_Receipt_$1770_storage_$","typeString":"mapping(address => struct GovernorBravoDelegateStorageV1.Receipt)"},"valueType":{"contractScope":null,"id":1758,"name":"Receipt","nodeType":"UserDefinedTypeName","referencedDeclaration":1770,"src":"6365:7:1","typeDescriptions":{"typeIdentifier":"t_struct$_Receipt_$1770_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV1.Receipt"}}},"value":null,"visibility":"internal"},{"constant":false,"id":1762,"name":"proposalType","nodeType":"VariableDeclaration","scope":1763,"src":"6437:18:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1761,"name":"uint8","nodeType":"ElementaryTypeName","src":"6437:5:1","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"}],"name":"Proposal","nodeType":"StructDefinition","scope":1784,"src":"4809:1653:1","visibility":"public"},{"canonicalName":"GovernorBravoDelegateStorageV1.Receipt","id":1770,"members":[{"constant":false,"id":1765,"name":"hasVoted","nodeType":"VariableDeclaration","scope":1770,"src":"6599:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1764,"name":"bool","nodeType":"ElementaryTypeName","src":"6599:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"},{"constant":false,"id":1767,"name":"support","nodeType":"VariableDeclaration","scope":1770,"src":"6701:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1766,"name":"uint8","nodeType":"ElementaryTypeName","src":"6701:5:1","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":1769,"name":"votes","nodeType":"VariableDeclaration","scope":1770,"src":"6795:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":1768,"name":"uint96","nodeType":"ElementaryTypeName","src":"6795:6:1","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"value":null,"visibility":"internal"}],"name":"Receipt","nodeType":"StructDefinition","scope":1784,"src":"6518:296:1","visibility":"public"},{"canonicalName":"GovernorBravoDelegateStorageV1.ProposalState","id":1779,"members":[{"id":1771,"name":"Pending","nodeType":"EnumValue","src":"6907:7:1"},{"id":1772,"name":"Active","nodeType":"EnumValue","src":"6924:6:1"},{"id":1773,"name":"Canceled","nodeType":"EnumValue","src":"6940:8:1"},{"id":1774,"name":"Defeated","nodeType":"EnumValue","src":"6958:8:1"},{"id":1775,"name":"Succeeded","nodeType":"EnumValue","src":"6976:9:1"},{"id":1776,"name":"Queued","nodeType":"EnumValue","src":"6995:6:1"},{"id":1777,"name":"Expired","nodeType":"EnumValue","src":"7011:7:1"},{"id":1778,"name":"Executed","nodeType":"EnumValue","src":"7028:8:1"}],"name":"ProposalState","nodeType":"EnumDefinition","src":"6878:164:1"},{"constant":false,"id":1781,"name":"proposalMaxOperations","nodeType":"VariableDeclaration","scope":1784,"src":"7129:33:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1780,"name":"uint","nodeType":"ElementaryTypeName","src":"7129:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"constant":false,"id":1783,"name":"guardian","nodeType":"VariableDeclaration","scope":1784,"src":"7232:23:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1782,"name":"address","nodeType":"ElementaryTypeName","src":"7232:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"public"}],"scope":1901,"src":"3767:3491:1"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":1785,"name":"GovernorBravoDelegateStorageV1","nodeType":"UserDefinedTypeName","referencedDeclaration":1784,"src":"7571:30:1","typeDescriptions":{"typeIdentifier":"t_contract$_GovernorBravoDelegateStorageV1_$1784","typeString":"contract GovernorBravoDelegateStorageV1"}},"id":1786,"nodeType":"InheritanceSpecifier","src":"7571:30:1"}],"contractDependencies":[1700,1784],"contractKind":"contract","documentation":"@title GovernorBravoDelegateStorageV2\n@dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\ncontract which implements GovernorBravoDelegateStorageV2 and following the naming convention\nGovernorBravoDelegateStorageVX.","fullyImplemented":true,"id":1806,"linearizedBaseContracts":[1806,1784,1700],"name":"GovernorBravoDelegateStorageV2","nodeType":"ContractDefinition","nodes":[{"canonicalName":"GovernorBravoDelegateStorageV2.ProposalType","id":1790,"members":[{"id":1787,"name":"NORMAL","nodeType":"EnumValue","src":"7636:6:1"},{"id":1788,"name":"FASTTRACK","nodeType":"EnumValue","src":"7652:9:1"},{"id":1789,"name":"CRITICAL","nodeType":"EnumValue","src":"7671:8:1"}],"name":"ProposalType","nodeType":"EnumDefinition","src":"7608:77:1"},{"canonicalName":"GovernorBravoDelegateStorageV2.ProposalConfig","id":1797,"members":[{"constant":false,"id":1792,"name":"votingDelay","nodeType":"VariableDeclaration","scope":1797,"src":"7822:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1791,"name":"uint256","nodeType":"ElementaryTypeName","src":"7822:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1794,"name":"votingPeriod","nodeType":"VariableDeclaration","scope":1797,"src":"7919:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1793,"name":"uint256","nodeType":"ElementaryTypeName","src":"7919:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1796,"name":"proposalThreshold","nodeType":"VariableDeclaration","scope":1797,"src":"8040:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1795,"name":"uint256","nodeType":"ElementaryTypeName","src":"8040:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"name":"ProposalConfig","nodeType":"StructDefinition","scope":1806,"src":"7691:381:1","visibility":"public"},{"constant":false,"id":1801,"name":"proposalConfigs","nodeType":"VariableDeclaration","scope":1806,"src":"8150:54:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ProposalConfig_$1797_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig)"},"typeName":{"id":1800,"keyType":{"id":1798,"name":"uint","nodeType":"ElementaryTypeName","src":"8158:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"8150:31:1","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_ProposalConfig_$1797_storage_$","typeString":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig)"},"valueType":{"contractScope":null,"id":1799,"name":"ProposalConfig","nodeType":"UserDefinedTypeName","referencedDeclaration":1797,"src":"8166:14:1","typeDescriptions":{"typeIdentifier":"t_struct$_ProposalConfig_$1797_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV2.ProposalConfig"}}},"value":null,"visibility":"public"},{"constant":false,"id":1805,"name":"proposalTimelocks","nodeType":"VariableDeclaration","scope":1806,"src":"8288:59:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"},"typeName":{"id":1804,"keyType":{"id":1802,"name":"uint","nodeType":"ElementaryTypeName","src":"8296:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"8288:34:1","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_contract$_TimelockInterface_$1884_$","typeString":"mapping(uint256 => contract TimelockInterface)"},"valueType":{"contractScope":null,"id":1803,"name":"TimelockInterface","nodeType":"UserDefinedTypeName","referencedDeclaration":1884,"src":"8304:17:1","typeDescriptions":{"typeIdentifier":"t_contract$_TimelockInterface_$1884","typeString":"contract TimelockInterface"}}},"value":null,"visibility":"public"}],"scope":1901,"src":"7528:822:1"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":1807,"name":"GovernorBravoDelegateStorageV2","nodeType":"UserDefinedTypeName","referencedDeclaration":1806,"src":"8663:30:1","typeDescriptions":{"typeIdentifier":"t_contract$_GovernorBravoDelegateStorageV2_$1806","typeString":"contract GovernorBravoDelegateStorageV2"}},"id":1808,"nodeType":"InheritanceSpecifier","src":"8663:30:1"}],"contractDependencies":[1700,1784,1806],"contractKind":"contract","documentation":"@title GovernorBravoDelegateStorageV3\n@dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\ncontract which implements GovernorBravoDelegateStorageV3 and following the naming convention\nGovernorBravoDelegateStorageVX.","fullyImplemented":true,"id":1820,"linearizedBaseContracts":[1820,1806,1784,1700],"name":"GovernorBravoDelegateStorageV3","nodeType":"ContractDefinition","nodes":[{"canonicalName":"GovernorBravoDelegateStorageV3.ValidationParams","id":1817,"members":[{"constant":false,"id":1810,"name":"minVotingPeriod","nodeType":"VariableDeclaration","scope":1817,"src":"8734:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1809,"name":"uint256","nodeType":"ElementaryTypeName","src":"8734:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1812,"name":"maxVotingPeriod","nodeType":"VariableDeclaration","scope":1817,"src":"8767:23:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1811,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1814,"name":"minVotingDelay","nodeType":"VariableDeclaration","scope":1817,"src":"8800:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1813,"name":"uint256","nodeType":"ElementaryTypeName","src":"8800:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1816,"name":"maxVotingDelay","nodeType":"VariableDeclaration","scope":1817,"src":"8832:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1815,"name":"uint256","nodeType":"ElementaryTypeName","src":"8832:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"name":"ValidationParams","nodeType":"StructDefinition","scope":1820,"src":"8700:161:1","visibility":"public"},{"constant":false,"id":1819,"name":"validationParams","nodeType":"VariableDeclaration","scope":1820,"src":"8962:40:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams"},"typeName":{"contractScope":null,"id":1818,"name":"ValidationParams","nodeType":"UserDefinedTypeName","referencedDeclaration":1817,"src":"8962:16:1","typeDescriptions":{"typeIdentifier":"t_struct$_ValidationParams_$1817_storage_ptr","typeString":"struct GovernorBravoDelegateStorageV3.ValidationParams"}},"value":null,"visibility":"public"}],"scope":1901,"src":"8620:385:1"},{"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":"@title TimelockInterface\n@author Venus\n@notice Interface implemented by the Timelock contract.","fullyImplemented":false,"id":1884,"linearizedBaseContracts":[1884],"name":"TimelockInterface","nodeType":"ContractDefinition","nodes":[{"body":null,"documentation":null,"id":1825,"implemented":false,"kind":"function","modifiers":[],"name":"delay","nodeType":"FunctionDefinition","parameters":{"id":1821,"nodeType":"ParameterList","parameters":[],"src":"9167:2:1"},"returnParameters":{"id":1824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1823,"name":"","nodeType":"VariableDeclaration","scope":1825,"src":"9193:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1822,"name":"uint","nodeType":"ElementaryTypeName","src":"9193:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"9192:6:1"},"scope":1884,"src":"9153:46:1","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":1830,"implemented":false,"kind":"function","modifiers":[],"name":"GRACE_PERIOD","nodeType":"FunctionDefinition","parameters":{"id":1826,"nodeType":"ParameterList","parameters":[],"src":"9226:2:1"},"returnParameters":{"id":1829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1828,"name":"","nodeType":"VariableDeclaration","scope":1830,"src":"9252:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1827,"name":"uint","nodeType":"ElementaryTypeName","src":"9252:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"9251:6:1"},"scope":1884,"src":"9205:53:1","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":1833,"implemented":false,"kind":"function","modifiers":[],"name":"acceptAdmin","nodeType":"FunctionDefinition","parameters":{"id":1831,"nodeType":"ParameterList","parameters":[],"src":"9284:2:1"},"returnParameters":{"id":1832,"nodeType":"ParameterList","parameters":[],"src":"9295:0:1"},"scope":1884,"src":"9264:32:1","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":1840,"implemented":false,"kind":"function","modifiers":[],"name":"queuedTransactions","nodeType":"FunctionDefinition","parameters":{"id":1836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1835,"name":"hash","nodeType":"VariableDeclaration","scope":1840,"src":"9330:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1834,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9330:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"}],"src":"9329:14:1"},"returnParameters":{"id":1839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1838,"name":"","nodeType":"VariableDeclaration","scope":1840,"src":"9367:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1837,"name":"bool","nodeType":"ElementaryTypeName","src":"9367:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"9366:6:1"},"scope":1884,"src":"9302:71:1","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":1855,"implemented":false,"kind":"function","modifiers":[],"name":"queueTransaction","nodeType":"FunctionDefinition","parameters":{"id":1851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1842,"name":"target","nodeType":"VariableDeclaration","scope":1855,"src":"9414:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1841,"name":"address","nodeType":"ElementaryTypeName","src":"9414:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1844,"name":"value","nodeType":"VariableDeclaration","scope":1855,"src":"9438:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1843,"name":"uint","nodeType":"ElementaryTypeName","src":"9438:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1846,"name":"signature","nodeType":"VariableDeclaration","scope":1855,"src":"9458:25:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1845,"name":"string","nodeType":"ElementaryTypeName","src":"9458:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":1848,"name":"data","nodeType":"VariableDeclaration","scope":1855,"src":"9493:19:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1847,"name":"bytes","nodeType":"ElementaryTypeName","src":"9493:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"},{"constant":false,"id":1850,"name":"eta","nodeType":"VariableDeclaration","scope":1855,"src":"9522:8:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1849,"name":"uint","nodeType":"ElementaryTypeName","src":"9522:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"9404:132:1"},"returnParameters":{"id":1854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1853,"name":"","nodeType":"VariableDeclaration","scope":1855,"src":"9555:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1852,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9555:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"}],"src":"9554:9:1"},"scope":1884,"src":"9379:185:1","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":1868,"implemented":false,"kind":"function","modifiers":[],"name":"cancelTransaction","nodeType":"FunctionDefinition","parameters":{"id":1866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1857,"name":"target","nodeType":"VariableDeclaration","scope":1868,"src":"9606:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1856,"name":"address","nodeType":"ElementaryTypeName","src":"9606:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1859,"name":"value","nodeType":"VariableDeclaration","scope":1868,"src":"9630:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1858,"name":"uint","nodeType":"ElementaryTypeName","src":"9630:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1861,"name":"signature","nodeType":"VariableDeclaration","scope":1868,"src":"9650:25:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1860,"name":"string","nodeType":"ElementaryTypeName","src":"9650:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":1863,"name":"data","nodeType":"VariableDeclaration","scope":1868,"src":"9685:19:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1862,"name":"bytes","nodeType":"ElementaryTypeName","src":"9685:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"},{"constant":false,"id":1865,"name":"eta","nodeType":"VariableDeclaration","scope":1868,"src":"9714:8:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1864,"name":"uint","nodeType":"ElementaryTypeName","src":"9714:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"9596:132:1"},"returnParameters":{"id":1867,"nodeType":"ParameterList","parameters":[],"src":"9737:0:1"},"scope":1884,"src":"9570:168:1","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":1883,"implemented":false,"kind":"function","modifiers":[],"name":"executeTransaction","nodeType":"FunctionDefinition","parameters":{"id":1879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1870,"name":"target","nodeType":"VariableDeclaration","scope":1883,"src":"9781:14:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1869,"name":"address","nodeType":"ElementaryTypeName","src":"9781:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1872,"name":"value","nodeType":"VariableDeclaration","scope":1883,"src":"9805:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1871,"name":"uint","nodeType":"ElementaryTypeName","src":"9805:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1874,"name":"signature","nodeType":"VariableDeclaration","scope":1883,"src":"9825:25:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1873,"name":"string","nodeType":"ElementaryTypeName","src":"9825:6:1","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":1876,"name":"data","nodeType":"VariableDeclaration","scope":1883,"src":"9860:19:1","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1875,"name":"bytes","nodeType":"ElementaryTypeName","src":"9860:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"},{"constant":false,"id":1878,"name":"eta","nodeType":"VariableDeclaration","scope":1883,"src":"9889:8:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1877,"name":"uint","nodeType":"ElementaryTypeName","src":"9889:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"9771:132:1"},"returnParameters":{"id":1882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1881,"name":"","nodeType":"VariableDeclaration","scope":1883,"src":"9930:12:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1880,"name":"bytes","nodeType":"ElementaryTypeName","src":"9930:5:1","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"}],"src":"9929:14:1"},"scope":1884,"src":"9744:200:1","stateMutability":"payable","superFunction":null,"visibility":"external"}],"scope":1901,"src":"9119:827:1"},{"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":null,"fullyImplemented":false,"id":1894,"linearizedBaseContracts":[1894],"name":"XvsVaultInterface","nodeType":"ContractDefinition","nodes":[{"body":null,"documentation":null,"id":1893,"implemented":false,"kind":"function","modifiers":[],"name":"getPriorVotes","nodeType":"FunctionDefinition","parameters":{"id":1889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1886,"name":"account","nodeType":"VariableDeclaration","scope":1893,"src":"10005:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1885,"name":"address","nodeType":"ElementaryTypeName","src":"10005:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1888,"name":"blockNumber","nodeType":"VariableDeclaration","scope":1893,"src":"10022:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1887,"name":"uint","nodeType":"ElementaryTypeName","src":"10022:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"10004:35:1"},"returnParameters":{"id":1892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1891,"name":"","nodeType":"VariableDeclaration","scope":1893,"src":"10063:6:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":1890,"name":"uint96","nodeType":"ElementaryTypeName","src":"10063:6:1","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"value":null,"visibility":"internal"}],"src":"10062:8:1"},"scope":1894,"src":"9982:89:1","stateMutability":"view","superFunction":null,"visibility":"external"}],"scope":1901,"src":"9948:125:1"},{"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":null,"fullyImplemented":false,"id":1900,"linearizedBaseContracts":[1900],"name":"GovernorAlphaInterface","nodeType":"ContractDefinition","nodes":[{"body":null,"documentation":"@notice The total number of proposals","id":1899,"implemented":false,"kind":"function","modifiers":[],"name":"proposalCount","nodeType":"FunctionDefinition","parameters":{"id":1895,"nodeType":"ParameterList","parameters":[],"src":"10182:2:1"},"returnParameters":{"id":1898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1897,"name":"","nodeType":"VariableDeclaration","scope":1899,"src":"10203:4:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1896,"name":"uint","nodeType":"ElementaryTypeName","src":"10203:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"10202:6:1"},"scope":1900,"src":"10160:49:1","stateMutability":"nonpayable","superFunction":null,"visibility":"external"}],"scope":1901,"src":"10075:136:1"}],"src":"0:10212:1"},"id":1},"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol","exportedSymbols":{"VTreasury":[2023]},"id":2024,"nodeType":"SourceUnit","nodes":[{"id":1902,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:2"},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol","file":"../Utils/IBEP20.sol","id":1903,"nodeType":"ImportDirective","scope":2024,"sourceUnit":2225,"src":"26:29:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/SafeBEP20.sol","file":"../Utils/SafeBEP20.sol","id":1904,"nodeType":"ImportDirective","scope":2024,"sourceUnit":2554,"src":"56:32:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol","file":"../Utils/Ownable.sol","id":1905,"nodeType":"ImportDirective","scope":2024,"sourceUnit":2334,"src":"89:30:2","symbolAliases":[],"unitAlias":""},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":1906,"name":"Ownable","nodeType":"UserDefinedTypeName","referencedDeclaration":2333,"src":"250:7:2","typeDescriptions":{"typeIdentifier":"t_contract$_Ownable_$2333","typeString":"contract Ownable"}},"id":1907,"nodeType":"InheritanceSpecifier","src":"250:7:2"}],"contractDependencies":[2155,2333],"contractKind":"contract","documentation":"@title VTreasury\n@author Venus\n@notice Protocol treasury that holds tokens owned by Venus","fullyImplemented":true,"id":2023,"linearizedBaseContracts":[2023,2333,2155],"name":"VTreasury","nodeType":"ContractDefinition","nodes":[{"id":1910,"libraryName":{"contractScope":null,"id":1908,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":2758,"src":"270:8:2","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$2758","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"264:27:2","typeName":{"id":1909,"name":"uint256","nodeType":"ElementaryTypeName","src":"283:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":1913,"libraryName":{"contractScope":null,"id":1911,"name":"SafeBEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2553,"src":"302:9:2","typeDescriptions":{"typeIdentifier":"t_contract$_SafeBEP20_$2553","typeString":"library SafeBEP20"}},"nodeType":"UsingForDirective","src":"296:27:2","typeName":{"contractScope":null,"id":1912,"name":"IBEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2224,"src":"316:6:2","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}}},{"anonymous":false,"documentation":null,"id":1921,"name":"WithdrawTreasuryBEP20","nodeType":"EventDefinition","parameters":{"id":1920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1915,"indexed":false,"name":"tokenAddress","nodeType":"VariableDeclaration","scope":1921,"src":"392:20:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1914,"name":"address","nodeType":"ElementaryTypeName","src":"392:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1917,"indexed":false,"name":"withdrawAmount","nodeType":"VariableDeclaration","scope":1921,"src":"414:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1916,"name":"uint256","nodeType":"ElementaryTypeName","src":"414:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1919,"indexed":false,"name":"withdrawAddress","nodeType":"VariableDeclaration","scope":1921,"src":"438:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1918,"name":"address","nodeType":"ElementaryTypeName","src":"438:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"391:71:2"},"src":"364:99:2"},{"anonymous":false,"documentation":null,"id":1927,"name":"WithdrawTreasuryBNB","nodeType":"EventDefinition","parameters":{"id":1926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1923,"indexed":false,"name":"withdrawAmount","nodeType":"VariableDeclaration","scope":1927,"src":"528:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1922,"name":"uint256","nodeType":"ElementaryTypeName","src":"528:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1925,"indexed":false,"name":"withdrawAddress","nodeType":"VariableDeclaration","scope":1927,"src":"552:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1924,"name":"address","nodeType":"ElementaryTypeName","src":"552:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"527:49:2"},"src":"502:75:2"},{"body":{"id":1930,"nodeType":"Block","src":"657:2:2","statements":[]},"documentation":"@notice To receive BNB","id":1931,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":1928,"nodeType":"ParameterList","parameters":[],"src":"637:2:2"},"returnParameters":{"id":1929,"nodeType":"ParameterList","parameters":[],"src":"657:0:2"},"scope":2023,"src":"629:30:2","stateMutability":"payable","superFunction":null,"visibility":"external"},{"body":{"id":1980,"nodeType":"Block","src":"1064:592:2","statements":[{"assignments":[1943],"declarations":[{"constant":false,"id":1943,"name":"actualWithdrawAmount","nodeType":"VariableDeclaration","scope":1980,"src":"1074:28:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1942,"name":"uint256","nodeType":"ElementaryTypeName","src":"1074:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":1945,"initialValue":{"argumentTypes":null,"id":1944,"name":"withdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"1105:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1074:45:2"},{"assignments":[1947],"declarations":[{"constant":false,"id":1947,"name":"treasuryBalance","nodeType":"VariableDeclaration","scope":1980,"src":"1167:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1946,"name":"uint256","nodeType":"ElementaryTypeName","src":"1167:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":1956,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1953,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4074,"src":"1232:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_VTreasury_$2023","typeString":"contract VTreasury"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VTreasury_$2023","typeString":"contract VTreasury"}],"id":1952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1224:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":1954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1224:13:2","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1949,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1933,"src":"1200:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1948,"name":"IBEP20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2224,"src":"1193:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBEP20_$2224_$","typeString":"type(contract IBEP20)"}},"id":1950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1193:20:2","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":1951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":2169,"src":"1193:30:2","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":1955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1193:45:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1167:71:2"},{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":1957,"name":"withdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1935,"src":"1286:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"id":1958,"name":"treasuryBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"1303:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1286:32:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":1965,"nodeType":"IfStatement","src":"1282:144:2","trueBody":{"id":1964,"nodeType":"Block","src":"1320:106:2","statements":[{"expression":{"argumentTypes":null,"id":1962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":1960,"name":"actualWithdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1943,"src":"1377:20:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":1961,"name":"treasuryBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1947,"src":"1400:15:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1377:38:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1963,"nodeType":"ExpressionStatement","src":"1377:38:2"}]}},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1970,"name":"withdrawAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1937,"src":"1521:15:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":1971,"name":"actualWithdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1943,"src":"1538:20:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1967,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1933,"src":"1494:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1966,"name":"IBEP20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2224,"src":"1487:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBEP20_$2224_$","typeString":"type(contract IBEP20)"}},"id":1968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1487:20:2","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":1969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":2366,"src":"1487:33:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBEP20_$2224_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IBEP20_$2224_$","typeString":"function (contract IBEP20,address,uint256)"}},"id":1972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1487:72:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1973,"nodeType":"ExpressionStatement","src":"1487:72:2"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1975,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1933,"src":"1597:12:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":1976,"name":"actualWithdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1943,"src":"1611:20:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":1977,"name":"withdrawAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1937,"src":"1633:15:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1974,"name":"WithdrawTreasuryBEP20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1921,"src":"1575:21:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address)"}},"id":1978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1575:74:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1979,"nodeType":"EmitStatement","src":"1570:79:2"}]},"documentation":"@notice Withdraw Treasury BEP20 Tokens, Only owner call it\n@param tokenAddress The address of treasury token\n@param withdrawAmount The withdraw amount to owner\n@param withdrawAddress The withdraw address","id":1981,"implemented":true,"kind":"function","modifiers":[{"arguments":null,"id":1940,"modifierName":{"argumentTypes":null,"id":1939,"name":"onlyOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"1054:9:2","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"1054:9:2"}],"name":"withdrawTreasuryBEP20","nodeType":"FunctionDefinition","parameters":{"id":1938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1933,"name":"tokenAddress","nodeType":"VariableDeclaration","scope":1981,"src":"953:20:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1932,"name":"address","nodeType":"ElementaryTypeName","src":"953:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":1935,"name":"withdrawAmount","nodeType":"VariableDeclaration","scope":1981,"src":"983:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1934,"name":"uint256","nodeType":"ElementaryTypeName","src":"983:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1937,"name":"withdrawAddress","nodeType":"VariableDeclaration","scope":1981,"src":"1015:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1936,"name":"address","nodeType":"ElementaryTypeName","src":"1015:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"943:101:2"},"returnParameters":{"id":1941,"nodeType":"ParameterList","parameters":[],"src":"1064:0:2"},"scope":2023,"src":"913:743:2","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":{"id":2021,"nodeType":"Block","src":"1957:500:2","statements":[{"assignments":[1991],"declarations":[{"constant":false,"id":1991,"name":"actualWithdrawAmount","nodeType":"VariableDeclaration","scope":2021,"src":"1967:28:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1990,"name":"uint256","nodeType":"ElementaryTypeName","src":"1967:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":1993,"initialValue":{"argumentTypes":null,"id":1992,"name":"withdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1983,"src":"1998:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1967:45:2"},{"assignments":[1995],"declarations":[{"constant":false,"id":1995,"name":"bnbBalance","nodeType":"VariableDeclaration","scope":2021,"src":"2058:18:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1994,"name":"uint256","nodeType":"ElementaryTypeName","src":"2058:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":2000,"initialValue":{"argumentTypes":null,"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":1997,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4074,"src":"2087:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_VTreasury_$2023","typeString":"contract VTreasury"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VTreasury_$2023","typeString":"contract VTreasury"}],"id":1996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2079:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":1998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2079:13:2","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":1999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2079:21:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2058:42:2"},{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2001,"name":"withdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1983,"src":"2148:14:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"id":2002,"name":"bnbBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1995,"src":"2165:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2148:27:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":2009,"nodeType":"IfStatement","src":"2144:134:2","trueBody":{"id":2008,"nodeType":"Block","src":"2177:101:2","statements":[{"expression":{"argumentTypes":null,"id":2006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":2004,"name":"actualWithdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1991,"src":"2234:20:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":2005,"name":"bnbBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1995,"src":"2257:10:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2234:33:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2007,"nodeType":"ExpressionStatement","src":"2234:33:2"}]}},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2013,"name":"actualWithdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1991,"src":"2355:20:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":2010,"name":"withdrawAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1985,"src":"2330:15:2","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2330:24:2","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":2014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2330:46:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2015,"nodeType":"ExpressionStatement","src":"2330:46:2"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2017,"name":"actualWithdrawAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1991,"src":"2412:20:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":2018,"name":"withdrawAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1985,"src":"2434:15:2","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":2016,"name":"WithdrawTreasuryBNB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1927,"src":"2392:19:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address)"}},"id":2019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2392:58:2","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2020,"nodeType":"EmitStatement","src":"2387:63:2"}]},"documentation":"@notice Withdraw Treasury BNB, Only owner call it\n@param withdrawAmount The withdraw amount to owner\n@param withdrawAddress The withdraw address","id":2022,"implemented":true,"kind":"function","modifiers":[{"arguments":null,"id":1988,"modifierName":{"argumentTypes":null,"id":1987,"name":"onlyOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"1947:9:2","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"1947:9:2"}],"name":"withdrawTreasuryBNB","nodeType":"FunctionDefinition","parameters":{"id":1986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1983,"name":"withdrawAmount","nodeType":"VariableDeclaration","scope":2022,"src":"1873:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1982,"name":"uint256","nodeType":"ElementaryTypeName","src":"1873:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":1985,"name":"withdrawAddress","nodeType":"VariableDeclaration","scope":2022,"src":"1897:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1984,"name":"address","nodeType":"ElementaryTypeName","src":"1897:15:2","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"value":null,"visibility":"internal"}],"src":"1872:57:2"},"returnParameters":{"id":1989,"nodeType":"ParameterList","parameters":[],"src":"1957:0:2"},"scope":2023,"src":"1844:613:2","stateMutability":"payable","superFunction":null,"visibility":"external"}],"scope":2024,"src":"228:2231:2"}],"src":"0:2460:2"},"id":2},"@venusprotocol/venus-protocol/contracts/InterestRateModels/InterestRateModel.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/InterestRateModels/InterestRateModel.sol","exportedSymbols":{"InterestRateModel":[2053]},"id":2054,"nodeType":"SourceUnit","nodes":[{"id":2025,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"41:24:3"},{"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":"@title Venus's InterestRateModel Interface\n@author Venus","fullyImplemented":false,"id":2053,"linearizedBaseContracts":[2053],"name":"InterestRateModel","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":2028,"name":"isInterestRateModel","nodeType":"VariableDeclaration","scope":2053,"src":"257:47:3","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2026,"name":"bool","nodeType":"ElementaryTypeName","src":"257:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":{"argumentTypes":null,"hexValue":"74727565","id":2027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"300:4:3","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"visibility":"public"},{"body":null,"documentation":"@notice Calculates the current borrow interest rate per block\n@param cash The total amount of cash the market has\n@param borrows The total amount of borrows the market has outstanding\n@param reserves The total amnount of reserves the market has\n@return The borrow rate per block (as a percentage, and scaled by 1e18)","id":2039,"implemented":false,"kind":"function","modifiers":[],"name":"getBorrowRate","nodeType":"FunctionDefinition","parameters":{"id":2035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2030,"name":"cash","nodeType":"VariableDeclaration","scope":2039,"src":"702:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2029,"name":"uint","nodeType":"ElementaryTypeName","src":"702:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2032,"name":"borrows","nodeType":"VariableDeclaration","scope":2039,"src":"713:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2031,"name":"uint","nodeType":"ElementaryTypeName","src":"713:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2034,"name":"reserves","nodeType":"VariableDeclaration","scope":2039,"src":"727:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2033,"name":"uint","nodeType":"ElementaryTypeName","src":"727:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"701:40:3"},"returnParameters":{"id":2038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2037,"name":"","nodeType":"VariableDeclaration","scope":2039,"src":"765:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2036,"name":"uint","nodeType":"ElementaryTypeName","src":"765:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"764:6:3"},"scope":2053,"src":"679:92:3","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":"@notice Calculates the current supply interest rate per block\n@param cash The total amount of cash the market has\n@param borrows The total amount of borrows the market has outstanding\n@param reserves The total amnount of reserves the market has\n@param reserveFactorMantissa The current reserve factor the market has\n@return The supply rate per block (as a percentage, and scaled by 1e18)","id":2052,"implemented":false,"kind":"function","modifiers":[],"name":"getSupplyRate","nodeType":"FunctionDefinition","parameters":{"id":2048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2041,"name":"cash","nodeType":"VariableDeclaration","scope":2052,"src":"1255:9:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2040,"name":"uint","nodeType":"ElementaryTypeName","src":"1255:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2043,"name":"borrows","nodeType":"VariableDeclaration","scope":2052,"src":"1274:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2042,"name":"uint","nodeType":"ElementaryTypeName","src":"1274:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2045,"name":"reserves","nodeType":"VariableDeclaration","scope":2052,"src":"1296:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2044,"name":"uint","nodeType":"ElementaryTypeName","src":"1296:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2047,"name":"reserveFactorMantissa","nodeType":"VariableDeclaration","scope":2052,"src":"1319:26:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2046,"name":"uint","nodeType":"ElementaryTypeName","src":"1319:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1245:106:3"},"returnParameters":{"id":2051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2050,"name":"","nodeType":"VariableDeclaration","scope":2052,"src":"1375:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2049,"name":"uint","nodeType":"ElementaryTypeName","src":"1375:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1374:6:3"},"scope":2053,"src":"1223:158:3","stateMutability":"view","superFunction":null,"visibility":"external"}],"scope":2054,"src":"138:1245:3"}],"src":"41:1343:3"},"id":3},"@venusprotocol/venus-protocol/contracts/Utils/Address.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/Address.sol","exportedSymbols":{"Address":[2128]},"id":2129,"nodeType":"SourceUnit","nodes":[{"id":2055,"literals":["solidity","^","0.5",".5"],"nodeType":"PragmaDirective","src":"0:23:4"},{"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":"@dev Collection of functions related to the address type","fullyImplemented":true,"id":2128,"linearizedBaseContracts":[2128],"name":"Address","nodeType":"ContractDefinition","nodes":[{"body":{"id":2079,"nodeType":"Block","src":"751:564:4","statements":[{"assignments":[2063],"declarations":[{"constant":false,"id":2063,"name":"codehash","nodeType":"VariableDeclaration","scope":2079,"src":"1003:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2062,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1003:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"}],"id":2064,"initialValue":null,"nodeType":"VariableDeclarationStatement","src":"1003:16:4"},{"assignments":[2066],"declarations":[{"constant":false,"id":2066,"name":"accountHash","nodeType":"VariableDeclaration","scope":2079,"src":"1029:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2065,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1029:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":null,"visibility":"internal"}],"id":2068,"initialValue":{"argumentTypes":null,"hexValue":"307863356432343630313836663732333363393237653764623264636337303363306535303062363533636138323237336237626661643830343564383561343730","id":2067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1051:66:4","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_89477152217924674838424037953991966239322087453347756267410168184682657981552_by_1","typeString":"int_const 8947...(69 digits omitted)...1552"},"value":"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"},"nodeType":"VariableDeclarationStatement","src":"1029:88:4"},{"externalReferences":[{"codehash":{"declaration":2063,"isOffset":false,"isSlot":false,"src":"1206:8:4","valueSize":1}},{"account":{"declaration":2057,"isOffset":false,"isSlot":false,"src":"1230:7:4","valueSize":1}}],"id":2069,"nodeType":"InlineAssembly","operations":"{\n    codehash := extcodehash(account)\n}","src":"1183:65:4"},{"expression":{"argumentTypes":null,"components":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2070,"name":"codehash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2063,"src":"1265:8:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"id":2071,"name":"accountHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2066,"src":"1277:11:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1265:23:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2073,"name":"codehash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2063,"src":"1292:8:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"hexValue":"307830","id":2074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1304:3:4","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x0"},"src":"1292:15:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1265:42:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2077,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1264:44:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2061,"id":2078,"nodeType":"Return","src":"1257:51:4"}]},"documentation":"@dev Returns true if `account` is a contract.\n     * [IMPORTANT]\n====\nIt is unsafe to assume that an address for which this function returns\nfalse is an externally-owned account (EOA) and not a contract.\n     * Among others, `isContract` will return false for the following\ntypes of addresses:\n     *  - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n====","id":2080,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nodeType":"FunctionDefinition","parameters":{"id":2058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2057,"name":"account","nodeType":"VariableDeclaration","scope":2080,"src":"705:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2056,"name":"address","nodeType":"ElementaryTypeName","src":"705:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"704:17:4"},"returnParameters":{"id":2061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2060,"name":"","nodeType":"VariableDeclaration","scope":2080,"src":"745:4:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2059,"name":"bool","nodeType":"ElementaryTypeName","src":"745:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"744:6:4"},"scope":2128,"src":"685:630:4","stateMutability":"view","superFunction":null,"visibility":"internal"},{"body":{"id":2093,"nodeType":"Block","src":"1600:49:4","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2089,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"1633:7:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1625:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":"uint160"},"id":2090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1625:16:4","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":2087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1617:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1617:25:4","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":2086,"id":2092,"nodeType":"Return","src":"1610:32:4"}]},"documentation":"@dev Converts an `address` into `address payable`. Note that this is\nsimply a type cast: the actual underlying value is not changed.\n     * _Available since v2.4.0._","id":2094,"implemented":true,"kind":"function","modifiers":[],"name":"toPayable","nodeType":"FunctionDefinition","parameters":{"id":2083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2082,"name":"account","nodeType":"VariableDeclaration","scope":2094,"src":"1543:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2081,"name":"address","nodeType":"ElementaryTypeName","src":"1543:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"1542:17:4"},"returnParameters":{"id":2086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2085,"name":"","nodeType":"VariableDeclaration","scope":2094,"src":"1583:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2084,"name":"address","nodeType":"ElementaryTypeName","src":"1583:15:4","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"value":null,"visibility":"internal"}],"src":"1582:17:4"},"scope":2128,"src":"1524:125:4","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2126,"nodeType":"Block","src":"2677:353:4","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2103,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4066,"src":"2703:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$2128","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$2128","typeString":"library Address"}],"id":2102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2695:7:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2695:13:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2695:21:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":2106,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2098,"src":"2720:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2695:31:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":2108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2728:31:4","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":2101,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"2687:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2687:73:4","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2110,"nodeType":"ExpressionStatement","src":"2687:73:4"},{"assignments":[2112,null],"declarations":[{"constant":false,"id":2112,"name":"success","nodeType":"VariableDeclaration","scope":2126,"src":"2885:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2111,"name":"bool","nodeType":"ElementaryTypeName","src":"2885:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"},null],"id":2120,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"","id":2118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2932:2:4","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"arguments":[{"argumentTypes":null,"id":2116,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2098,"src":"2924:6:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2113,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2096,"src":"2903:9:4","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2903:14:4","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2903:20:4","typeDescriptions":{"typeIdentifier":"t_function_setvalue_pure$_t_uint256_$returns$_t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value_$","typeString":"function (uint256) pure returns (function (bytes memory) payable returns (bool,bytes memory))"}},"id":2117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2903:28:4","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2903:32:4","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2884:51:4"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2122,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2112,"src":"2953:7:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":2123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2962:60:4","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":2121,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"2945:7:4","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2945:78:4","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2125,"nodeType":"ExpressionStatement","src":"2945:78:4"}]},"documentation":"@dev Replacement for Solidity's `transfer`: sends `amount` wei to\n`recipient`, forwarding all available gas and reverting on errors.\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\nof certain opcodes, possibly making contracts go over the 2300 gas limit\nimposed by `transfer`, making them unable to receive funds via\n`transfer`. {sendValue} removes this limitation.\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     * IMPORTANT: because control is transferred to `recipient`, care must be\ntaken to not create reentrancy vulnerabilities. Consider using\n{ReentrancyGuard} or the\nhttps://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     * _Available since v2.4.0._","id":2127,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nodeType":"FunctionDefinition","parameters":{"id":2099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2096,"name":"recipient","nodeType":"VariableDeclaration","scope":2127,"src":"2625:25:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2095,"name":"address","nodeType":"ElementaryTypeName","src":"2625:15:4","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"value":null,"visibility":"internal"},{"constant":false,"id":2098,"name":"amount","nodeType":"VariableDeclaration","scope":2127,"src":"2652:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"2652:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2624:43:4"},"returnParameters":{"id":2100,"nodeType":"ParameterList","parameters":[],"src":"2677:0:4"},"scope":2128,"src":"2606:424:4","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"}],"scope":2129,"src":"93:2939:4"}],"src":"0:3033:4"},"id":4},"@venusprotocol/venus-protocol/contracts/Utils/Context.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/Context.sol","exportedSymbols":{"Context":[2155]},"id":2156,"nodeType":"SourceUnit","nodes":[{"id":2130,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:5"},{"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":null,"fullyImplemented":true,"id":2155,"linearizedBaseContracts":[2155],"name":"Context","nodeType":"ContractDefinition","nodes":[{"body":{"id":2133,"nodeType":"Block","src":"726:2:5","statements":[]},"documentation":null,"id":2134,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2131,"nodeType":"ParameterList","parameters":[],"src":"714:2:5"},"returnParameters":{"id":2132,"nodeType":"ParameterList","parameters":[],"src":"726:0:5"},"scope":2155,"src":"703:25:5","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":2142,"nodeType":"Block","src":"796:34:5","statements":[{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2139,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"813:3:5","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"813:10:5","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":2138,"id":2141,"nodeType":"Return","src":"806:17:5"}]},"documentation":null,"id":2143,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nodeType":"FunctionDefinition","parameters":{"id":2135,"nodeType":"ParameterList","parameters":[],"src":"753:2:5"},"returnParameters":{"id":2138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2137,"name":"","nodeType":"VariableDeclaration","scope":2143,"src":"779:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2136,"name":"address","nodeType":"ElementaryTypeName","src":"779:15:5","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"value":null,"visibility":"internal"}],"src":"778:17:5"},"scope":2155,"src":"734:96:5","stateMutability":"view","superFunction":null,"visibility":"internal"},{"body":{"id":2153,"nodeType":"Block","src":"893:165:5","statements":[{"expression":{"argumentTypes":null,"id":2148,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4070,"src":"903:4:5","typeDescriptions":{"typeIdentifier":"t_contract$_Context_$2155","typeString":"contract Context"}},"id":2149,"nodeType":"ExpressionStatement","src":"903:4:5"},{"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2150,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"1043:3:5","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1043:8:5","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":2147,"id":2152,"nodeType":"Return","src":"1036:15:5"}]},"documentation":null,"id":2154,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nodeType":"FunctionDefinition","parameters":{"id":2144,"nodeType":"ParameterList","parameters":[],"src":"853:2:5"},"returnParameters":{"id":2147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2146,"name":"","nodeType":"VariableDeclaration","scope":2154,"src":"879:12:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2145,"name":"bytes","nodeType":"ElementaryTypeName","src":"879:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"}],"src":"878:14:5"},"scope":2155,"src":"836:222:5","stateMutability":"view","superFunction":null,"visibility":"internal"}],"scope":2156,"src":"526:534:5"}],"src":"0:1061:5"},"id":5},"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol","exportedSymbols":{"IBEP20":[2224]},"id":2225,"nodeType":"SourceUnit","nodes":[{"id":2157,"literals":["solidity","^","0.5",".0"],"nodeType":"PragmaDirective","src":"0:23:6"},{"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":"@dev Interface of the BEP20 standard as defined in the EIP. Does not include\nthe optional functions; to access them see {BEP20Detailed}.","fullyImplemented":false,"id":2224,"linearizedBaseContracts":[2224],"name":"IBEP20","nodeType":"ContractDefinition","nodes":[{"body":null,"documentation":"@dev Returns the amount of tokens in existence.","id":2162,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nodeType":"FunctionDefinition","parameters":{"id":2158,"nodeType":"ParameterList","parameters":[],"src":"290:2:6"},"returnParameters":{"id":2161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2160,"name":"","nodeType":"VariableDeclaration","scope":2162,"src":"316:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2159,"name":"uint256","nodeType":"ElementaryTypeName","src":"316:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"315:9:6"},"scope":2224,"src":"270:55:6","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":"@dev Returns the amount of tokens owned by `account`.","id":2169,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nodeType":"FunctionDefinition","parameters":{"id":2165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2164,"name":"account","nodeType":"VariableDeclaration","scope":2169,"src":"427:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2163,"name":"address","nodeType":"ElementaryTypeName","src":"427:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"426:17:6"},"returnParameters":{"id":2168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2167,"name":"","nodeType":"VariableDeclaration","scope":2169,"src":"467:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2166,"name":"uint256","nodeType":"ElementaryTypeName","src":"467:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"466:9:6"},"scope":2224,"src":"408:68:6","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":"@dev Moves `amount` tokens from the caller's account to `recipient`.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * Emits a {Transfer} event.","id":2178,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":2174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2171,"name":"recipient","nodeType":"VariableDeclaration","scope":2178,"src":"714:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2170,"name":"address","nodeType":"ElementaryTypeName","src":"714:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2173,"name":"amount","nodeType":"VariableDeclaration","scope":2178,"src":"733:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2172,"name":"uint256","nodeType":"ElementaryTypeName","src":"733:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"713:35:6"},"returnParameters":{"id":2177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2176,"name":"","nodeType":"VariableDeclaration","scope":2178,"src":"767:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2175,"name":"bool","nodeType":"ElementaryTypeName","src":"767:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"766:6:6"},"scope":2224,"src":"696:77:6","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":null,"documentation":"@dev Returns the remaining number of tokens that `spender` will be\nallowed to spend on behalf of `owner` through {transferFrom}. This is\nzero by default.\n     * This value changes when {approve} or {transferFrom} are called.","id":2187,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nodeType":"FunctionDefinition","parameters":{"id":2183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2180,"name":"owner","nodeType":"VariableDeclaration","scope":2187,"src":"1067:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2179,"name":"address","nodeType":"ElementaryTypeName","src":"1067:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2182,"name":"spender","nodeType":"VariableDeclaration","scope":2187,"src":"1082:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2181,"name":"address","nodeType":"ElementaryTypeName","src":"1082:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"1066:32:6"},"returnParameters":{"id":2186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2185,"name":"","nodeType":"VariableDeclaration","scope":2187,"src":"1122:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2184,"name":"uint256","nodeType":"ElementaryTypeName","src":"1122:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1121:9:6"},"scope":2224,"src":"1048:83:6","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":"@dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\nthat someone may use both the old and the new allowance by unfortunate\ntransaction ordering. One possible solution to mitigate this race\ncondition is to first reduce the spender's allowance to 0 and set the\ndesired value afterwards:\nhttps://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     * Emits an {Approval} event.","id":2196,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nodeType":"FunctionDefinition","parameters":{"id":2192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2189,"name":"spender","nodeType":"VariableDeclaration","scope":2196,"src":"1801:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2188,"name":"address","nodeType":"ElementaryTypeName","src":"1801:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2191,"name":"amount","nodeType":"VariableDeclaration","scope":2196,"src":"1818:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2190,"name":"uint256","nodeType":"ElementaryTypeName","src":"1818:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1800:33:6"},"returnParameters":{"id":2195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2194,"name":"","nodeType":"VariableDeclaration","scope":2196,"src":"1852:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2193,"name":"bool","nodeType":"ElementaryTypeName","src":"1852:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"1851:6:6"},"scope":2224,"src":"1784:74:6","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":null,"documentation":"@dev Moves `amount` tokens from `sender` to `recipient` using the\nallowance mechanism. `amount` is then deducted from the caller's\nallowance.\n     * Returns a boolean value indicating whether the operation succeeded.\n     * Emits a {Transfer} event.","id":2207,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":2203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2198,"name":"sender","nodeType":"VariableDeclaration","scope":2207,"src":"2187:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2197,"name":"address","nodeType":"ElementaryTypeName","src":"2187:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2200,"name":"recipient","nodeType":"VariableDeclaration","scope":2207,"src":"2203:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2199,"name":"address","nodeType":"ElementaryTypeName","src":"2203:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2202,"name":"amount","nodeType":"VariableDeclaration","scope":2207,"src":"2222:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2201,"name":"uint256","nodeType":"ElementaryTypeName","src":"2222:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2186:51:6"},"returnParameters":{"id":2206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2205,"name":"","nodeType":"VariableDeclaration","scope":2207,"src":"2256:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2204,"name":"bool","nodeType":"ElementaryTypeName","src":"2256:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"2255:6:6"},"scope":2224,"src":"2165:97:6","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"anonymous":false,"documentation":"@dev Emitted when `value` tokens are moved from one account (`from`) to\nanother (`to`).\n     * Note that `value` may be zero.","id":2215,"name":"Transfer","nodeType":"EventDefinition","parameters":{"id":2214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2209,"indexed":true,"name":"from","nodeType":"VariableDeclaration","scope":2215,"src":"2446:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2208,"name":"address","nodeType":"ElementaryTypeName","src":"2446:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2211,"indexed":true,"name":"to","nodeType":"VariableDeclaration","scope":2215,"src":"2468:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2210,"name":"address","nodeType":"ElementaryTypeName","src":"2468:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2213,"indexed":false,"name":"value","nodeType":"VariableDeclaration","scope":2215,"src":"2488:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2212,"name":"uint256","nodeType":"ElementaryTypeName","src":"2488:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2445:57:6"},"src":"2431:72:6"},{"anonymous":false,"documentation":"@dev Emitted when the allowance of a `spender` for an `owner` is set by\na call to {approve}. `value` is the new allowance.","id":2223,"name":"Approval","nodeType":"EventDefinition","parameters":{"id":2222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2217,"indexed":true,"name":"owner","nodeType":"VariableDeclaration","scope":2223,"src":"2677:21:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2216,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2219,"indexed":true,"name":"spender","nodeType":"VariableDeclaration","scope":2223,"src":"2700:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2218,"name":"address","nodeType":"ElementaryTypeName","src":"2700:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2221,"indexed":false,"name":"value","nodeType":"VariableDeclaration","scope":2223,"src":"2725:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2220,"name":"uint256","nodeType":"ElementaryTypeName","src":"2725:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2676:63:6"},"src":"2662:78:6"}],"scope":2225,"src":"176:2566:6"}],"src":"0:2743:6"},"id":6},"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol","exportedSymbols":{"Ownable":[2333]},"id":2334,"nodeType":"SourceUnit","nodes":[{"id":2226,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:7"},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/Context.sol","file":"./Context.sol","id":2227,"nodeType":"ImportDirective","scope":2334,"sourceUnit":2156,"src":"26:23:7","symbolAliases":[],"unitAlias":""},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":2228,"name":"Context","nodeType":"UserDefinedTypeName","referencedDeclaration":2155,"src":"566:7:7","typeDescriptions":{"typeIdentifier":"t_contract$_Context_$2155","typeString":"contract Context"}},"id":2229,"nodeType":"InheritanceSpecifier","src":"566:7:7"}],"contractDependencies":[2155],"contractKind":"contract","documentation":"@dev Contract module which provides a basic access control mechanism, where\nthere is an account (an owner) that can be granted exclusive access to\nspecific functions.\n * By default, the owner account will be the one that deploys the contract. This\ncan later be changed with {transferOwnership}.\n * This module is used through inheritance. It will make available the modifier\n`onlyOwner`, which can be applied to your functions to restrict their use to\nthe owner.","fullyImplemented":true,"id":2333,"linearizedBaseContracts":[2333,2155],"name":"Ownable","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2231,"name":"_owner","nodeType":"VariableDeclaration","scope":2333,"src":"580:22:7","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2230,"name":"address","nodeType":"ElementaryTypeName","src":"580:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"private"},{"anonymous":false,"documentation":null,"id":2237,"name":"OwnershipTransferred","nodeType":"EventDefinition","parameters":{"id":2236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2233,"indexed":true,"name":"previousOwner","nodeType":"VariableDeclaration","scope":2237,"src":"636:29:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2232,"name":"address","nodeType":"ElementaryTypeName","src":"636:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2235,"indexed":true,"name":"newOwner","nodeType":"VariableDeclaration","scope":2237,"src":"667:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2234,"name":"address","nodeType":"ElementaryTypeName","src":"667:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"635:57:7"},"src":"609:84:7"},{"body":{"id":2256,"nodeType":"Block","src":"818:135:7","statements":[{"assignments":[2241],"declarations":[{"constant":false,"id":2241,"name":"msgSender","nodeType":"VariableDeclaration","scope":2256,"src":"828:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2240,"name":"address","nodeType":"ElementaryTypeName","src":"828:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"id":2244,"initialValue":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"id":2242,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2143,"src":"848:10:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":2243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"848:12:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"828:32:7"},{"expression":{"argumentTypes":null,"id":2247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":2245,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2231,"src":"870:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":2246,"name":"msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2241,"src":"879:9:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"870:18:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2248,"nodeType":"ExpressionStatement","src":"870:18:7"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"932:1:7","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2250,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"924:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"924:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":2253,"name":"msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2241,"src":"936:9:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2249,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2237,"src":"903:20:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"903:43:7","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2255,"nodeType":"EmitStatement","src":"898:48:7"}]},"documentation":"@dev Initializes the contract setting the deployer as the initial owner.","id":2257,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2238,"nodeType":"ParameterList","parameters":[],"src":"806:2:7"},"returnParameters":{"id":2239,"nodeType":"ParameterList","parameters":[],"src":"818:0:7"},"scope":2333,"src":"795:158:7","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":2264,"nodeType":"Block","src":"1076:30:7","statements":[{"expression":{"argumentTypes":null,"id":2262,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2231,"src":"1093:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2261,"id":2263,"nodeType":"Return","src":"1086:13:7"}]},"documentation":"@dev Returns the address of the current owner.","id":2265,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nodeType":"FunctionDefinition","parameters":{"id":2258,"nodeType":"ParameterList","parameters":[],"src":"1043:2:7"},"returnParameters":{"id":2261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2260,"name":"","nodeType":"VariableDeclaration","scope":2265,"src":"1067:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2259,"name":"address","nodeType":"ElementaryTypeName","src":"1067:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"1066:9:7"},"scope":2333,"src":"1029:77:7","stateMutability":"view","superFunction":null,"visibility":"public"},{"body":{"id":2276,"nodeType":"Block","src":"1215:95:7","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2268,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2231,"src":"1233:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"id":2269,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2143,"src":"1243:10:7","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":2270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1243:12:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1233:22:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":2272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1257:34:7","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":2267,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"1225:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1225:67:7","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2274,"nodeType":"ExpressionStatement","src":"1225:67:7"},{"id":2275,"nodeType":"PlaceholderStatement","src":"1302:1:7"}]},"documentation":"@dev Throws if called by any account other than the owner.","id":2277,"name":"onlyOwner","nodeType":"ModifierDefinition","parameters":{"id":2266,"nodeType":"ParameterList","parameters":[],"src":"1212:2:7"},"src":"1194:116:7","visibility":"internal"},{"body":{"id":2295,"nodeType":"Block","src":"1698:91:7","statements":[{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2283,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2231,"src":"1734:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1750:1:7","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1742:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1742:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":2282,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2237,"src":"1713:20:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1713:40:7","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2288,"nodeType":"EmitStatement","src":"1708:45:7"},{"expression":{"argumentTypes":null,"id":2293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":2289,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2231,"src":"1763:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1780:1:7","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2290,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1772:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1772:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1763:19:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2294,"nodeType":"ExpressionStatement","src":"1763:19:7"}]},"documentation":"@dev Leaves the contract without owner. It will not be possible to call\n`onlyOwner` functions anymore. Can only be called by the current owner.\n     * NOTE: Renouncing ownership will leave the contract without an owner,\nthereby removing any functionality that is only available to the owner.","id":2296,"implemented":true,"kind":"function","modifiers":[{"arguments":null,"id":2280,"modifierName":{"argumentTypes":null,"id":2279,"name":"onlyOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"1688:9:7","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"1688:9:7"}],"name":"renounceOwnership","nodeType":"FunctionDefinition","parameters":{"id":2278,"nodeType":"ParameterList","parameters":[],"src":"1678:2:7"},"returnParameters":{"id":2281,"nodeType":"ParameterList","parameters":[],"src":"1698:0:7"},"scope":2333,"src":"1652:137:7","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":2307,"nodeType":"Block","src":"2000:45:7","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2304,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2298,"src":"2029:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2303,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"2010:18:7","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2010:28:7","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2306,"nodeType":"ExpressionStatement","src":"2010:28:7"}]},"documentation":"@dev Transfers ownership of the contract to a new account (`newOwner`).\nCan only be called by the current owner.","id":2308,"implemented":true,"kind":"function","modifiers":[{"arguments":null,"id":2301,"modifierName":{"argumentTypes":null,"id":2300,"name":"onlyOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2277,"src":"1990:9:7","typeDescriptions":{"typeIdentifier":"t_modifier$__$","typeString":"modifier ()"}},"nodeType":"ModifierInvocation","src":"1990:9:7"}],"name":"transferOwnership","nodeType":"FunctionDefinition","parameters":{"id":2299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2298,"name":"newOwner","nodeType":"VariableDeclaration","scope":2308,"src":"1965:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2297,"name":"address","nodeType":"ElementaryTypeName","src":"1965:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"1964:18:7"},"returnParameters":{"id":2302,"nodeType":"ParameterList","parameters":[],"src":"2000:0:7"},"scope":2333,"src":"1938:107:7","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":2331,"nodeType":"Block","src":"2201:170:7","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2314,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2310,"src":"2219:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":2316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2239:1:7","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2315,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2231:7:7","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2231:10:7","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"2219:22:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":2319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2243:40:7","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":2313,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"2211:7:7","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2211:73:7","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2321,"nodeType":"ExpressionStatement","src":"2211:73:7"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2323,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2231,"src":"2320:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2324,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2310,"src":"2328:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2322,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2237,"src":"2299:20:7","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2299:38:7","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2326,"nodeType":"EmitStatement","src":"2294:43:7"},{"expression":{"argumentTypes":null,"id":2329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":2327,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2231,"src":"2347:6:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":2328,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2310,"src":"2356:8:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2347:17:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2330,"nodeType":"ExpressionStatement","src":"2347:17:7"}]},"documentation":"@dev Transfers ownership of the contract to a new account (`newOwner`).","id":2332,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nodeType":"FunctionDefinition","parameters":{"id":2311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2310,"name":"newOwner","nodeType":"VariableDeclaration","scope":2332,"src":"2174:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2309,"name":"address","nodeType":"ElementaryTypeName","src":"2174:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"2173:18:7"},"returnParameters":{"id":2312,"nodeType":"ParameterList","parameters":[],"src":"2201:0:7"},"scope":2333,"src":"2146:225:7","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"}],"scope":2334,"src":"546:1827:7"}],"src":"0:2374:7"},"id":7},"@venusprotocol/venus-protocol/contracts/Utils/SafeBEP20.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/SafeBEP20.sol","exportedSymbols":{"SafeBEP20":[2553]},"id":2554,"nodeType":"SourceUnit","nodes":[{"id":2335,"literals":["solidity","^","0.5",".0"],"nodeType":"PragmaDirective","src":"0:23:8"},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol","file":"./SafeMath.sol","id":2336,"nodeType":"ImportDirective","scope":2554,"sourceUnit":2759,"src":"25:24:8","symbolAliases":[],"unitAlias":""},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol","file":"./IBEP20.sol","id":2337,"nodeType":"ImportDirective","scope":2554,"sourceUnit":2225,"src":"50:22:8","symbolAliases":[],"unitAlias":""},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/Address.sol","file":"./Address.sol","id":2338,"nodeType":"ImportDirective","scope":2554,"sourceUnit":2129,"src":"73:23:8","symbolAliases":[],"unitAlias":""},{"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":"@title SafeBEP20\n@dev Wrappers around BEP20 operations that throw on failure (when the token\ncontract returns false). Tokens that return no value (and instead revert or\nthrow on failure) are also supported, non-reverting calls are assumed to be\nsuccessful.\nTo use this library you can add a `using SafeBEP20 for BEP20;` statement to your contract,\nwhich allows you to call the safe operations as `token.safeTransfer(...)`, etc.","fullyImplemented":true,"id":2553,"linearizedBaseContracts":[2553],"name":"SafeBEP20","nodeType":"ContractDefinition","nodes":[{"id":2341,"libraryName":{"contractScope":null,"id":2339,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":2758,"src":"585:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$2758","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"579:27:8","typeName":{"id":2340,"name":"uint256","nodeType":"ElementaryTypeName","src":"598:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":2344,"libraryName":{"contractScope":null,"id":2342,"name":"Address","nodeType":"UserDefinedTypeName","referencedDeclaration":2128,"src":"617:7:8","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$2128","typeString":"library Address"}},"nodeType":"UsingForDirective","src":"611:26:8","typeName":{"id":2343,"name":"address","nodeType":"ElementaryTypeName","src":"629:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"body":{"id":2365,"nodeType":"Block","src":"715:102:8","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2354,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2346,"src":"744:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2357,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2346,"src":"774:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":2358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":2178,"src":"774:14:8","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"774:23:8","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"argumentTypes":null,"id":2360,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2348,"src":"799:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2361,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2350,"src":"803:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":2355,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"751:3:8","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2356,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"751:22:8","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"751:58:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2353,"name":"callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"725:18:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBEP20_$2224_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IBEP20,bytes memory)"}},"id":2363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"725:85:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2364,"nodeType":"ExpressionStatement","src":"725:85:8"}]},"documentation":null,"id":2366,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nodeType":"FunctionDefinition","parameters":{"id":2351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2346,"name":"token","nodeType":"VariableDeclaration","scope":2366,"src":"665:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},"typeName":{"contractScope":null,"id":2345,"name":"IBEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2224,"src":"665:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"value":null,"visibility":"internal"},{"constant":false,"id":2348,"name":"to","nodeType":"VariableDeclaration","scope":2366,"src":"679:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2347,"name":"address","nodeType":"ElementaryTypeName","src":"679:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2350,"name":"value","nodeType":"VariableDeclaration","scope":2366,"src":"691:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2349,"name":"uint256","nodeType":"ElementaryTypeName","src":"691:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"664:41:8"},"returnParameters":{"id":2352,"nodeType":"ParameterList","parameters":[],"src":"715:0:8"},"scope":2553,"src":"643:174:8","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":2390,"nodeType":"Block","src":"913:112:8","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2378,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2368,"src":"942:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2381,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2368,"src":"972:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":2382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":2207,"src":"972:18:8","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"972:27:8","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"argumentTypes":null,"id":2384,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2370,"src":"1001:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2385,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2372,"src":"1007:2:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2386,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"1011:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":2379,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"949:3:8","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"949:22:8","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"949:68:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2377,"name":"callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"923:18:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBEP20_$2224_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IBEP20,bytes memory)"}},"id":2388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"923:95:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2389,"nodeType":"ExpressionStatement","src":"923:95:8"}]},"documentation":null,"id":2391,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nodeType":"FunctionDefinition","parameters":{"id":2375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2368,"name":"token","nodeType":"VariableDeclaration","scope":2391,"src":"849:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},"typeName":{"contractScope":null,"id":2367,"name":"IBEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2224,"src":"849:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"value":null,"visibility":"internal"},{"constant":false,"id":2370,"name":"from","nodeType":"VariableDeclaration","scope":2391,"src":"863:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2369,"name":"address","nodeType":"ElementaryTypeName","src":"863:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2372,"name":"to","nodeType":"VariableDeclaration","scope":2391,"src":"877:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2371,"name":"address","nodeType":"ElementaryTypeName","src":"877:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2374,"name":"value","nodeType":"VariableDeclaration","scope":2391,"src":"889:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2373,"name":"uint256","nodeType":"ElementaryTypeName","src":"889:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"848:55:8"},"returnParameters":{"id":2376,"nodeType":"ParameterList","parameters":[],"src":"913:0:8"},"scope":2553,"src":"823:202:8","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":2431,"nodeType":"Block","src":"1107:549:8","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"components":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2401,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2397,"src":"1409:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"30","id":2402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1418:1:8","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1409:10:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2404,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1408:12:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"argumentTypes":null,"components":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2408,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4068,"src":"1449:4:8","typeDescriptions":{"typeIdentifier":"t_contract$_SafeBEP20_$2553","typeString":"library SafeBEP20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeBEP20_$2553","typeString":"library SafeBEP20"}],"id":2407,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1441:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1441:13:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2410,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2395,"src":"1456:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"argumentTypes":null,"id":2405,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2393,"src":"1425:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":2406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":2187,"src":"1425:15:8","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1425:39:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"30","id":2412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1468:1:8","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1425:44:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2414,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1424:46:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1408:62:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"5361666542455032303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365","id":2416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1484:56:8","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_91a9bac926ceb306224f4766a09b4f2ef09ebf6b62503a939a3d65e9ddb75b06","typeString":"literal_string \"SafeBEP20: approve from non-zero to non-zero allowance\""},"value":"SafeBEP20: approve from non-zero to non-zero allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_91a9bac926ceb306224f4766a09b4f2ef09ebf6b62503a939a3d65e9ddb75b06","typeString":"literal_string \"SafeBEP20: approve from non-zero to non-zero allowance\""}],"id":2400,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"1387:7:8","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1387:163:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2418,"nodeType":"ExpressionStatement","src":"1387:163:8"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2420,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2393,"src":"1579:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2423,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2393,"src":"1609:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":2424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":2196,"src":"1609:13:8","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1609:22:8","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"argumentTypes":null,"id":2426,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2395,"src":"1633:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2427,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2397,"src":"1642:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":2421,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"1586:3:8","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1586:22:8","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1586:62:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2419,"name":"callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"1560:18:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBEP20_$2224_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IBEP20,bytes memory)"}},"id":2429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1560:89:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2430,"nodeType":"ExpressionStatement","src":"1560:89:8"}]},"documentation":null,"id":2432,"implemented":true,"kind":"function","modifiers":[],"name":"safeApprove","nodeType":"FunctionDefinition","parameters":{"id":2398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2393,"name":"token","nodeType":"VariableDeclaration","scope":2432,"src":"1052:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},"typeName":{"contractScope":null,"id":2392,"name":"IBEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2224,"src":"1052:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"value":null,"visibility":"internal"},{"constant":false,"id":2395,"name":"spender","nodeType":"VariableDeclaration","scope":2432,"src":"1066:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2394,"name":"address","nodeType":"ElementaryTypeName","src":"1066:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2397,"name":"value","nodeType":"VariableDeclaration","scope":2432,"src":"1083:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2396,"name":"uint256","nodeType":"ElementaryTypeName","src":"1083:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1051:46:8"},"returnParameters":{"id":2399,"nodeType":"ParameterList","parameters":[],"src":"1107:0:8"},"scope":2553,"src":"1031:625:8","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":2466,"nodeType":"Block","src":"1748:196:8","statements":[{"assignments":[2442],"declarations":[{"constant":false,"id":2442,"name":"newAllowance","nodeType":"VariableDeclaration","scope":2466,"src":"1758:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2441,"name":"uint256","nodeType":"ElementaryTypeName","src":"1758:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":2453,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2451,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2438,"src":"1825:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2446,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4068,"src":"1805:4:8","typeDescriptions":{"typeIdentifier":"t_contract$_SafeBEP20_$2553","typeString":"library SafeBEP20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeBEP20_$2553","typeString":"library SafeBEP20"}],"id":2445,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1797:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1797:13:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2448,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2436,"src":"1812:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"argumentTypes":null,"id":2443,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2434,"src":"1781:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":2444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":2187,"src":"1781:15:8","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1781:39:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2571,"src":"1781:43:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1781:50:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1758:73:8"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2455,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2434,"src":"1860:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2458,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2434,"src":"1890:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":2459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":2196,"src":"1890:13:8","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1890:22:8","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"argumentTypes":null,"id":2461,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2436,"src":"1914:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2462,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"1923:12:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":2456,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"1867:3:8","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2457,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1867:22:8","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1867:69:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2454,"name":"callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"1841:18:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBEP20_$2224_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IBEP20,bytes memory)"}},"id":2464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1841:96:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2465,"nodeType":"ExpressionStatement","src":"1841:96:8"}]},"documentation":null,"id":2467,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nodeType":"FunctionDefinition","parameters":{"id":2439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2434,"name":"token","nodeType":"VariableDeclaration","scope":2467,"src":"1693:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},"typeName":{"contractScope":null,"id":2433,"name":"IBEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2224,"src":"1693:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"value":null,"visibility":"internal"},{"constant":false,"id":2436,"name":"spender","nodeType":"VariableDeclaration","scope":2467,"src":"1707:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2435,"name":"address","nodeType":"ElementaryTypeName","src":"1707:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2438,"name":"value","nodeType":"VariableDeclaration","scope":2467,"src":"1724:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2437,"name":"uint256","nodeType":"ElementaryTypeName","src":"1724:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1692:46:8"},"returnParameters":{"id":2440,"nodeType":"ParameterList","parameters":[],"src":"1748:0:8"},"scope":2553,"src":"1662:282:8","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":2502,"nodeType":"Block","src":"2036:275:8","statements":[{"assignments":[2477],"declarations":[{"constant":false,"id":2477,"name":"newAllowance","nodeType":"VariableDeclaration","scope":2502,"src":"2046:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2476,"name":"uint256","nodeType":"ElementaryTypeName","src":"2046:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":2489,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2486,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"2126:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"5361666542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":2487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2145:43:8","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_8d8b0d004f76517d0accc4049600ccad745ed1cf03a0a544bc57f891c9ae38a3","typeString":"literal_string \"SafeBEP20: decreased allowance below zero\""},"value":"SafeBEP20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_8d8b0d004f76517d0accc4049600ccad745ed1cf03a0a544bc57f891c9ae38a3","typeString":"literal_string \"SafeBEP20: decreased allowance below zero\""}],"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2481,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4068,"src":"2093:4:8","typeDescriptions":{"typeIdentifier":"t_contract$_SafeBEP20_$2553","typeString":"library SafeBEP20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeBEP20_$2553","typeString":"library SafeBEP20"}],"id":2480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2085:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2085:13:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2483,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2471,"src":"2100:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"argumentTypes":null,"id":2478,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2469,"src":"2069:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":2479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":2187,"src":"2069:15:8","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2069:39:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"2069:43:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2069:129:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2046:152:8"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2491,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2469,"src":"2227:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2494,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2469,"src":"2257:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"id":2495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":2196,"src":"2257:13:8","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2257:22:8","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"argumentTypes":null,"id":2497,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2471,"src":"2281:7:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2498,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2477,"src":"2290:12:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"id":2492,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"2234:3:8","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2234:22:8","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2234:69:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2490,"name":"callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"2208:18:8","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBEP20_$2224_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IBEP20,bytes memory)"}},"id":2500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2208:96:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2501,"nodeType":"ExpressionStatement","src":"2208:96:8"}]},"documentation":null,"id":2503,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nodeType":"FunctionDefinition","parameters":{"id":2474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"name":"token","nodeType":"VariableDeclaration","scope":2503,"src":"1981:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},"typeName":{"contractScope":null,"id":2468,"name":"IBEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2224,"src":"1981:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"value":null,"visibility":"internal"},{"constant":false,"id":2471,"name":"spender","nodeType":"VariableDeclaration","scope":2503,"src":"1995:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2470,"name":"address","nodeType":"ElementaryTypeName","src":"1995:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2473,"name":"value","nodeType":"VariableDeclaration","scope":2503,"src":"2012:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2472,"name":"uint256","nodeType":"ElementaryTypeName","src":"2012:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1980:46:8"},"returnParameters":{"id":2475,"nodeType":"ParameterList","parameters":[],"src":"2036:0:8"},"scope":2553,"src":"1950:361:8","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":2551,"nodeType":"Block","src":"2763:1038:8","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2512,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2505,"src":"3297:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}],"id":2511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3289:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3289:14:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":2080,"src":"3289:25:8","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$","typeString":"function (address) view returns (bool)"}},"id":2515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3289:27:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"5361666542455032303a2063616c6c20746f206e6f6e2d636f6e7472616374","id":2516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3318:33:8","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_e5b165dd326cc338f3f8a73e4bd1577d82082723f544c289e269216f5337d315","typeString":"literal_string \"SafeBEP20: call to non-contract\""},"value":"SafeBEP20: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e5b165dd326cc338f3f8a73e4bd1577d82082723f544c289e269216f5337d315","typeString":"literal_string \"SafeBEP20: call to non-contract\""}],"id":2510,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"3281:7:8","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3281:71:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2518,"nodeType":"ExpressionStatement","src":"3281:71:8"},{"assignments":[2520,2522],"declarations":[{"constant":false,"id":2520,"name":"success","nodeType":"VariableDeclaration","scope":2551,"src":"3423:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2519,"name":"bool","nodeType":"ElementaryTypeName","src":"3423:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"},{"constant":false,"id":2522,"name":"returndata","nodeType":"VariableDeclaration","scope":2551,"src":"3437:23:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2521,"name":"bytes","nodeType":"ElementaryTypeName","src":"3437:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"}],"id":2529,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2527,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"3484:4:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2524,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2505,"src":"3472:5:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}],"id":2523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3464:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":2525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3464:14:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3464:19:8","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3464:25:8","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3422:67:8"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2531,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2520,"src":"3507:7:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564","id":2532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3516:34:8","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_e357ac51478c37023e9e7ad13e9d6e33f2ac0566d41923020f1a6b2e7a541c3e","typeString":"literal_string \"SafeBEP20: low-level call failed\""},"value":"SafeBEP20: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e357ac51478c37023e9e7ad13e9d6e33f2ac0566d41923020f1a6b2e7a541c3e","typeString":"literal_string \"SafeBEP20: low-level call failed\""}],"id":2530,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"3499:7:8","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3499:52:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2534,"nodeType":"ExpressionStatement","src":"3499:52:8"},{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2535,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2522,"src":"3566:10:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3566:17:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":2537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3586:1:8","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3566:21:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":2550,"nodeType":"IfStatement","src":"3562:233:8","trueBody":{"id":2549,"nodeType":"Block","src":"3589:206:8","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2542,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2522,"src":"3718:10:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"argumentTypes":null,"components":[{"argumentTypes":null,"id":2543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3731:4:8","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":"bool"}],"id":2544,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3730:6:8","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"argumentTypes":null,"id":2540,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"3707:3:8","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3707:10:8","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3707:30:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"5361666542455032303a204245503230206f7065726174696f6e20646964206e6f742073756363656564","id":2546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3739:44:8","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_21c3364d55537bf20eb8f05374e9f53f47299e1883c412f1f1135f398f2c2082","typeString":"literal_string \"SafeBEP20: BEP20 operation did not succeed\""},"value":"SafeBEP20: BEP20 operation did not succeed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_21c3364d55537bf20eb8f05374e9f53f47299e1883c412f1f1135f398f2c2082","typeString":"literal_string \"SafeBEP20: BEP20 operation did not succeed\""}],"id":2539,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"3699:7:8","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3699:85:8","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2548,"nodeType":"ExpressionStatement","src":"3699:85:8"}]}}]},"documentation":"@dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\non the return value: the return value is optional (but if data is returned, it must not be false).\n@param token The token targeted by the call.\n@param data The call data (encoded using abi.encode or one of its variants).","id":2552,"implemented":true,"kind":"function","modifiers":[],"name":"callOptionalReturn","nodeType":"FunctionDefinition","parameters":{"id":2508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2505,"name":"token","nodeType":"VariableDeclaration","scope":2552,"src":"2722:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"},"typeName":{"contractScope":null,"id":2504,"name":"IBEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2224,"src":"2722:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IBEP20_$2224","typeString":"contract IBEP20"}},"value":null,"visibility":"internal"},{"constant":false,"id":2507,"name":"data","nodeType":"VariableDeclaration","scope":2552,"src":"2736:17:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2506,"name":"bytes","nodeType":"ElementaryTypeName","src":"2736:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"}],"src":"2721:33:8"},"returnParameters":{"id":2509,"nodeType":"ParameterList","parameters":[],"src":"2763:0:8"},"scope":2553,"src":"2694:1107:8","stateMutability":"nonpayable","superFunction":null,"visibility":"private"}],"scope":2554,"src":"555:3248:8"}],"src":"0:3804:8"},"id":8},"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol","exportedSymbols":{"SafeMath":[2758]},"id":2759,"nodeType":"SourceUnit","nodes":[{"id":2555,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:9"},{"baseContracts":[],"contractDependencies":[],"contractKind":"library","documentation":"@dev Wrappers over Solidity's arithmetic operations with added overflow\nchecks.\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\nin bugs, because programmers usually assume that an overflow raises an\nerror, which is the standard behavior in high level programming languages.\n`SafeMath` restores this intuition by reverting the transaction when an\noperation overflows.\n * Using this library instead of the unchecked operations eliminates an entire\nclass of bugs, so it's recommended to use it always.","fullyImplemented":true,"id":2758,"linearizedBaseContracts":[2758],"name":"SafeMath","nodeType":"ContractDefinition","nodes":[{"body":{"id":2570,"nodeType":"Block","src":"902:64:9","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2565,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2557,"src":"923:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":2566,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2559,"src":"926:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"536166654d6174683a206164646974696f6e206f766572666c6f77","id":2567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"929:29:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a","typeString":"literal_string \"SafeMath: addition overflow\""},"value":"SafeMath: addition overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a","typeString":"literal_string \"SafeMath: addition overflow\""}],"id":2564,"name":"add","nodeType":"Identifier","overloadedDeclarations":[2571,2598],"referencedDeclaration":2598,"src":"919:3:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"919:40:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2563,"id":2569,"nodeType":"Return","src":"912:47:9"}]},"documentation":"@dev Returns the addition of two unsigned integers, reverting on\noverflow.\n     * Counterpart to Solidity's `+` operator.\n     * Requirements:\n- Addition cannot overflow.","id":2571,"implemented":true,"kind":"function","modifiers":[],"name":"add","nodeType":"FunctionDefinition","parameters":{"id":2560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2557,"name":"a","nodeType":"VariableDeclaration","scope":2571,"src":"848:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2556,"name":"uint256","nodeType":"ElementaryTypeName","src":"848:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2559,"name":"b","nodeType":"VariableDeclaration","scope":2571,"src":"859:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2558,"name":"uint256","nodeType":"ElementaryTypeName","src":"859:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"847:22:9"},"returnParameters":{"id":2563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2562,"name":"","nodeType":"VariableDeclaration","scope":2571,"src":"893:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2561,"name":"uint256","nodeType":"ElementaryTypeName","src":"893:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"892:9:9"},"scope":2758,"src":"835:131:9","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2597,"nodeType":"Block","src":"1345:92:9","statements":[{"assignments":[2583],"declarations":[{"constant":false,"id":2583,"name":"c","nodeType":"VariableDeclaration","scope":2597,"src":"1355:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2582,"name":"uint256","nodeType":"ElementaryTypeName","src":"1355:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":2587,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2584,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"1367:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"argumentTypes":null,"id":2585,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2575,"src":"1371:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1367:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1355:17:9"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2589,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2583,"src":"1390:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":2590,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"1395:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1390:6:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"id":2592,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"1398:12:9","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2588,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"1382:7:9","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1382:29:9","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2594,"nodeType":"ExpressionStatement","src":"1382:29:9"},{"expression":{"argumentTypes":null,"id":2595,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2583,"src":"1429:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2581,"id":2596,"nodeType":"Return","src":"1422:8:9"}]},"documentation":"@dev Returns the subtraction of two unsigned integers, reverting with custom message on\noverflow (when the result is negative).\n     * Counterpart to Solidity's `-` operator.\n     * Requirements:\n- Subtraction cannot overflow.","id":2598,"implemented":true,"kind":"function","modifiers":[],"name":"add","nodeType":"FunctionDefinition","parameters":{"id":2578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2573,"name":"a","nodeType":"VariableDeclaration","scope":2598,"src":"1263:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2572,"name":"uint256","nodeType":"ElementaryTypeName","src":"1263:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2575,"name":"b","nodeType":"VariableDeclaration","scope":2598,"src":"1274:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2574,"name":"uint256","nodeType":"ElementaryTypeName","src":"1274:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2577,"name":"errorMessage","nodeType":"VariableDeclaration","scope":2598,"src":"1285:26:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2576,"name":"string","nodeType":"ElementaryTypeName","src":"1285:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"1262:50:9"},"returnParameters":{"id":2581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2580,"name":"","nodeType":"VariableDeclaration","scope":2598,"src":"1336:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2579,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1335:9:9"},"scope":2758,"src":"1250:187:9","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2613,"nodeType":"Block","src":"1768:67:9","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2608,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2600,"src":"1789:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":2609,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2602,"src":"1792:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"536166654d6174683a207375627472616374696f6e206f766572666c6f77","id":2610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1795:32:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862","typeString":"literal_string \"SafeMath: subtraction overflow\""},"value":"SafeMath: subtraction overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862","typeString":"literal_string \"SafeMath: subtraction overflow\""}],"id":2607,"name":"sub","nodeType":"Identifier","overloadedDeclarations":[2614,2641],"referencedDeclaration":2641,"src":"1785:3:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1785:43:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2606,"id":2612,"nodeType":"Return","src":"1778:50:9"}]},"documentation":"@dev Returns the subtraction of two unsigned integers, reverting on\noverflow (when the result is negative).\n     * Counterpart to Solidity's `-` operator.\n     * Requirements:\n- Subtraction cannot overflow.","id":2614,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nodeType":"FunctionDefinition","parameters":{"id":2603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2600,"name":"a","nodeType":"VariableDeclaration","scope":2614,"src":"1714:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2599,"name":"uint256","nodeType":"ElementaryTypeName","src":"1714:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2602,"name":"b","nodeType":"VariableDeclaration","scope":2614,"src":"1725:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2601,"name":"uint256","nodeType":"ElementaryTypeName","src":"1725:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1713:22:9"},"returnParameters":{"id":2606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2605,"name":"","nodeType":"VariableDeclaration","scope":2614,"src":"1759:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2604,"name":"uint256","nodeType":"ElementaryTypeName","src":"1759:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1758:9:9"},"scope":2758,"src":"1701:134:9","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2640,"nodeType":"Block","src":"2214:92:9","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2626,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2618,"src":"2232:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"id":2627,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2616,"src":"2237:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2232:6:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"id":2629,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2620,"src":"2240:12:9","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2625,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"2224:7:9","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2224:29:9","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2631,"nodeType":"ExpressionStatement","src":"2224:29:9"},{"assignments":[2633],"declarations":[{"constant":false,"id":2633,"name":"c","nodeType":"VariableDeclaration","scope":2640,"src":"2263:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2632,"name":"uint256","nodeType":"ElementaryTypeName","src":"2263:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":2637,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2634,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2616,"src":"2275:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"argumentTypes":null,"id":2635,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2618,"src":"2279:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2275:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2263:17:9"},{"expression":{"argumentTypes":null,"id":2638,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2633,"src":"2298:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2624,"id":2639,"nodeType":"Return","src":"2291:8:9"}]},"documentation":"@dev Returns the subtraction of two unsigned integers, reverting with custom message on\noverflow (when the result is negative).\n     * Counterpart to Solidity's `-` operator.\n     * Requirements:\n- Subtraction cannot overflow.","id":2641,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nodeType":"FunctionDefinition","parameters":{"id":2621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2616,"name":"a","nodeType":"VariableDeclaration","scope":2641,"src":"2132:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2615,"name":"uint256","nodeType":"ElementaryTypeName","src":"2132:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2618,"name":"b","nodeType":"VariableDeclaration","scope":2641,"src":"2143:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2617,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2620,"name":"errorMessage","nodeType":"VariableDeclaration","scope":2641,"src":"2154:26:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2619,"name":"string","nodeType":"ElementaryTypeName","src":"2154:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"2131:50:9"},"returnParameters":{"id":2624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2623,"name":"","nodeType":"VariableDeclaration","scope":2641,"src":"2205:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2622,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2204:9:9"},"scope":2758,"src":"2119:187:9","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2674,"nodeType":"Block","src":"2613:392:9","statements":[{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2650,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2643,"src":"2845:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"30","id":2651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2850:1:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2845:6:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":2656,"nodeType":"IfStatement","src":"2841:45:9","trueBody":{"id":2655,"nodeType":"Block","src":"2853:33:9","statements":[{"expression":{"argumentTypes":null,"hexValue":"30","id":2653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2874:1:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2649,"id":2654,"nodeType":"Return","src":"2867:8:9"}]}},{"assignments":[2658],"declarations":[{"constant":false,"id":2658,"name":"c","nodeType":"VariableDeclaration","scope":2674,"src":"2896:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2657,"name":"uint256","nodeType":"ElementaryTypeName","src":"2896:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":2662,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2659,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2643,"src":"2908:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"argumentTypes":null,"id":2660,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2645,"src":"2912:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2908:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2896:17:9"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2664,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2658,"src":"2931:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"argumentTypes":null,"id":2665,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2643,"src":"2935:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2931:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":2667,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2645,"src":"2940:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2931:10:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77","id":2669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2943:35:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3","typeString":"literal_string \"SafeMath: multiplication overflow\""},"value":"SafeMath: multiplication overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3","typeString":"literal_string \"SafeMath: multiplication overflow\""}],"id":2663,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"2923:7:9","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2923:56:9","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2671,"nodeType":"ExpressionStatement","src":"2923:56:9"},{"expression":{"argumentTypes":null,"id":2672,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2658,"src":"2997:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2649,"id":2673,"nodeType":"Return","src":"2990:8:9"}]},"documentation":"@dev Returns the multiplication of two unsigned integers, reverting on\noverflow.\n     * Counterpart to Solidity's `*` operator.\n     * Requirements:\n- Multiplication cannot overflow.","id":2675,"implemented":true,"kind":"function","modifiers":[],"name":"mul","nodeType":"FunctionDefinition","parameters":{"id":2646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2643,"name":"a","nodeType":"VariableDeclaration","scope":2675,"src":"2559:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2642,"name":"uint256","nodeType":"ElementaryTypeName","src":"2559:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2645,"name":"b","nodeType":"VariableDeclaration","scope":2675,"src":"2570:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2644,"name":"uint256","nodeType":"ElementaryTypeName","src":"2570:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2558:22:9"},"returnParameters":{"id":2649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2648,"name":"","nodeType":"VariableDeclaration","scope":2675,"src":"2604:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2647,"name":"uint256","nodeType":"ElementaryTypeName","src":"2604:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2603:9:9"},"scope":2758,"src":"2546:459:9","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2690,"nodeType":"Block","src":"3527:63:9","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2685,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"3548:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":2686,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"3551:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"536166654d6174683a206469766973696f6e206279207a65726f","id":2687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3554:28:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f","typeString":"literal_string \"SafeMath: division by zero\""},"value":"SafeMath: division by zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f","typeString":"literal_string \"SafeMath: division by zero\""}],"id":2684,"name":"div","nodeType":"Identifier","overloadedDeclarations":[2691,2718],"referencedDeclaration":2718,"src":"3544:3:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3544:39:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2683,"id":2689,"nodeType":"Return","src":"3537:46:9"}]},"documentation":"@dev Returns the integer division of two unsigned integers. Reverts on\ndivision by zero. The result is rounded towards zero.\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n`revert` opcode (which leaves remaining gas untouched) while Solidity\nuses an invalid opcode to revert (consuming all remaining gas).\n     * Requirements:\n- The divisor cannot be zero.","id":2691,"implemented":true,"kind":"function","modifiers":[],"name":"div","nodeType":"FunctionDefinition","parameters":{"id":2680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2677,"name":"a","nodeType":"VariableDeclaration","scope":2691,"src":"3473:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2676,"name":"uint256","nodeType":"ElementaryTypeName","src":"3473:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2679,"name":"b","nodeType":"VariableDeclaration","scope":2691,"src":"3484:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2678,"name":"uint256","nodeType":"ElementaryTypeName","src":"3484:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3472:22:9"},"returnParameters":{"id":2683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2682,"name":"","nodeType":"VariableDeclaration","scope":2691,"src":"3518:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2681,"name":"uint256","nodeType":"ElementaryTypeName","src":"3518:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3517:9:9"},"scope":2758,"src":"3460:130:9","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2717,"nodeType":"Block","src":"4160:243:9","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2703,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2695,"src":"4244:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":2704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4248:1:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4244:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"id":2706,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"4251:12:9","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2702,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"4236:7:9","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4236:28:9","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2708,"nodeType":"ExpressionStatement","src":"4236:28:9"},{"assignments":[2710],"declarations":[{"constant":false,"id":2710,"name":"c","nodeType":"VariableDeclaration","scope":2717,"src":"4274:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2709,"name":"uint256","nodeType":"ElementaryTypeName","src":"4274:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":2714,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2711,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2693,"src":"4286:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"argumentTypes":null,"id":2712,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2695,"src":"4290:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4286:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4274:17:9"},{"expression":{"argumentTypes":null,"id":2715,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2710,"src":"4395:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2701,"id":2716,"nodeType":"Return","src":"4388:8:9"}]},"documentation":"@dev Returns the integer division of two unsigned integers. Reverts with custom message on\ndivision by zero. The result is rounded towards zero.\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n`revert` opcode (which leaves remaining gas untouched) while Solidity\nuses an invalid opcode to revert (consuming all remaining gas).\n     * Requirements:\n- The divisor cannot be zero.","id":2718,"implemented":true,"kind":"function","modifiers":[],"name":"div","nodeType":"FunctionDefinition","parameters":{"id":2698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2693,"name":"a","nodeType":"VariableDeclaration","scope":2718,"src":"4078:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2692,"name":"uint256","nodeType":"ElementaryTypeName","src":"4078:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2695,"name":"b","nodeType":"VariableDeclaration","scope":2718,"src":"4089:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2694,"name":"uint256","nodeType":"ElementaryTypeName","src":"4089:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2697,"name":"errorMessage","nodeType":"VariableDeclaration","scope":2718,"src":"4100:26:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2696,"name":"string","nodeType":"ElementaryTypeName","src":"4100:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"4077:50:9"},"returnParameters":{"id":2701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2700,"name":"","nodeType":"VariableDeclaration","scope":2718,"src":"4151:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2699,"name":"uint256","nodeType":"ElementaryTypeName","src":"4151:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4150:9:9"},"scope":2758,"src":"4065:338:9","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2733,"nodeType":"Block","src":"4914:61:9","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2728,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2720,"src":"4935:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":2729,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2722,"src":"4938:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"536166654d6174683a206d6f64756c6f206279207a65726f","id":2730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4941:26:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832","typeString":"literal_string \"SafeMath: modulo by zero\""},"value":"SafeMath: modulo by zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832","typeString":"literal_string \"SafeMath: modulo by zero\""}],"id":2727,"name":"mod","nodeType":"Identifier","overloadedDeclarations":[2734,2757],"referencedDeclaration":2757,"src":"4931:3:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4931:37:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2726,"id":2732,"nodeType":"Return","src":"4924:44:9"}]},"documentation":"@dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\nReverts when dividing by zero.\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\nopcode (which leaves remaining gas untouched) while Solidity uses an\ninvalid opcode to revert (consuming all remaining gas).\n     * Requirements:\n- The divisor cannot be zero.","id":2734,"implemented":true,"kind":"function","modifiers":[],"name":"mod","nodeType":"FunctionDefinition","parameters":{"id":2723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2720,"name":"a","nodeType":"VariableDeclaration","scope":2734,"src":"4860:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4860:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2722,"name":"b","nodeType":"VariableDeclaration","scope":2734,"src":"4871:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2721,"name":"uint256","nodeType":"ElementaryTypeName","src":"4871:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4859:22:9"},"returnParameters":{"id":2726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2725,"name":"","nodeType":"VariableDeclaration","scope":2734,"src":"4905:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2724,"name":"uint256","nodeType":"ElementaryTypeName","src":"4905:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4904:9:9"},"scope":2758,"src":"4847:128:9","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":2756,"nodeType":"Block","src":"5534:68:9","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2746,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"5552:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"hexValue":"30","id":2747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5557:1:9","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5552:6:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"id":2749,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2740,"src":"5560:12:9","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2745,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"5544:7:9","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5544:29:9","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2751,"nodeType":"ExpressionStatement","src":"5544:29:9"},{"expression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":2752,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2736,"src":"5590:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"argumentTypes":null,"id":2753,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"5594:1:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5590:5:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2744,"id":2755,"nodeType":"Return","src":"5583:12:9"}]},"documentation":"@dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\nReverts with custom message when dividing by zero.\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\nopcode (which leaves remaining gas untouched) while Solidity uses an\ninvalid opcode to revert (consuming all remaining gas).\n     * Requirements:\n- The divisor cannot be zero.","id":2757,"implemented":true,"kind":"function","modifiers":[],"name":"mod","nodeType":"FunctionDefinition","parameters":{"id":2741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2736,"name":"a","nodeType":"VariableDeclaration","scope":2757,"src":"5452:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2735,"name":"uint256","nodeType":"ElementaryTypeName","src":"5452:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2738,"name":"b","nodeType":"VariableDeclaration","scope":2757,"src":"5463:9:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2737,"name":"uint256","nodeType":"ElementaryTypeName","src":"5463:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2740,"name":"errorMessage","nodeType":"VariableDeclaration","scope":2757,"src":"5474:26:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2739,"name":"string","nodeType":"ElementaryTypeName","src":"5474:6:9","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"5451:50:9"},"returnParameters":{"id":2744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2743,"name":"","nodeType":"VariableDeclaration","scope":2757,"src":"5525:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2742,"name":"uint256","nodeType":"ElementaryTypeName","src":"5525:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"5524:9:9"},"scope":2758,"src":"5439:163:9","stateMutability":"pure","superFunction":null,"visibility":"internal"}],"scope":2759,"src":"590:5014:9"}],"src":"0:5605:9"},"id":9},"@venusprotocol/venus-protocol/contracts/test/BEP20.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol","exportedSymbols":{"BEP20":[2833],"BEP20Base":[2810],"BEP20Harness":[3424],"BEP20NS":[2852],"NonStandardToken":[3232],"StandardToken":[3046]},"id":3425,"nodeType":"SourceUnit","nodes":[{"id":2760,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:10"},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol","file":"../Utils/SafeMath.sol","id":2761,"nodeType":"ImportDirective","scope":3425,"sourceUnit":2759,"src":"26:31:10","symbolAliases":[],"unitAlias":""},{"absolutePath":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol","file":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol","id":2763,"nodeType":"ImportDirective","scope":3425,"sourceUnit":1564,"src":"74:123:10","symbolAliases":[{"foreign":2762,"local":null}],"unitAlias":""},{"baseContracts":[],"contractDependencies":[],"contractKind":"interface","documentation":null,"fullyImplemented":false,"id":2810,"linearizedBaseContracts":[2810],"name":"BEP20Base","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":null,"id":2771,"name":"Approval","nodeType":"EventDefinition","parameters":{"id":2770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2765,"indexed":true,"name":"owner","nodeType":"VariableDeclaration","scope":2771,"src":"240:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2764,"name":"address","nodeType":"ElementaryTypeName","src":"240:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2767,"indexed":true,"name":"spender","nodeType":"VariableDeclaration","scope":2771,"src":"263:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2766,"name":"address","nodeType":"ElementaryTypeName","src":"263:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2769,"indexed":false,"name":"value","nodeType":"VariableDeclaration","scope":2771,"src":"288:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2768,"name":"uint256","nodeType":"ElementaryTypeName","src":"288:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"239:63:10"},"src":"225:78:10"},{"anonymous":false,"documentation":null,"id":2779,"name":"Transfer","nodeType":"EventDefinition","parameters":{"id":2778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2773,"indexed":true,"name":"from","nodeType":"VariableDeclaration","scope":2779,"src":"323:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2772,"name":"address","nodeType":"ElementaryTypeName","src":"323:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2775,"indexed":true,"name":"to","nodeType":"VariableDeclaration","scope":2779,"src":"345:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2774,"name":"address","nodeType":"ElementaryTypeName","src":"345:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2777,"indexed":false,"name":"value","nodeType":"VariableDeclaration","scope":2779,"src":"365:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2776,"name":"uint256","nodeType":"ElementaryTypeName","src":"365:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"322:57:10"},"src":"308:72:10"},{"body":null,"documentation":null,"id":2784,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nodeType":"FunctionDefinition","parameters":{"id":2780,"nodeType":"ParameterList","parameters":[],"src":"406:2:10"},"returnParameters":{"id":2783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2782,"name":"","nodeType":"VariableDeclaration","scope":2784,"src":"432:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2781,"name":"uint256","nodeType":"ElementaryTypeName","src":"432:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"431:9:10"},"scope":2810,"src":"386:55:10","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":2793,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nodeType":"FunctionDefinition","parameters":{"id":2789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2786,"name":"owner","nodeType":"VariableDeclaration","scope":2793,"src":"466:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2785,"name":"address","nodeType":"ElementaryTypeName","src":"466:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2788,"name":"spender","nodeType":"VariableDeclaration","scope":2793,"src":"481:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2787,"name":"address","nodeType":"ElementaryTypeName","src":"481:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"465:32:10"},"returnParameters":{"id":2792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2791,"name":"","nodeType":"VariableDeclaration","scope":2793,"src":"521:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2790,"name":"uint256","nodeType":"ElementaryTypeName","src":"521:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"520:9:10"},"scope":2810,"src":"447:83:10","stateMutability":"view","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":2802,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nodeType":"FunctionDefinition","parameters":{"id":2798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2795,"name":"spender","nodeType":"VariableDeclaration","scope":2802,"src":"553:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2794,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2797,"name":"value","nodeType":"VariableDeclaration","scope":2802,"src":"570:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2796,"name":"uint256","nodeType":"ElementaryTypeName","src":"570:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"552:32:10"},"returnParameters":{"id":2801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2800,"name":"","nodeType":"VariableDeclaration","scope":2802,"src":"603:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2799,"name":"bool","nodeType":"ElementaryTypeName","src":"603:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"602:6:10"},"scope":2810,"src":"536:73:10","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":2809,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nodeType":"FunctionDefinition","parameters":{"id":2805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2804,"name":"who","nodeType":"VariableDeclaration","scope":2809,"src":"634:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2803,"name":"address","nodeType":"ElementaryTypeName","src":"634:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"633:13:10"},"returnParameters":{"id":2808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2807,"name":"","nodeType":"VariableDeclaration","scope":2809,"src":"670:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2806,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"669:9:10"},"scope":2810,"src":"615:64:10","stateMutability":"view","superFunction":null,"visibility":"external"}],"scope":3425,"src":"199:482:10"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":2811,"name":"BEP20Base","nodeType":"UserDefinedTypeName","referencedDeclaration":2810,"src":"701:9:10","typeDescriptions":{"typeIdentifier":"t_contract$_BEP20Base_$2810","typeString":"contract BEP20Base"}},"id":2812,"nodeType":"InheritanceSpecifier","src":"701:9:10"}],"contractDependencies":[2810],"contractKind":"contract","documentation":null,"fullyImplemented":false,"id":2833,"linearizedBaseContracts":[2833,2810],"name":"BEP20","nodeType":"ContractDefinition","nodes":[{"body":null,"documentation":null,"id":2821,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":2817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2814,"name":"to","nodeType":"VariableDeclaration","scope":2821,"src":"735:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2813,"name":"address","nodeType":"ElementaryTypeName","src":"735:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2816,"name":"value","nodeType":"VariableDeclaration","scope":2821,"src":"747:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2815,"name":"uint256","nodeType":"ElementaryTypeName","src":"747:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"734:27:10"},"returnParameters":{"id":2820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2819,"name":"","nodeType":"VariableDeclaration","scope":2821,"src":"780:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2818,"name":"bool","nodeType":"ElementaryTypeName","src":"780:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"779:6:10"},"scope":2833,"src":"717:69:10","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":2832,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":2828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2823,"name":"from","nodeType":"VariableDeclaration","scope":2832,"src":"814:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2822,"name":"address","nodeType":"ElementaryTypeName","src":"814:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2825,"name":"to","nodeType":"VariableDeclaration","scope":2832,"src":"828:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2824,"name":"address","nodeType":"ElementaryTypeName","src":"828:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2827,"name":"value","nodeType":"VariableDeclaration","scope":2832,"src":"840:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2826,"name":"uint256","nodeType":"ElementaryTypeName","src":"840:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"813:41:10"},"returnParameters":{"id":2831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2830,"name":"","nodeType":"VariableDeclaration","scope":2832,"src":"873:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2829,"name":"bool","nodeType":"ElementaryTypeName","src":"873:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"872:6:10"},"scope":2833,"src":"792:87:10","stateMutability":"nonpayable","superFunction":null,"visibility":"external"}],"scope":3425,"src":"683:198:10"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":2834,"name":"BEP20Base","nodeType":"UserDefinedTypeName","referencedDeclaration":2810,"src":"903:9:10","typeDescriptions":{"typeIdentifier":"t_contract$_BEP20Base_$2810","typeString":"contract BEP20Base"}},"id":2835,"nodeType":"InheritanceSpecifier","src":"903:9:10"}],"contractDependencies":[2810],"contractKind":"contract","documentation":null,"fullyImplemented":false,"id":2852,"linearizedBaseContracts":[2852,2810],"name":"BEP20NS","nodeType":"ContractDefinition","nodes":[{"body":null,"documentation":null,"id":2842,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":2840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2837,"name":"to","nodeType":"VariableDeclaration","scope":2842,"src":"937:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2836,"name":"address","nodeType":"ElementaryTypeName","src":"937:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2839,"name":"value","nodeType":"VariableDeclaration","scope":2842,"src":"949:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2838,"name":"uint256","nodeType":"ElementaryTypeName","src":"949:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"936:27:10"},"returnParameters":{"id":2841,"nodeType":"ParameterList","parameters":[],"src":"972:0:10"},"scope":2852,"src":"919:54:10","stateMutability":"nonpayable","superFunction":null,"visibility":"external"},{"body":null,"documentation":null,"id":2851,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":2849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2844,"name":"from","nodeType":"VariableDeclaration","scope":2851,"src":"1001:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2843,"name":"address","nodeType":"ElementaryTypeName","src":"1001:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2846,"name":"to","nodeType":"VariableDeclaration","scope":2851,"src":"1015:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2845,"name":"address","nodeType":"ElementaryTypeName","src":"1015:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2848,"name":"value","nodeType":"VariableDeclaration","scope":2851,"src":"1027:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2847,"name":"uint256","nodeType":"ElementaryTypeName","src":"1027:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1000:41:10"},"returnParameters":{"id":2850,"nodeType":"ParameterList","parameters":[],"src":"1050:0:10"},"scope":2852,"src":"979:72:10","stateMutability":"nonpayable","superFunction":null,"visibility":"external"}],"scope":3425,"src":"883:170:10"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":2853,"name":"BEP20","nodeType":"UserDefinedTypeName","referencedDeclaration":2833,"src":"1223:5:10","typeDescriptions":{"typeIdentifier":"t_contract$_BEP20_$2833","typeString":"contract BEP20"}},"id":2854,"nodeType":"InheritanceSpecifier","src":"1223:5:10"}],"contractDependencies":[2810,2833],"contractKind":"contract","documentation":"@title Standard BEP20 token\n@dev Implementation of the basic standard token.\n See https://github.com/ethereum/EIPs/issues/20","fullyImplemented":true,"id":3046,"linearizedBaseContracts":[3046,2833,2810],"name":"StandardToken","nodeType":"ContractDefinition","nodes":[{"id":2857,"libraryName":{"contractScope":null,"id":2855,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":2758,"src":"1241:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$2758","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"1235:27:10","typeName":{"id":2856,"name":"uint256","nodeType":"ElementaryTypeName","src":"1254:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":2859,"name":"name","nodeType":"VariableDeclaration","scope":3046,"src":"1268:18:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2858,"name":"string","nodeType":"ElementaryTypeName","src":"1268:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"public"},{"constant":false,"id":2861,"name":"symbol","nodeType":"VariableDeclaration","scope":3046,"src":"1292:20:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2860,"name":"string","nodeType":"ElementaryTypeName","src":"1292:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"public"},{"constant":false,"id":2863,"name":"decimals","nodeType":"VariableDeclaration","scope":3046,"src":"1318:21:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":2862,"name":"uint8","nodeType":"ElementaryTypeName","src":"1318:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"public"},{"constant":false,"id":2865,"name":"totalSupply","nodeType":"VariableDeclaration","scope":3046,"src":"1345:26:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2864,"name":"uint256","nodeType":"ElementaryTypeName","src":"1345:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"constant":false,"id":2871,"name":"allowance","nodeType":"VariableDeclaration","scope":3046,"src":"1377:64:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":2870,"keyType":{"id":2866,"name":"address","nodeType":"ElementaryTypeName","src":"1385:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1377:47:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":2869,"keyType":{"id":2867,"name":"address","nodeType":"ElementaryTypeName","src":"1404:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1396:27:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":2868,"name":"uint256","nodeType":"ElementaryTypeName","src":"1415:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"value":null,"visibility":"public"},{"constant":false,"id":2875,"name":"balanceOf","nodeType":"VariableDeclaration","scope":3046,"src":"1447:44:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":2874,"keyType":{"id":2872,"name":"address","nodeType":"ElementaryTypeName","src":"1455:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1447:27:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":2873,"name":"uint256","nodeType":"ElementaryTypeName","src":"1466:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"value":null,"visibility":"public"},{"body":{"id":2909,"nodeType":"Block","src":"1654:185:10","statements":[{"expression":{"argumentTypes":null,"id":2888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":2886,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"1664:11:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":2887,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2877,"src":"1678:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1664:28:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2889,"nodeType":"ExpressionStatement","src":"1664:28:10"},{"expression":{"argumentTypes":null,"id":2895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2890,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"1702:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2893,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2891,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"1712:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1712:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1702:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":2894,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2877,"src":"1726:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1702:38:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2896,"nodeType":"ExpressionStatement","src":"1702:38:10"},{"expression":{"argumentTypes":null,"id":2899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":2897,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"1750:4:10","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":2898,"name":"_tokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2879,"src":"1757:10:10","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1750:17:10","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":2900,"nodeType":"ExpressionStatement","src":"1750:17:10"},{"expression":{"argumentTypes":null,"id":2903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":2901,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2861,"src":"1777:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":2902,"name":"_tokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2883,"src":"1786:12:10","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1777:21:10","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":2904,"nodeType":"ExpressionStatement","src":"1777:21:10"},{"expression":{"argumentTypes":null,"id":2907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":2905,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"1808:8:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":2906,"name":"_decimalUnits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2881,"src":"1819:13:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1808:24:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":2908,"nodeType":"ExpressionStatement","src":"1808:24:10"}]},"documentation":null,"id":2910,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":2884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2877,"name":"_initialAmount","nodeType":"VariableDeclaration","scope":2910,"src":"1519:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2876,"name":"uint256","nodeType":"ElementaryTypeName","src":"1519:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":2879,"name":"_tokenName","nodeType":"VariableDeclaration","scope":2910,"src":"1551:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2878,"name":"string","nodeType":"ElementaryTypeName","src":"1551:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":2881,"name":"_decimalUnits","nodeType":"VariableDeclaration","scope":2910,"src":"1585:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":2880,"name":"uint8","nodeType":"ElementaryTypeName","src":"1585:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":2883,"name":"_tokenSymbol","nodeType":"VariableDeclaration","scope":2910,"src":"1614:26:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2882,"name":"string","nodeType":"ElementaryTypeName","src":"1614:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"1509:137:10"},"returnParameters":{"id":2885,"nodeType":"ParameterList","parameters":[],"src":"1654:0:10"},"scope":3046,"src":"1498:341:10","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":2954,"nodeType":"Block","src":"1916:240:10","statements":[{"expression":{"argumentTypes":null,"id":2931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2919,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"1926:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2922,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2920,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"1936:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1936:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1926:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2928,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2914,"src":"1976:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e742062616c616e6365","id":2929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1984:22:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""},"value":"Insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2923,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"1950:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2926,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2924,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"1960:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"1960:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1950:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"1950:25:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1950:57:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1926:81:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2932,"nodeType":"ExpressionStatement","src":"1926:81:10"},{"expression":{"argumentTypes":null,"id":2943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2933,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"2017:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2935,"indexExpression":{"argumentTypes":null,"id":2934,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2912,"src":"2027:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2017:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2940,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2914,"src":"2053:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"42616c616e6365206f766572666c6f77","id":2941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2061:18:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""},"value":"Balance overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2936,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"2034:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2938,"indexExpression":{"argumentTypes":null,"id":2937,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2912,"src":"2044:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2034:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2598,"src":"2034:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2034:46:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2017:63:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2944,"nodeType":"ExpressionStatement","src":"2017:63:10"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2946,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"2104:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2104:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":2948,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2912,"src":"2116:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":2949,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2914,"src":"2121:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2945,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"2095:8:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":2950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2095:33:10","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2951,"nodeType":"EmitStatement","src":"2090:38:10"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":2952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2145:4:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":2918,"id":2953,"nodeType":"Return","src":"2138:11:10"}]},"documentation":null,"id":2955,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":2915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2912,"name":"dst","nodeType":"VariableDeclaration","scope":2955,"src":"1863:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2911,"name":"address","nodeType":"ElementaryTypeName","src":"1863:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2914,"name":"amount","nodeType":"VariableDeclaration","scope":2955,"src":"1876:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2913,"name":"uint256","nodeType":"ElementaryTypeName","src":"1876:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1862:29:10"},"returnParameters":{"id":2918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2917,"name":"","nodeType":"VariableDeclaration","scope":2955,"src":"1910:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2916,"name":"bool","nodeType":"ElementaryTypeName","src":"1910:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"1909:6:10"},"scope":3046,"src":"1845:311:10","stateMutability":"nonpayable","superFunction":2821,"visibility":"external"},{"body":{"id":3016,"nodeType":"Block","src":"2250:322:10","statements":[{"expression":{"argumentTypes":null,"id":2982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2966,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2260:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":2970,"indexExpression":{"argumentTypes":null,"id":2967,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2957,"src":"2270:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2260:14:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2971,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2968,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"2275:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2275:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2260:26:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2979,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"2320:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e7420616c6c6f77616e6365","id":2980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2328:24:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc","typeString":"literal_string \"Insufficient allowance\""},"value":"Insufficient allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc","typeString":"literal_string \"Insufficient allowance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2972,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2289:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":2974,"indexExpression":{"argumentTypes":null,"id":2973,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2957,"src":"2299:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2289:14:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2977,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":2975,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"2304:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2304:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2289:26:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"2289:30:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2289:64:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2260:93:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2983,"nodeType":"ExpressionStatement","src":"2260:93:10"},{"expression":{"argumentTypes":null,"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2984,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"2363:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2986,"indexExpression":{"argumentTypes":null,"id":2985,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2957,"src":"2373:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2363:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":2991,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"2399:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e742062616c616e6365","id":2992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2407:22:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""},"value":"Insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2987,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"2380:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2989,"indexExpression":{"argumentTypes":null,"id":2988,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2957,"src":"2390:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2380:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"2380:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":2993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2380:50:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2363:67:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2995,"nodeType":"ExpressionStatement","src":"2363:67:10"},{"expression":{"argumentTypes":null,"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2996,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"2440:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":2998,"indexExpression":{"argumentTypes":null,"id":2997,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"2450:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2440:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3003,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"2476:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"42616c616e6365206f766572666c6f77","id":3004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2484:18:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""},"value":"Balance overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":2999,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"2457:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3001,"indexExpression":{"argumentTypes":null,"id":3000,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"2467:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2457:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2598,"src":"2457:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2457:46:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2440:63:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3007,"nodeType":"ExpressionStatement","src":"2440:63:10"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3009,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2957,"src":"2527:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3010,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2959,"src":"2532:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3011,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"2537:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3008,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"2518:8:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2518:26:10","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3013,"nodeType":"EmitStatement","src":"2513:31:10"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":3014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2561:4:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":2965,"id":3015,"nodeType":"Return","src":"2554:11:10"}]},"documentation":null,"id":3017,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":2962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2957,"name":"src","nodeType":"VariableDeclaration","scope":3017,"src":"2184:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2956,"name":"address","nodeType":"ElementaryTypeName","src":"2184:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2959,"name":"dst","nodeType":"VariableDeclaration","scope":3017,"src":"2197:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2958,"name":"address","nodeType":"ElementaryTypeName","src":"2197:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":2961,"name":"amount","nodeType":"VariableDeclaration","scope":3017,"src":"2210:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2960,"name":"uint256","nodeType":"ElementaryTypeName","src":"2210:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2183:42:10"},"returnParameters":{"id":2965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2964,"name":"","nodeType":"VariableDeclaration","scope":3017,"src":"2244:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2963,"name":"bool","nodeType":"ElementaryTypeName","src":"2244:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"2243:6:10"},"scope":3046,"src":"2162:410:10","stateMutability":"nonpayable","superFunction":2832,"visibility":"external"},{"body":{"id":3044,"nodeType":"Block","src":"2653:131:10","statements":[{"expression":{"argumentTypes":null,"id":3033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3026,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"2663:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3030,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3027,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"2673:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2673:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2663:21:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3031,"indexExpression":{"argumentTypes":null,"id":3029,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3019,"src":"2685:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2663:31:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3032,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"2697:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2663:40:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3034,"nodeType":"ExpressionStatement","src":"2663:40:10"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3036,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"2727:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2727:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":3038,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3019,"src":"2739:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3039,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"2749:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3035,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2771,"src":"2718:8:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2718:38:10","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3041,"nodeType":"EmitStatement","src":"2713:43:10"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":3042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2773:4:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3025,"id":3043,"nodeType":"Return","src":"2766:11:10"}]},"documentation":null,"id":3045,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nodeType":"FunctionDefinition","parameters":{"id":3022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3019,"name":"_spender","nodeType":"VariableDeclaration","scope":3045,"src":"2595:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3018,"name":"address","nodeType":"ElementaryTypeName","src":"2595:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3021,"name":"amount","nodeType":"VariableDeclaration","scope":3045,"src":"2613:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3020,"name":"uint256","nodeType":"ElementaryTypeName","src":"2613:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2594:34:10"},"returnParameters":{"id":3025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3024,"name":"","nodeType":"VariableDeclaration","scope":3045,"src":"2647:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3023,"name":"bool","nodeType":"ElementaryTypeName","src":"2647:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"2646:6:10"},"scope":3046,"src":"2578:206:10","stateMutability":"nonpayable","superFunction":2802,"visibility":"external"}],"scope":3425,"src":"1197:1589:10"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":3047,"name":"BEP20NS","nodeType":"UserDefinedTypeName","referencedDeclaration":2852,"src":"3045:7:10","typeDescriptions":{"typeIdentifier":"t_contract$_BEP20NS_$2852","typeString":"contract BEP20NS"}},"id":3048,"nodeType":"InheritanceSpecifier","src":"3045:7:10"}],"contractDependencies":[2810,2852],"contractKind":"contract","documentation":"@title Non-Standard BEP20 token\n@dev Version of BEP20 with no return values for `transfer` and `transferFrom`\n See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca","fullyImplemented":true,"id":3232,"linearizedBaseContracts":[3232,2852,2810],"name":"NonStandardToken","nodeType":"ContractDefinition","nodes":[{"id":3051,"libraryName":{"contractScope":null,"id":3049,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":2758,"src":"3065:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$2758","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"3059:27:10","typeName":{"id":3050,"name":"uint256","nodeType":"ElementaryTypeName","src":"3078:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":3053,"name":"name","nodeType":"VariableDeclaration","scope":3232,"src":"3092:18:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3052,"name":"string","nodeType":"ElementaryTypeName","src":"3092:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"public"},{"constant":false,"id":3055,"name":"decimals","nodeType":"VariableDeclaration","scope":3232,"src":"3116:21:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3054,"name":"uint8","nodeType":"ElementaryTypeName","src":"3116:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"public"},{"constant":false,"id":3057,"name":"symbol","nodeType":"VariableDeclaration","scope":3232,"src":"3143:20:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3056,"name":"string","nodeType":"ElementaryTypeName","src":"3143:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"public"},{"constant":false,"id":3059,"name":"totalSupply","nodeType":"VariableDeclaration","scope":3232,"src":"3169:26:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3058,"name":"uint256","nodeType":"ElementaryTypeName","src":"3169:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"constant":false,"id":3065,"name":"allowance","nodeType":"VariableDeclaration","scope":3232,"src":"3201:64:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3064,"keyType":{"id":3060,"name":"address","nodeType":"ElementaryTypeName","src":"3209:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3201:47:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":3063,"keyType":{"id":3061,"name":"address","nodeType":"ElementaryTypeName","src":"3228:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3220:27:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3062,"name":"uint256","nodeType":"ElementaryTypeName","src":"3239:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"value":null,"visibility":"public"},{"constant":false,"id":3069,"name":"balanceOf","nodeType":"VariableDeclaration","scope":3232,"src":"3271:44:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3068,"keyType":{"id":3066,"name":"address","nodeType":"ElementaryTypeName","src":"3279:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3271:27:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3067,"name":"uint256","nodeType":"ElementaryTypeName","src":"3290:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"value":null,"visibility":"public"},{"body":{"id":3103,"nodeType":"Block","src":"3478:185:10","statements":[{"expression":{"argumentTypes":null,"id":3082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3080,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3059,"src":"3488:11:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3081,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3071,"src":"3502:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3488:28:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3083,"nodeType":"ExpressionStatement","src":"3488:28:10"},{"expression":{"argumentTypes":null,"id":3089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3084,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"3526:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3087,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3085,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"3536:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3536:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3526:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3088,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3071,"src":"3550:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3526:38:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3090,"nodeType":"ExpressionStatement","src":"3526:38:10"},{"expression":{"argumentTypes":null,"id":3093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3091,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3053,"src":"3574:4:10","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3092,"name":"_tokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3073,"src":"3581:10:10","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3574:17:10","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3094,"nodeType":"ExpressionStatement","src":"3574:17:10"},{"expression":{"argumentTypes":null,"id":3097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3095,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3057,"src":"3601:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3096,"name":"_tokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3077,"src":"3610:12:10","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3601:21:10","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3098,"nodeType":"ExpressionStatement","src":"3601:21:10"},{"expression":{"argumentTypes":null,"id":3101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3099,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3055,"src":"3632:8:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3100,"name":"_decimalUnits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3075,"src":"3643:13:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"3632:24:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":3102,"nodeType":"ExpressionStatement","src":"3632:24:10"}]},"documentation":null,"id":3104,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3071,"name":"_initialAmount","nodeType":"VariableDeclaration","scope":3104,"src":"3343:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3070,"name":"uint256","nodeType":"ElementaryTypeName","src":"3343:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3073,"name":"_tokenName","nodeType":"VariableDeclaration","scope":3104,"src":"3375:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3072,"name":"string","nodeType":"ElementaryTypeName","src":"3375:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":3075,"name":"_decimalUnits","nodeType":"VariableDeclaration","scope":3104,"src":"3409:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3074,"name":"uint8","nodeType":"ElementaryTypeName","src":"3409:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":3077,"name":"_tokenSymbol","nodeType":"VariableDeclaration","scope":3104,"src":"3438:26:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3076,"name":"string","nodeType":"ElementaryTypeName","src":"3438:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"3333:137:10"},"returnParameters":{"id":3079,"nodeType":"ParameterList","parameters":[],"src":"3478:0:10"},"scope":3232,"src":"3322:341:10","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3144,"nodeType":"Block","src":"3725:219:10","statements":[{"expression":{"argumentTypes":null,"id":3123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3111,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"3735:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3114,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3112,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"3745:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3745:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3735:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3120,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3108,"src":"3785:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e742062616c616e6365","id":3121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3793:22:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""},"value":"Insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3115,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"3759:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3118,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3116,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"3769:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3769:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3759:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"3759:25:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3759:57:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3735:81:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3124,"nodeType":"ExpressionStatement","src":"3735:81:10"},{"expression":{"argumentTypes":null,"id":3135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3125,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"3826:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3127,"indexExpression":{"argumentTypes":null,"id":3126,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"3836:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3826:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3132,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3108,"src":"3862:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"42616c616e6365206f766572666c6f77","id":3133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3870:18:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""},"value":"Balance overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3128,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"3843:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3130,"indexExpression":{"argumentTypes":null,"id":3129,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"3853:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3843:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2598,"src":"3843:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3843:46:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3826:63:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3136,"nodeType":"ExpressionStatement","src":"3826:63:10"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3138,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"3913:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3913:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":3140,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"3925:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3141,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3108,"src":"3930:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3137,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"3904:8:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3904:33:10","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3143,"nodeType":"EmitStatement","src":"3899:38:10"}]},"documentation":null,"id":3145,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":3109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3106,"name":"dst","nodeType":"VariableDeclaration","scope":3145,"src":"3687:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3105,"name":"address","nodeType":"ElementaryTypeName","src":"3687:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3108,"name":"amount","nodeType":"VariableDeclaration","scope":3145,"src":"3700:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3107,"name":"uint256","nodeType":"ElementaryTypeName","src":"3700:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3686:29:10"},"returnParameters":{"id":3110,"nodeType":"ParameterList","parameters":[],"src":"3725:0:10"},"scope":3232,"src":"3669:275:10","stateMutability":"nonpayable","superFunction":2842,"visibility":"external"},{"body":{"id":3202,"nodeType":"Block","src":"4023:301:10","statements":[{"expression":{"argumentTypes":null,"id":3170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3154,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"4033:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3158,"indexExpression":{"argumentTypes":null,"id":3155,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"4043:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4033:14:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3159,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3156,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"4048:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"4048:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4033:26:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3167,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3151,"src":"4093:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e7420616c6c6f77616e6365","id":3168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4101:24:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc","typeString":"literal_string \"Insufficient allowance\""},"value":"Insufficient allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc","typeString":"literal_string \"Insufficient allowance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3160,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"4062:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3162,"indexExpression":{"argumentTypes":null,"id":3161,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"4072:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4062:14:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3165,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3163,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"4077:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"4077:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4062:26:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"4062:30:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4062:64:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4033:93:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3171,"nodeType":"ExpressionStatement","src":"4033:93:10"},{"expression":{"argumentTypes":null,"id":3182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3172,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"4136:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3174,"indexExpression":{"argumentTypes":null,"id":3173,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"4146:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4136:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3179,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3151,"src":"4172:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e742062616c616e6365","id":3180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4180:22:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""},"value":"Insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3175,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"4153:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3177,"indexExpression":{"argumentTypes":null,"id":3176,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"4163:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4153:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"4153:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4153:50:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4136:67:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3183,"nodeType":"ExpressionStatement","src":"4136:67:10"},{"expression":{"argumentTypes":null,"id":3194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3184,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"4213:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3186,"indexExpression":{"argumentTypes":null,"id":3185,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3149,"src":"4223:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4213:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3191,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3151,"src":"4249:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"42616c616e6365206f766572666c6f77","id":3192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4257:18:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""},"value":"Balance overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3187,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"4230:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3189,"indexExpression":{"argumentTypes":null,"id":3188,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3149,"src":"4240:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4230:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2598,"src":"4230:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4230:46:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4213:63:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3195,"nodeType":"ExpressionStatement","src":"4213:63:10"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3197,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3147,"src":"4300:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3198,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3149,"src":"4305:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3199,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3151,"src":"4310:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3196,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"4291:8:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4291:26:10","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3201,"nodeType":"EmitStatement","src":"4286:31:10"}]},"documentation":null,"id":3203,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":3152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3147,"name":"src","nodeType":"VariableDeclaration","scope":3203,"src":"3972:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3146,"name":"address","nodeType":"ElementaryTypeName","src":"3972:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3149,"name":"dst","nodeType":"VariableDeclaration","scope":3203,"src":"3985:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3148,"name":"address","nodeType":"ElementaryTypeName","src":"3985:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3151,"name":"amount","nodeType":"VariableDeclaration","scope":3203,"src":"3998:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3150,"name":"uint256","nodeType":"ElementaryTypeName","src":"3998:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3971:42:10"},"returnParameters":{"id":3153,"nodeType":"ParameterList","parameters":[],"src":"4023:0:10"},"scope":3232,"src":"3950:374:10","stateMutability":"nonpayable","superFunction":2851,"visibility":"external"},{"body":{"id":3230,"nodeType":"Block","src":"4405:131:10","statements":[{"expression":{"argumentTypes":null,"id":3219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3212,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"4415:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3216,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3213,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"4425:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"4425:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4415:21:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3217,"indexExpression":{"argumentTypes":null,"id":3215,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"4437:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4415:31:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3218,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"4449:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4415:40:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3220,"nodeType":"ExpressionStatement","src":"4415:40:10"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3222,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"4479:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"4479:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":3224,"name":"_spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"4491:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3225,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"4501:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3221,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2771,"src":"4470:8:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4470:38:10","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3227,"nodeType":"EmitStatement","src":"4465:43:10"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":3228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4525:4:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3211,"id":3229,"nodeType":"Return","src":"4518:11:10"}]},"documentation":null,"id":3231,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nodeType":"FunctionDefinition","parameters":{"id":3208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3205,"name":"_spender","nodeType":"VariableDeclaration","scope":3231,"src":"4347:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3204,"name":"address","nodeType":"ElementaryTypeName","src":"4347:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3207,"name":"amount","nodeType":"VariableDeclaration","scope":3231,"src":"4365:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3206,"name":"uint256","nodeType":"ElementaryTypeName","src":"4365:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4346:34:10"},"returnParameters":{"id":3211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3210,"name":"","nodeType":"VariableDeclaration","scope":3231,"src":"4399:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3209,"name":"bool","nodeType":"ElementaryTypeName","src":"4399:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"4398:6:10"},"scope":3232,"src":"4330:206:10","stateMutability":"nonpayable","superFunction":2802,"visibility":"external"}],"scope":3425,"src":"3016:1522:10"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":3233,"name":"StandardToken","nodeType":"UserDefinedTypeName","referencedDeclaration":3046,"src":"4565:13:10","typeDescriptions":{"typeIdentifier":"t_contract$_StandardToken_$3046","typeString":"contract StandardToken"}},"id":3234,"nodeType":"InheritanceSpecifier","src":"4565:13:10"}],"contractDependencies":[2810,2833,3046],"contractKind":"contract","documentation":null,"fullyImplemented":true,"id":3424,"linearizedBaseContracts":[3424,3046,2833,2810],"name":"BEP20Harness","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":3238,"name":"failTransferFromAddresses","nodeType":"VariableDeclaration","scope":3424,"src":"4689:57:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":3237,"keyType":{"id":3235,"name":"address","nodeType":"ElementaryTypeName","src":"4697:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4689:24:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":3236,"name":"bool","nodeType":"ElementaryTypeName","src":"4708:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"value":null,"visibility":"public"},{"constant":false,"id":3242,"name":"failTransferToAddresses","nodeType":"VariableDeclaration","scope":3424,"src":"4829:55:10","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":3241,"keyType":{"id":3239,"name":"address","nodeType":"ElementaryTypeName","src":"4837:7:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4829:24:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":3240,"name":"bool","nodeType":"ElementaryTypeName","src":"4848:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"value":null,"visibility":"public"},{"body":{"id":3259,"nodeType":"Block","src":"5118:2:10","statements":[]},"documentation":null,"id":3260,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"argumentTypes":null,"id":3253,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3244,"src":"5061:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":3254,"name":"_tokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3246,"src":"5077:10:10","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"id":3255,"name":"_decimalUnits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3248,"src":"5089:13:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"argumentTypes":null,"id":3256,"name":"_tokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3250,"src":"5104:12:10","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":3257,"modifierName":{"argumentTypes":null,"id":3252,"name":"StandardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3046,"src":"5047:13:10","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StandardToken_$3046_$","typeString":"type(contract StandardToken)"}},"nodeType":"ModifierInvocation","src":"5047:70:10"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3244,"name":"_initialAmount","nodeType":"VariableDeclaration","scope":3260,"src":"4912:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3243,"name":"uint256","nodeType":"ElementaryTypeName","src":"4912:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3246,"name":"_tokenName","nodeType":"VariableDeclaration","scope":3260,"src":"4944:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3245,"name":"string","nodeType":"ElementaryTypeName","src":"4944:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":3248,"name":"_decimalUnits","nodeType":"VariableDeclaration","scope":3260,"src":"4978:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3247,"name":"uint8","nodeType":"ElementaryTypeName","src":"4978:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":3250,"name":"_tokenSymbol","nodeType":"VariableDeclaration","scope":3260,"src":"5007:26:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3249,"name":"string","nodeType":"ElementaryTypeName","src":"5007:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"4902:137:10"},"returnParameters":{"id":3258,"nodeType":"ParameterList","parameters":[],"src":"5118:0:10"},"scope":3424,"src":"4891:229:10","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3273,"nodeType":"Block","src":"5201:55:10","statements":[{"expression":{"argumentTypes":null,"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3267,"name":"failTransferFromAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3238,"src":"5211:25:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":3269,"indexExpression":{"argumentTypes":null,"id":3268,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3262,"src":"5237:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5211:30:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3270,"name":"_fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3264,"src":"5244:5:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5211:38:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3272,"nodeType":"ExpressionStatement","src":"5211:38:10"}]},"documentation":null,"id":3274,"implemented":true,"kind":"function","modifiers":[],"name":"harnessSetFailTransferFromAddress","nodeType":"FunctionDefinition","parameters":{"id":3265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3262,"name":"src","nodeType":"VariableDeclaration","scope":3274,"src":"5169:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3261,"name":"address","nodeType":"ElementaryTypeName","src":"5169:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3264,"name":"_fail","nodeType":"VariableDeclaration","scope":3274,"src":"5182:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3263,"name":"bool","nodeType":"ElementaryTypeName","src":"5182:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"5168:25:10"},"returnParameters":{"id":3266,"nodeType":"ParameterList","parameters":[],"src":"5201:0:10"},"scope":3424,"src":"5126:130:10","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3287,"nodeType":"Block","src":"5335:53:10","statements":[{"expression":{"argumentTypes":null,"id":3285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3281,"name":"failTransferToAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3242,"src":"5345:23:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":3283,"indexExpression":{"argumentTypes":null,"id":3282,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3276,"src":"5369:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5345:28:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3284,"name":"_fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3278,"src":"5376:5:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5345:36:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3286,"nodeType":"ExpressionStatement","src":"5345:36:10"}]},"documentation":null,"id":3288,"implemented":true,"kind":"function","modifiers":[],"name":"harnessSetFailTransferToAddress","nodeType":"FunctionDefinition","parameters":{"id":3279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3276,"name":"dst","nodeType":"VariableDeclaration","scope":3288,"src":"5303:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3275,"name":"address","nodeType":"ElementaryTypeName","src":"5303:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3278,"name":"_fail","nodeType":"VariableDeclaration","scope":3288,"src":"5316:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3277,"name":"bool","nodeType":"ElementaryTypeName","src":"5316:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"5302:25:10"},"returnParameters":{"id":3280,"nodeType":"ParameterList","parameters":[],"src":"5335:0:10"},"scope":3424,"src":"5262:126:10","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3301,"nodeType":"Block","src":"5460:46:10","statements":[{"expression":{"argumentTypes":null,"id":3299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3295,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"5470:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3297,"indexExpression":{"argumentTypes":null,"id":3296,"name":"_account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"5480:8:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5470:19:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3298,"name":"_amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3292,"src":"5492:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5470:29:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3300,"nodeType":"ExpressionStatement","src":"5470:29:10"}]},"documentation":null,"id":3302,"implemented":true,"kind":"function","modifiers":[],"name":"harnessSetBalance","nodeType":"FunctionDefinition","parameters":{"id":3293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3290,"name":"_account","nodeType":"VariableDeclaration","scope":3302,"src":"5421:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3289,"name":"address","nodeType":"ElementaryTypeName","src":"5421:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3292,"name":"_amount","nodeType":"VariableDeclaration","scope":3302,"src":"5439:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3291,"name":"uint","nodeType":"ElementaryTypeName","src":"5439:4:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"5420:32:10"},"returnParameters":{"id":3294,"nodeType":"ParameterList","parameters":[],"src":"5460:0:10"},"scope":3424,"src":"5394:112:10","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3353,"nodeType":"Block","src":"5591:358:10","statements":[{"condition":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3311,"name":"failTransferToAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3242,"src":"5643:23:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":3313,"indexExpression":{"argumentTypes":null,"id":3312,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3304,"src":"5667:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5643:28:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":3317,"nodeType":"IfStatement","src":"5639:71:10","trueBody":{"id":3316,"nodeType":"Block","src":"5673:37:10","statements":[{"expression":{"argumentTypes":null,"hexValue":"66616c7365","id":3314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5694:5:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":3310,"id":3315,"nodeType":"Return","src":"5687:12:10"}]}},{"expression":{"argumentTypes":null,"id":3330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3318,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"5719:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3321,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3319,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"5729:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"5729:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5719:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3327,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3306,"src":"5769:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e742062616c616e6365","id":3328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5777:22:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""},"value":"Insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3322,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"5743:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3325,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3323,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"5753:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"5753:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5743:21:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"5743:25:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5743:57:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5719:81:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3331,"nodeType":"ExpressionStatement","src":"5719:81:10"},{"expression":{"argumentTypes":null,"id":3342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3332,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"5810:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3334,"indexExpression":{"argumentTypes":null,"id":3333,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3304,"src":"5820:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5810:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3339,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3306,"src":"5846:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"42616c616e6365206f766572666c6f77","id":3340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5854:18:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""},"value":"Balance overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3335,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"5827:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3337,"indexExpression":{"argumentTypes":null,"id":3336,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3304,"src":"5837:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5827:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2598,"src":"5827:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5827:46:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5810:63:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3343,"nodeType":"ExpressionStatement","src":"5810:63:10"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3345,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"5897:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"5897:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":3347,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3304,"src":"5909:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3348,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3306,"src":"5914:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3344,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"5888:8:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5888:33:10","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3350,"nodeType":"EmitStatement","src":"5883:38:10"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":3351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5938:4:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3310,"id":3352,"nodeType":"Return","src":"5931:11:10"}]},"documentation":null,"id":3354,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":3307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3304,"name":"dst","nodeType":"VariableDeclaration","scope":3354,"src":"5530:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3303,"name":"address","nodeType":"ElementaryTypeName","src":"5530:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3306,"name":"amount","nodeType":"VariableDeclaration","scope":3354,"src":"5543:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3305,"name":"uint256","nodeType":"ElementaryTypeName","src":"5543:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"5529:29:10"},"returnParameters":{"id":3310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3309,"name":"success","nodeType":"VariableDeclaration","scope":3354,"src":"5577:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3308,"name":"bool","nodeType":"ElementaryTypeName","src":"5577:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"5576:14:10"},"scope":3424,"src":"5512:437:10","stateMutability":"nonpayable","superFunction":2955,"visibility":"external"},{"body":{"id":3422,"nodeType":"Block","src":"6051:442:10","statements":[{"condition":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3365,"name":"failTransferFromAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3238,"src":"6103:25:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":3367,"indexExpression":{"argumentTypes":null,"id":3366,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"6129:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6103:30:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":3371,"nodeType":"IfStatement","src":"6099:73:10","trueBody":{"id":3370,"nodeType":"Block","src":"6135:37:10","statements":[{"expression":{"argumentTypes":null,"hexValue":"66616c7365","id":3368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6156:5:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":3364,"id":3369,"nodeType":"Return","src":"6149:12:10"}]}},{"expression":{"argumentTypes":null,"id":3388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3372,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"6181:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3376,"indexExpression":{"argumentTypes":null,"id":3373,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"6191:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6181:14:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3377,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3374,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"6196:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"6196:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6181:26:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3385,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3360,"src":"6241:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e7420616c6c6f77616e6365","id":3386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6249:24:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc","typeString":"literal_string \"Insufficient allowance\""},"value":"Insufficient allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_45e3d26e36c3151c7f92a1eee9add9658cbb8e14605ee2452ec007389b9744bc","typeString":"literal_string \"Insufficient allowance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3378,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"6210:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3380,"indexExpression":{"argumentTypes":null,"id":3379,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"6220:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6210:14:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3383,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3381,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"6225:3:10","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"6225:10:10","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6210:26:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"6210:30:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6210:64:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6181:93:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3389,"nodeType":"ExpressionStatement","src":"6181:93:10"},{"expression":{"argumentTypes":null,"id":3400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3390,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"6284:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3392,"indexExpression":{"argumentTypes":null,"id":3391,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"6294:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6284:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3397,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3360,"src":"6320:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"496e73756666696369656e742062616c616e6365","id":3398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6328:22:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""},"value":"Insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_47533c3652efd02135ecc34b3fac8efc7b14bf0618b9392fd6e044a3d8a6eef5","typeString":"literal_string \"Insufficient balance\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3393,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"6301:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3395,"indexExpression":{"argumentTypes":null,"id":3394,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"6311:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6301:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2641,"src":"6301:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6301:50:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6284:67:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3401,"nodeType":"ExpressionStatement","src":"6284:67:10"},{"expression":{"argumentTypes":null,"id":3412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3402,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"6361:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3404,"indexExpression":{"argumentTypes":null,"id":3403,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"6371:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6361:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3409,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3360,"src":"6397:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"42616c616e6365206f766572666c6f77","id":3410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6405:18:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""},"value":"Balance overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_3ff36095f6b077e3381ad9b42fa926720d9d1a053c514940c75d3e94fc7de897","typeString":"literal_string \"Balance overflow\""}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3405,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"6378:9:10","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3407,"indexExpression":{"argumentTypes":null,"id":3406,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"6388:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6378:14:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2598,"src":"6378:18:10","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":3411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6378:46:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6361:63:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3413,"nodeType":"ExpressionStatement","src":"6361:63:10"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3415,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3356,"src":"6448:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3416,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"6453:3:10","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3417,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3360,"src":"6458:6:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3414,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"6439:8:10","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6439:26:10","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3419,"nodeType":"EmitStatement","src":"6434:31:10"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":3420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6482:4:10","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3364,"id":3421,"nodeType":"Return","src":"6475:11:10"}]},"documentation":null,"id":3423,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":3361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3356,"name":"src","nodeType":"VariableDeclaration","scope":3423,"src":"5977:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3355,"name":"address","nodeType":"ElementaryTypeName","src":"5977:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3358,"name":"dst","nodeType":"VariableDeclaration","scope":3423,"src":"5990:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3357,"name":"address","nodeType":"ElementaryTypeName","src":"5990:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3360,"name":"amount","nodeType":"VariableDeclaration","scope":3423,"src":"6003:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3359,"name":"uint256","nodeType":"ElementaryTypeName","src":"6003:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"5976:42:10"},"returnParameters":{"id":3364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3363,"name":"success","nodeType":"VariableDeclaration","scope":3423,"src":"6037:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3362,"name":"bool","nodeType":"ElementaryTypeName","src":"6037:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"6036:14:10"},"scope":3424,"src":"5955:538:10","stateMutability":"nonpayable","superFunction":3017,"visibility":"external"}],"scope":3425,"src":"4540:1955:10"}],"src":"0:6496:10"},"id":10},"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol","exportedSymbols":{"FaucetNonStandardToken":[3521],"FaucetToken":[3474],"FaucetTokenReEntrantHarness":[3909]},"id":3910,"nodeType":"SourceUnit","nodes":[{"id":3426,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:11"},{"absolutePath":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol","file":"./BEP20.sol","id":3427,"nodeType":"ImportDirective","scope":3910,"sourceUnit":3425,"src":"26:21:11","symbolAliases":[],"unitAlias":""},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":3428,"name":"StandardToken","nodeType":"UserDefinedTypeName","referencedDeclaration":3046,"src":"200:13:11","typeDescriptions":{"typeIdentifier":"t_contract$_StandardToken_$3046","typeString":"contract StandardToken"}},"id":3429,"nodeType":"InheritanceSpecifier","src":"200:13:11"}],"contractDependencies":[2810,2833,3046],"contractKind":"contract","documentation":"@title The Venus Faucet Test Token\n@author Venus\n@notice A simple test token that lets anyone get more of it.","fullyImplemented":true,"id":3474,"linearizedBaseContracts":[3474,3046,2833,2810],"name":"FaucetToken","nodeType":"ContractDefinition","nodes":[{"body":{"id":3446,"nodeType":"Block","src":"447:2:11","statements":[]},"documentation":null,"id":3447,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"argumentTypes":null,"id":3440,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3431,"src":"390:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":3441,"name":"_tokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3433,"src":"406:10:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"id":3442,"name":"_decimalUnits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3435,"src":"418:13:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"argumentTypes":null,"id":3443,"name":"_tokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3437,"src":"433:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":3444,"modifierName":{"argumentTypes":null,"id":3439,"name":"StandardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3046,"src":"376:13:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StandardToken_$3046_$","typeString":"type(contract StandardToken)"}},"nodeType":"ModifierInvocation","src":"376:70:11"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3431,"name":"_initialAmount","nodeType":"VariableDeclaration","scope":3447,"src":"241:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3430,"name":"uint256","nodeType":"ElementaryTypeName","src":"241:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3433,"name":"_tokenName","nodeType":"VariableDeclaration","scope":3447,"src":"273:24:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3432,"name":"string","nodeType":"ElementaryTypeName","src":"273:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":3435,"name":"_decimalUnits","nodeType":"VariableDeclaration","scope":3447,"src":"307:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3434,"name":"uint8","nodeType":"ElementaryTypeName","src":"307:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":3437,"name":"_tokenSymbol","nodeType":"VariableDeclaration","scope":3447,"src":"336:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3436,"name":"string","nodeType":"ElementaryTypeName","src":"336:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"231:137:11"},"returnParameters":{"id":3445,"nodeType":"ParameterList","parameters":[],"src":"447:0:11"},"scope":3474,"src":"220:229:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3472,"nodeType":"Block","src":"513:126:11","statements":[{"expression":{"argumentTypes":null,"id":3458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3454,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2875,"src":"523:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3456,"indexExpression":{"argumentTypes":null,"id":3455,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3449,"src":"533:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"523:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"argumentTypes":null,"id":3457,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3451,"src":"544:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"523:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3459,"nodeType":"ExpressionStatement","src":"523:26:11"},{"expression":{"argumentTypes":null,"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3460,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"559:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"argumentTypes":null,"id":3461,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3451,"src":"574:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"559:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3463,"nodeType":"ExpressionStatement","src":"559:20:11"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3466,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4090,"src":"611:4:11","typeDescriptions":{"typeIdentifier":"t_contract$_FaucetToken_$3474","typeString":"contract FaucetToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_FaucetToken_$3474","typeString":"contract FaucetToken"}],"id":3465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"603:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"603:13:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3468,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3449,"src":"618:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3469,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3451,"src":"626:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3464,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"594:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"594:38:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3471,"nodeType":"EmitStatement","src":"589:43:11"}]},"documentation":null,"id":3473,"implemented":true,"kind":"function","modifiers":[],"name":"allocateTo","nodeType":"FunctionDefinition","parameters":{"id":3452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3449,"name":"_owner","nodeType":"VariableDeclaration","scope":3473,"src":"475:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3448,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3451,"name":"value","nodeType":"VariableDeclaration","scope":3473,"src":"491:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3450,"name":"uint256","nodeType":"ElementaryTypeName","src":"491:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"474:31:11"},"returnParameters":{"id":3453,"nodeType":"ParameterList","parameters":[],"src":"513:0:11"},"scope":3474,"src":"455:184:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"}],"scope":3910,"src":"176:465:11"},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":3475,"name":"NonStandardToken","nodeType":"UserDefinedTypeName","referencedDeclaration":3232,"src":"820:16:11","typeDescriptions":{"typeIdentifier":"t_contract$_NonStandardToken_$3232","typeString":"contract NonStandardToken"}},"id":3476,"nodeType":"InheritanceSpecifier","src":"820:16:11"}],"contractDependencies":[2810,2852,3232],"contractKind":"contract","documentation":"@title The Venus Faucet Test Token (non-standard)\n@author Venus\n@notice A simple test token that lets anyone get more of it.","fullyImplemented":true,"id":3521,"linearizedBaseContracts":[3521,3232,2852,2810],"name":"FaucetNonStandardToken","nodeType":"ContractDefinition","nodes":[{"body":{"id":3493,"nodeType":"Block","src":"1073:2:11","statements":[]},"documentation":null,"id":3494,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"argumentTypes":null,"id":3487,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3478,"src":"1016:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":3488,"name":"_tokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"1032:10:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"id":3489,"name":"_decimalUnits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3482,"src":"1044:13:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"argumentTypes":null,"id":3490,"name":"_tokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3484,"src":"1059:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":3491,"modifierName":{"argumentTypes":null,"id":3486,"name":"NonStandardToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3232,"src":"999:16:11","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_NonStandardToken_$3232_$","typeString":"type(contract NonStandardToken)"}},"nodeType":"ModifierInvocation","src":"999:73:11"}],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3478,"name":"_initialAmount","nodeType":"VariableDeclaration","scope":3494,"src":"864:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3477,"name":"uint256","nodeType":"ElementaryTypeName","src":"864:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3480,"name":"_tokenName","nodeType":"VariableDeclaration","scope":3494,"src":"896:24:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3479,"name":"string","nodeType":"ElementaryTypeName","src":"896:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":3482,"name":"_decimalUnits","nodeType":"VariableDeclaration","scope":3494,"src":"930:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3481,"name":"uint8","nodeType":"ElementaryTypeName","src":"930:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":3484,"name":"_tokenSymbol","nodeType":"VariableDeclaration","scope":3494,"src":"959:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3483,"name":"string","nodeType":"ElementaryTypeName","src":"959:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"854:137:11"},"returnParameters":{"id":3492,"nodeType":"ParameterList","parameters":[],"src":"1073:0:11"},"scope":3521,"src":"843:232:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3519,"nodeType":"Block","src":"1139:126:11","statements":[{"expression":{"argumentTypes":null,"id":3505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3501,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3069,"src":"1149:9:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3503,"indexExpression":{"argumentTypes":null,"id":3502,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3496,"src":"1159:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1149:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"argumentTypes":null,"id":3504,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3498,"src":"1170:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1149:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3506,"nodeType":"ExpressionStatement","src":"1149:26:11"},{"expression":{"argumentTypes":null,"id":3509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3507,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3059,"src":"1185:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"argumentTypes":null,"id":3508,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3498,"src":"1200:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1185:20:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3510,"nodeType":"ExpressionStatement","src":"1185:20:11"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3513,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4092,"src":"1237:4:11","typeDescriptions":{"typeIdentifier":"t_contract$_FaucetNonStandardToken_$3521","typeString":"contract FaucetNonStandardToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_FaucetNonStandardToken_$3521","typeString":"contract FaucetNonStandardToken"}],"id":3512,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1229:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":3514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1229:13:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3515,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3496,"src":"1244:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3516,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3498,"src":"1252:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3511,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"1220:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1220:38:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3518,"nodeType":"EmitStatement","src":"1215:43:11"}]},"documentation":null,"id":3520,"implemented":true,"kind":"function","modifiers":[],"name":"allocateTo","nodeType":"FunctionDefinition","parameters":{"id":3499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3496,"name":"_owner","nodeType":"VariableDeclaration","scope":3520,"src":"1101:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3495,"name":"address","nodeType":"ElementaryTypeName","src":"1101:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3498,"name":"value","nodeType":"VariableDeclaration","scope":3520,"src":"1117:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3497,"name":"uint256","nodeType":"ElementaryTypeName","src":"1117:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1100:31:11"},"returnParameters":{"id":3500,"nodeType":"ParameterList","parameters":[],"src":"1139:0:11"},"scope":3521,"src":"1081:184:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"}],"scope":3910,"src":"785:482:11"},{"baseContracts":[],"contractDependencies":[],"contractKind":"contract","documentation":"@title The Venus Faucet Re-Entrant Test Token\n@author Venus\n@notice A test token that is malicious and tries to re-enter callers","fullyImplemented":true,"id":3909,"linearizedBaseContracts":[3909],"name":"FaucetTokenReEntrantHarness","nodeType":"ContractDefinition","nodes":[{"id":3524,"libraryName":{"contractScope":null,"id":3522,"name":"SafeMath","nodeType":"UserDefinedTypeName","referencedDeclaration":2758,"src":"1464:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_SafeMath_$2758","typeString":"library SafeMath"}},"nodeType":"UsingForDirective","src":"1458:27:11","typeName":{"id":3523,"name":"uint256","nodeType":"ElementaryTypeName","src":"1477:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"documentation":null,"id":3532,"name":"Transfer","nodeType":"EventDefinition","parameters":{"id":3531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3526,"indexed":true,"name":"from","nodeType":"VariableDeclaration","scope":3532,"src":"1506:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3525,"name":"address","nodeType":"ElementaryTypeName","src":"1506:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3528,"indexed":true,"name":"to","nodeType":"VariableDeclaration","scope":3532,"src":"1528:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3527,"name":"address","nodeType":"ElementaryTypeName","src":"1528:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3530,"indexed":false,"name":"value","nodeType":"VariableDeclaration","scope":3532,"src":"1548:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3529,"name":"uint256","nodeType":"ElementaryTypeName","src":"1548:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1505:57:11"},"src":"1491:72:11"},{"anonymous":false,"documentation":null,"id":3540,"name":"Approval","nodeType":"EventDefinition","parameters":{"id":3539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3534,"indexed":true,"name":"owner","nodeType":"VariableDeclaration","scope":3540,"src":"1583:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3533,"name":"address","nodeType":"ElementaryTypeName","src":"1583:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3536,"indexed":true,"name":"spender","nodeType":"VariableDeclaration","scope":3540,"src":"1606:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3535,"name":"address","nodeType":"ElementaryTypeName","src":"1606:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3538,"indexed":false,"name":"value","nodeType":"VariableDeclaration","scope":3540,"src":"1631:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3537,"name":"uint256","nodeType":"ElementaryTypeName","src":"1631:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1582:63:11"},"src":"1568:78:11"},{"constant":false,"id":3542,"name":"name","nodeType":"VariableDeclaration","scope":3909,"src":"1652:18:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3541,"name":"string","nodeType":"ElementaryTypeName","src":"1652:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"public"},{"constant":false,"id":3544,"name":"symbol","nodeType":"VariableDeclaration","scope":3909,"src":"1676:20:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3543,"name":"string","nodeType":"ElementaryTypeName","src":"1676:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"public"},{"constant":false,"id":3546,"name":"decimals","nodeType":"VariableDeclaration","scope":3909,"src":"1702:21:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3545,"name":"uint8","nodeType":"ElementaryTypeName","src":"1702:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"public"},{"constant":false,"id":3548,"name":"totalSupply_","nodeType":"VariableDeclaration","scope":3909,"src":"1729:29:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3547,"name":"uint256","nodeType":"ElementaryTypeName","src":"1729:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3554,"name":"allowance_","nodeType":"VariableDeclaration","scope":3909,"src":"1764:67:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3553,"keyType":{"id":3549,"name":"address","nodeType":"ElementaryTypeName","src":"1772:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1764:47:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":3552,"keyType":{"id":3550,"name":"address","nodeType":"ElementaryTypeName","src":"1791:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1783:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3551,"name":"uint256","nodeType":"ElementaryTypeName","src":"1802:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"value":null,"visibility":"internal"},{"constant":false,"id":3558,"name":"balanceOf_","nodeType":"VariableDeclaration","scope":3909,"src":"1837:47:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3557,"keyType":{"id":3555,"name":"address","nodeType":"ElementaryTypeName","src":"1845:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1837:27:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3556,"name":"uint256","nodeType":"ElementaryTypeName","src":"1856:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"value":null,"visibility":"internal"},{"constant":false,"id":3560,"name":"reEntryCallData","nodeType":"VariableDeclaration","scope":3909,"src":"1891:28:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes"},"typeName":{"id":3559,"name":"bytes","nodeType":"ElementaryTypeName","src":"1891:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"public"},{"constant":false,"id":3562,"name":"reEntryFun","nodeType":"VariableDeclaration","scope":3909,"src":"1925:24:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":3561,"name":"string","nodeType":"ElementaryTypeName","src":"1925:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"public"},{"body":{"id":3608,"nodeType":"Block","src":"2186:265:11","statements":[{"expression":{"argumentTypes":null,"id":3579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3577,"name":"totalSupply_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"2196:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3578,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3564,"src":"2211:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2196:29:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3580,"nodeType":"ExpressionStatement","src":"2196:29:11"},{"expression":{"argumentTypes":null,"id":3586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3581,"name":"balanceOf_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3558,"src":"2235:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3584,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3582,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"2246:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2246:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2235:22:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3585,"name":"_initialAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3564,"src":"2260:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2235:39:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3587,"nodeType":"ExpressionStatement","src":"2235:39:11"},{"expression":{"argumentTypes":null,"id":3590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3588,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3542,"src":"2284:4:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3589,"name":"_tokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3566,"src":"2291:10:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2284:17:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3591,"nodeType":"ExpressionStatement","src":"2284:17:11"},{"expression":{"argumentTypes":null,"id":3594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3592,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3544,"src":"2311:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3593,"name":"_tokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3570,"src":"2320:12:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2311:21:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3595,"nodeType":"ExpressionStatement","src":"2311:21:11"},{"expression":{"argumentTypes":null,"id":3598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3596,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3546,"src":"2342:8:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3597,"name":"_decimalUnits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3568,"src":"2353:13:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2342:24:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":3599,"nodeType":"ExpressionStatement","src":"2342:24:11"},{"expression":{"argumentTypes":null,"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3600,"name":"reEntryCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3560,"src":"2376:15:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3601,"name":"_reEntryCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3572,"src":"2394:16:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"2376:34:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"id":3603,"nodeType":"ExpressionStatement","src":"2376:34:11"},{"expression":{"argumentTypes":null,"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3604,"name":"reEntryFun","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3562,"src":"2420:10:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3605,"name":"_reEntryFun","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"2433:11:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2420:24:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3607,"nodeType":"ExpressionStatement","src":"2420:24:11"}]},"documentation":null,"id":3609,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3564,"name":"_initialAmount","nodeType":"VariableDeclaration","scope":3609,"src":"1977:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3563,"name":"uint256","nodeType":"ElementaryTypeName","src":"1977:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3566,"name":"_tokenName","nodeType":"VariableDeclaration","scope":3609,"src":"2009:24:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3565,"name":"string","nodeType":"ElementaryTypeName","src":"2009:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":3568,"name":"_decimalUnits","nodeType":"VariableDeclaration","scope":3609,"src":"2043:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3567,"name":"uint8","nodeType":"ElementaryTypeName","src":"2043:5:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":null,"visibility":"internal"},{"constant":false,"id":3570,"name":"_tokenSymbol","nodeType":"VariableDeclaration","scope":3609,"src":"2072:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3569,"name":"string","nodeType":"ElementaryTypeName","src":"2072:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":3572,"name":"_reEntryCallData","nodeType":"VariableDeclaration","scope":3609,"src":"2108:29:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3571,"name":"bytes","nodeType":"ElementaryTypeName","src":"2108:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"},{"constant":false,"id":3574,"name":"_reEntryFun","nodeType":"VariableDeclaration","scope":3609,"src":"2147:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3573,"name":"string","nodeType":"ElementaryTypeName","src":"2147:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"1967:211:11"},"returnParameters":{"id":3576,"nodeType":"ParameterList","parameters":[],"src":"2186:0:11"},"scope":3909,"src":"1956:495:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3639,"nodeType":"Block","src":"2497:427:11","statements":[{"assignments":[3614],"declarations":[{"constant":false,"id":3614,"name":"_reEntryFun","nodeType":"VariableDeclaration","scope":3639,"src":"2507:25:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3613,"name":"string","nodeType":"ElementaryTypeName","src":"2507:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"id":3616,"initialValue":{"argumentTypes":null,"id":3615,"name":"reEntryFun","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3562,"src":"2535:10:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2507:38:11"},{"condition":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3618,"name":"_reEntryFun","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3614,"src":"2574:11:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"argumentTypes":null,"id":3619,"name":"funName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"2587:7:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":3617,"name":"compareStrings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3666,"src":"2559:14:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$","typeString":"function (string memory,string memory) pure returns (bool)"}},"id":3620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2559:36:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":3637,"nodeType":"IfStatement","src":"2555:351:11","trueBody":{"id":3636,"nodeType":"Block","src":"2597:309:11","statements":[{"expression":{"argumentTypes":null,"id":3623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3621,"name":"reEntryFun","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3562,"src":"2611:10:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"hexValue":"","id":3622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2624:2:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"src":"2611:15:11","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3624,"nodeType":"ExpressionStatement","src":"2611:15:11"},{"assignments":[3626,3628],"declarations":[{"constant":false,"id":3626,"name":"success","nodeType":"VariableDeclaration","scope":3636,"src":"2663:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3625,"name":"bool","nodeType":"ElementaryTypeName","src":"2663:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"},{"constant":false,"id":3628,"name":"returndata","nodeType":"VariableDeclaration","scope":3636,"src":"2677:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3627,"name":"bytes","nodeType":"ElementaryTypeName","src":"2677:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":null,"visibility":"internal"}],"id":3634,"initialValue":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3632,"name":"reEntryCallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3560,"src":"2720:15:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}],"expression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3629,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"2704:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2704:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","referencedDeclaration":null,"src":"2704:15:11","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":3633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2704:32:11","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2662:74:11"},{"externalReferences":[{"success":{"declaration":3626,"isOffset":false,"isSlot":false,"src":"2783:7:11","valueSize":1}},{"returndata":{"declaration":3628,"isOffset":false,"isSlot":false,"src":"2828:10:11","valueSize":1}}],"id":3635,"nodeType":"InlineAssembly","operations":"{\n    if eq(success, 0)\n    {\n        revert(add(returndata, 0x20), returndatasize())\n    }\n}","src":"2750:146:11"}]}},{"id":3638,"nodeType":"PlaceholderStatement","src":"2916:1:11"}]},"documentation":null,"id":3640,"name":"reEnter","nodeType":"ModifierDefinition","parameters":{"id":3612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3611,"name":"funName","nodeType":"VariableDeclaration","scope":3640,"src":"2474:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3610,"name":"string","nodeType":"ElementaryTypeName","src":"2474:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"2473:23:11"},"src":"2457:467:11","visibility":"internal"},{"body":{"id":3665,"nodeType":"Block","src":"3017:92:11","statements":[{"expression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"components":[{"argumentTypes":null,"id":3652,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3642,"src":"3062:1:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":3653,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3061:3:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"argumentTypes":null,"id":3650,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"3044:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3044:16:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3044:21:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3649,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"3034:9:11","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3034:32:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"components":[{"argumentTypes":null,"id":3659,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3644,"src":"3098:1:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":3660,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3097:3:11","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"argumentTypes":null,"id":3657,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4017,"src":"3080:3:11","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3658,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3080:16:11","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3080:21:11","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3656,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4024,"src":"3070:9:11","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3070:32:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3034:68:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3648,"id":3664,"nodeType":"Return","src":"3027:75:11"}]},"documentation":null,"id":3666,"implemented":true,"kind":"function","modifiers":[],"name":"compareStrings","nodeType":"FunctionDefinition","parameters":{"id":3645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3642,"name":"a","nodeType":"VariableDeclaration","scope":3666,"src":"2954:15:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3641,"name":"string","nodeType":"ElementaryTypeName","src":"2954:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"},{"constant":false,"id":3644,"name":"b","nodeType":"VariableDeclaration","scope":3666,"src":"2971:15:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3643,"name":"string","nodeType":"ElementaryTypeName","src":"2971:6:11","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"2953:34:11"},"returnParameters":{"id":3648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3647,"name":"","nodeType":"VariableDeclaration","scope":3666,"src":"3011:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3646,"name":"bool","nodeType":"ElementaryTypeName","src":"3011:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"3010:6:11"},"scope":3909,"src":"2930:179:11","stateMutability":"pure","superFunction":null,"visibility":"internal"},{"body":{"id":3691,"nodeType":"Block","src":"3173:128:11","statements":[{"expression":{"argumentTypes":null,"id":3677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3673,"name":"balanceOf_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3558,"src":"3183:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3675,"indexExpression":{"argumentTypes":null,"id":3674,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3668,"src":"3194:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3183:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"argumentTypes":null,"id":3676,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3670,"src":"3205:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3183:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3678,"nodeType":"ExpressionStatement","src":"3183:27:11"},{"expression":{"argumentTypes":null,"id":3681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3679,"name":"totalSupply_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"3220:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"argumentTypes":null,"id":3680,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3670,"src":"3236:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3220:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3682,"nodeType":"ExpressionStatement","src":"3220:21:11"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3685,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4094,"src":"3273:4:11","typeDescriptions":{"typeIdentifier":"t_contract$_FaucetTokenReEntrantHarness_$3909","typeString":"contract FaucetTokenReEntrantHarness"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_FaucetTokenReEntrantHarness_$3909","typeString":"contract FaucetTokenReEntrantHarness"}],"id":3684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3265:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":3686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3265:13:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3687,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3668,"src":"3280:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3688,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3670,"src":"3288:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3683,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"3256:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3256:38:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3690,"nodeType":"EmitStatement","src":"3251:43:11"}]},"documentation":null,"id":3692,"implemented":true,"kind":"function","modifiers":[],"name":"allocateTo","nodeType":"FunctionDefinition","parameters":{"id":3671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3668,"name":"_owner","nodeType":"VariableDeclaration","scope":3692,"src":"3135:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3667,"name":"address","nodeType":"ElementaryTypeName","src":"3135:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3670,"name":"value","nodeType":"VariableDeclaration","scope":3692,"src":"3151:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3669,"name":"uint256","nodeType":"ElementaryTypeName","src":"3151:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3134:31:11"},"returnParameters":{"id":3672,"nodeType":"ParameterList","parameters":[],"src":"3173:0:11"},"scope":3909,"src":"3115:186:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3702,"nodeType":"Block","src":"3378:36:11","statements":[{"expression":{"argumentTypes":null,"id":3700,"name":"totalSupply_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"3395:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3699,"id":3701,"nodeType":"Return","src":"3388:19:11"}]},"documentation":null,"id":3703,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"argumentTypes":null,"hexValue":"746f74616c537570706c79","id":3695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3345:13:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_7c80aa9fdbfaf9615e4afc7f5f722e265daca5ccc655360fa5ccacf9c267936d","typeString":"literal_string \"totalSupply\""},"value":"totalSupply"}],"id":3696,"modifierName":{"argumentTypes":null,"id":3694,"name":"reEnter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"3337:7:11","typeDescriptions":{"typeIdentifier":"t_modifier$_t_string_memory_ptr_$","typeString":"modifier (string memory)"}},"nodeType":"ModifierInvocation","src":"3337:22:11"}],"name":"totalSupply","nodeType":"FunctionDefinition","parameters":{"id":3693,"nodeType":"ParameterList","parameters":[],"src":"3327:2:11"},"returnParameters":{"id":3699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3698,"name":"","nodeType":"VariableDeclaration","scope":3703,"src":"3369:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3697,"name":"uint256","nodeType":"ElementaryTypeName","src":"3369:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3368:9:11"},"scope":3909,"src":"3307:107:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3721,"nodeType":"Block","src":"3527:50:11","statements":[{"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3715,"name":"allowance_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3554,"src":"3544:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3717,"indexExpression":{"argumentTypes":null,"id":3716,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3705,"src":"3555:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3544:17:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3719,"indexExpression":{"argumentTypes":null,"id":3718,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3707,"src":"3562:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3544:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3714,"id":3720,"nodeType":"Return","src":"3537:33:11"}]},"documentation":null,"id":3722,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"argumentTypes":null,"hexValue":"616c6c6f77616e6365","id":3710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3486:11:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_c9e888a1026b19c8c0b57c72d63ed1737106aa10034105b980ba117bd0c29fe1","typeString":"literal_string \"allowance\""},"value":"allowance"}],"id":3711,"modifierName":{"argumentTypes":null,"id":3709,"name":"reEnter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"3478:7:11","typeDescriptions":{"typeIdentifier":"t_modifier$_t_string_memory_ptr_$","typeString":"modifier (string memory)"}},"nodeType":"ModifierInvocation","src":"3478:20:11"}],"name":"allowance","nodeType":"FunctionDefinition","parameters":{"id":3708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3705,"name":"owner","nodeType":"VariableDeclaration","scope":3722,"src":"3439:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3704,"name":"address","nodeType":"ElementaryTypeName","src":"3439:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3707,"name":"spender","nodeType":"VariableDeclaration","scope":3722,"src":"3454:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3706,"name":"address","nodeType":"ElementaryTypeName","src":"3454:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"3438:32:11"},"returnParameters":{"id":3714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3713,"name":"remaining","nodeType":"VariableDeclaration","scope":3722,"src":"3508:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3712,"name":"uint256","nodeType":"ElementaryTypeName","src":"3508:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3507:19:11"},"scope":3909,"src":"3420:157:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3743,"nodeType":"Block","src":"3682:75:11","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3735,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"3701:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"3701:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":3737,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3724,"src":"3713:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3738,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3726,"src":"3722:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3734,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"3692:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3692:37:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3740,"nodeType":"ExpressionStatement","src":"3692:37:11"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":3741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3746:4:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3733,"id":3742,"nodeType":"Return","src":"3739:11:11"}]},"documentation":null,"id":3744,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"argumentTypes":null,"hexValue":"617070726f7665","id":3729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3648:9:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_5219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c","typeString":"literal_string \"approve\""},"value":"approve"}],"id":3730,"modifierName":{"argumentTypes":null,"id":3728,"name":"reEnter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"3640:7:11","typeDescriptions":{"typeIdentifier":"t_modifier$_t_string_memory_ptr_$","typeString":"modifier (string memory)"}},"nodeType":"ModifierInvocation","src":"3640:18:11"}],"name":"approve","nodeType":"FunctionDefinition","parameters":{"id":3727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3724,"name":"spender","nodeType":"VariableDeclaration","scope":3744,"src":"3600:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3723,"name":"address","nodeType":"ElementaryTypeName","src":"3600:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3726,"name":"amount","nodeType":"VariableDeclaration","scope":3744,"src":"3617:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3725,"name":"uint256","nodeType":"ElementaryTypeName","src":"3617:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3599:33:11"},"returnParameters":{"id":3733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3732,"name":"success","nodeType":"VariableDeclaration","scope":3744,"src":"3668:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3731,"name":"bool","nodeType":"ElementaryTypeName","src":"3668:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"3667:14:11"},"scope":3909,"src":"3583:174:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3758,"nodeType":"Block","src":"3851:41:11","statements":[{"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3754,"name":"balanceOf_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3558,"src":"3868:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3756,"indexExpression":{"argumentTypes":null,"id":3755,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3746,"src":"3879:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3868:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3753,"id":3757,"nodeType":"Return","src":"3861:24:11"}]},"documentation":null,"id":3759,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"argumentTypes":null,"hexValue":"62616c616e63654f66","id":3749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3812:11:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_e2e4263afad30923c891518314c3c95dbe830a16874e8abc5777a9a20b54c76e","typeString":"literal_string \"balanceOf\""},"value":"balanceOf"}],"id":3750,"modifierName":{"argumentTypes":null,"id":3748,"name":"reEnter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"3804:7:11","typeDescriptions":{"typeIdentifier":"t_modifier$_t_string_memory_ptr_$","typeString":"modifier (string memory)"}},"nodeType":"ModifierInvocation","src":"3804:20:11"}],"name":"balanceOf","nodeType":"FunctionDefinition","parameters":{"id":3747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3746,"name":"owner","nodeType":"VariableDeclaration","scope":3759,"src":"3782:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3745,"name":"address","nodeType":"ElementaryTypeName","src":"3782:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"}],"src":"3781:15:11"},"returnParameters":{"id":3753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3752,"name":"balance","nodeType":"VariableDeclaration","scope":3759,"src":"3834:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3751,"name":"uint256","nodeType":"ElementaryTypeName","src":"3834:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3833:17:11"},"scope":3909,"src":"3763:129:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3780,"nodeType":"Block","src":"3995:72:11","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3772,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"4015:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"4015:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"id":3774,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3761,"src":"4027:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3775,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3763,"src":"4032:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3771,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3908,"src":"4005:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4005:34:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3777,"nodeType":"ExpressionStatement","src":"4005:34:11"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":3778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4056:4:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3770,"id":3779,"nodeType":"Return","src":"4049:11:11"}]},"documentation":null,"id":3781,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"argumentTypes":null,"hexValue":"7472616e73666572","id":3766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3960:10:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_b483afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e","typeString":"literal_string \"transfer\""},"value":"transfer"}],"id":3767,"modifierName":{"argumentTypes":null,"id":3765,"name":"reEnter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"3952:7:11","typeDescriptions":{"typeIdentifier":"t_modifier$_t_string_memory_ptr_$","typeString":"modifier (string memory)"}},"nodeType":"ModifierInvocation","src":"3952:19:11"}],"name":"transfer","nodeType":"FunctionDefinition","parameters":{"id":3764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3761,"name":"dst","nodeType":"VariableDeclaration","scope":3781,"src":"3916:11:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3760,"name":"address","nodeType":"ElementaryTypeName","src":"3916:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3763,"name":"amount","nodeType":"VariableDeclaration","scope":3781,"src":"3929:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3762,"name":"uint256","nodeType":"ElementaryTypeName","src":"3929:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3915:29:11"},"returnParameters":{"id":3770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3769,"name":"success","nodeType":"VariableDeclaration","scope":3781,"src":"3981:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3768,"name":"bool","nodeType":"ElementaryTypeName","src":"3981:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"3980:14:11"},"scope":3909,"src":"3898:169:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3818,"nodeType":"Block","src":"4221:141:11","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3796,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3783,"src":"4241:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3797,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3785,"src":"4246:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3798,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3787,"src":"4251:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3795,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3908,"src":"4231:9:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4231:27:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3800,"nodeType":"ExpressionStatement","src":"4231:27:11"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3802,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3783,"src":"4277:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3803,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"4282:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"4282:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3812,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3787,"src":"4326:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3805,"name":"allowance_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3554,"src":"4294:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3807,"indexExpression":{"argumentTypes":null,"id":3806,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3783,"src":"4305:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4294:15:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3810,"indexExpression":{"argumentTypes":null,"expression":{"argumentTypes":null,"id":3808,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4030,"src":"4310:3:11","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":null,"src":"4310:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4294:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2614,"src":"4294:31:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4294:39:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3801,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"4268:8:11","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4268:66:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3815,"nodeType":"ExpressionStatement","src":"4268:66:11"},{"expression":{"argumentTypes":null,"hexValue":"74727565","id":3816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4351:4:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3794,"id":3817,"nodeType":"Return","src":"4344:11:11"}]},"documentation":null,"id":3819,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"argumentTypes":null,"hexValue":"7472616e7366657246726f6d","id":3790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4182:14:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_0c41b033f4a31df8067c24d1e9b550a2ce75fd4a29e1147af9752174f0e6cb20","typeString":"literal_string \"transferFrom\""},"value":"transferFrom"}],"id":3791,"modifierName":{"argumentTypes":null,"id":3789,"name":"reEnter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"4174:7:11","typeDescriptions":{"typeIdentifier":"t_modifier$_t_string_memory_ptr_$","typeString":"modifier (string memory)"}},"nodeType":"ModifierInvocation","src":"4174:23:11"}],"name":"transferFrom","nodeType":"FunctionDefinition","parameters":{"id":3788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3783,"name":"src","nodeType":"VariableDeclaration","scope":3819,"src":"4104:11:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3782,"name":"address","nodeType":"ElementaryTypeName","src":"4104:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3785,"name":"dst","nodeType":"VariableDeclaration","scope":3819,"src":"4125:11:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3784,"name":"address","nodeType":"ElementaryTypeName","src":"4125:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3787,"name":"amount","nodeType":"VariableDeclaration","scope":3819,"src":"4146:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3786,"name":"uint256","nodeType":"ElementaryTypeName","src":"4146:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4094:72:11"},"returnParameters":{"id":3794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3793,"name":"success","nodeType":"VariableDeclaration","scope":3819,"src":"4207:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3792,"name":"bool","nodeType":"ElementaryTypeName","src":"4207:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"4206:14:11"},"scope":3909,"src":"4073:289:11","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3860,"nodeType":"Block","src":"4443:244:11","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":3829,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3823,"src":"4461:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":3831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4480:1:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4472:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":3832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4472:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"4461:21:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"73656e6465722073686f756c642062652076616c69642061646472657373","id":3834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4484:32:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_b0d442da7f6ff5129976da38398a3a765862e29bb25957667b3fa260bd2e1d29","typeString":"literal_string \"sender should be valid address\""},"value":"sender should be valid address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b0d442da7f6ff5129976da38398a3a765862e29bb25957667b3fa260bd2e1d29","typeString":"literal_string \"sender should be valid address\""}],"id":3828,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"4453:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4453:64:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3836,"nodeType":"ExpressionStatement","src":"4453:64:11"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":3838,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3821,"src":"4535:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":3840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4552:1:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4544:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":3841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4544:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"4535:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"6f776e65722073686f756c642062652076616c69642061646472657373","id":3843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4556:31:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_dac2445ecbf828f60f70e8df77551c66a08c609deb6d3d8f143c02b7c252cfe9","typeString":"literal_string \"owner should be valid address\""},"value":"owner should be valid address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_dac2445ecbf828f60f70e8df77551c66a08c609deb6d3d8f143c02b7c252cfe9","typeString":"literal_string \"owner should be valid address\""}],"id":3837,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"4527:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4527:61:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3845,"nodeType":"ExpressionStatement","src":"4527:61:11"},{"expression":{"argumentTypes":null,"id":3852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3846,"name":"allowance_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3554,"src":"4598:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3849,"indexExpression":{"argumentTypes":null,"id":3847,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3821,"src":"4609:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4598:17:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3850,"indexExpression":{"argumentTypes":null,"id":3848,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3823,"src":"4616:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4598:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3851,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3825,"src":"4627:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4598:35:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3853,"nodeType":"ExpressionStatement","src":"4598:35:11"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3855,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3821,"src":"4657:5:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3856,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3823,"src":"4664:7:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3857,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3825,"src":"4673:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3854,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3540,"src":"4648:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4648:32:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3859,"nodeType":"EmitStatement","src":"4643:37:11"}]},"documentation":null,"id":3861,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nodeType":"FunctionDefinition","parameters":{"id":3826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3821,"name":"owner","nodeType":"VariableDeclaration","scope":3861,"src":"4386:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3820,"name":"address","nodeType":"ElementaryTypeName","src":"4386:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3823,"name":"spender","nodeType":"VariableDeclaration","scope":3861,"src":"4401:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3822,"name":"address","nodeType":"ElementaryTypeName","src":"4401:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3825,"name":"amount","nodeType":"VariableDeclaration","scope":3861,"src":"4418:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3824,"name":"uint256","nodeType":"ElementaryTypeName","src":"4418:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4385:48:11"},"returnParameters":{"id":3827,"nodeType":"ParameterList","parameters":[],"src":"4443:0:11"},"scope":3909,"src":"4368:319:11","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"},{"body":{"id":3907,"nodeType":"Block","src":"4763:225:11","statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":3871,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3865,"src":"4781:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"hexValue":"30","id":3873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4796:1:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3872,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4788:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":"address"},"id":3874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4788:10:11","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"4781:17:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"6473742073686f756c642062652076616c69642061646472657373","id":3876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4800:29:11","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_5d478487e45925463b7d5056bab795fef193e515b77d3959290e478b05660790","typeString":"literal_string \"dst should be valid address\""},"value":"dst should be valid address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5d478487e45925463b7d5056bab795fef193e515b77d3959290e478b05660790","typeString":"literal_string \"dst should be valid address\""}],"id":3870,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"4773:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4773:57:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3878,"nodeType":"ExpressionStatement","src":"4773:57:11"},{"expression":{"argumentTypes":null,"id":3888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3879,"name":"balanceOf_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3558,"src":"4840:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3881,"indexExpression":{"argumentTypes":null,"id":3880,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"4851:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4840:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3886,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"4878:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3882,"name":"balanceOf_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3558,"src":"4858:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3884,"indexExpression":{"argumentTypes":null,"id":3883,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"4869:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4858:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2614,"src":"4858:19:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4858:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4840:45:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3889,"nodeType":"ExpressionStatement","src":"4840:45:11"},{"expression":{"argumentTypes":null,"id":3899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3890,"name":"balanceOf_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3558,"src":"4895:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3892,"indexExpression":{"argumentTypes":null,"id":3891,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3865,"src":"4906:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4895:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3897,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"4933:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"argumentTypes":null,"baseExpression":{"argumentTypes":null,"id":3893,"name":"balanceOf_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3558,"src":"4913:10:11","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3895,"indexExpression":{"argumentTypes":null,"id":3894,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3865,"src":"4924:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4913:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2571,"src":"4913:19:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4913:27:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4895:45:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3900,"nodeType":"ExpressionStatement","src":"4895:45:11"},{"eventCall":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3902,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"4964:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3903,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3865,"src":"4969:3:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"argumentTypes":null,"id":3904,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3867,"src":"4974:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3901,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3532,"src":"4955:8:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4955:26:11","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3906,"nodeType":"EmitStatement","src":"4950:31:11"}]},"documentation":null,"id":3908,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nodeType":"FunctionDefinition","parameters":{"id":3868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3863,"name":"src","nodeType":"VariableDeclaration","scope":3908,"src":"4712:11:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3862,"name":"address","nodeType":"ElementaryTypeName","src":"4712:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3865,"name":"dst","nodeType":"VariableDeclaration","scope":3908,"src":"4725:11:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3864,"name":"address","nodeType":"ElementaryTypeName","src":"4725:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":null,"visibility":"internal"},{"constant":false,"id":3867,"name":"amount","nodeType":"VariableDeclaration","scope":3908,"src":"4738:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3866,"name":"uint256","nodeType":"ElementaryTypeName","src":"4738:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4711:42:11"},"returnParameters":{"id":3869,"nodeType":"ParameterList","parameters":[],"src":"4763:0:11"},"scope":3909,"src":"4693:295:11","stateMutability":"nonpayable","superFunction":null,"visibility":"internal"}],"scope":3910,"src":"1415:3575:11"}],"src":"0:4991:11"},"id":11},"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol":{"ast":{"absolutePath":"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol","exportedSymbols":{"InterestRateModelHarness":[4005]},"id":4006,"nodeType":"SourceUnit","nodes":[{"id":3911,"literals":["solidity","^","0.5",".16"],"nodeType":"PragmaDirective","src":"0:24:12"},{"absolutePath":"@venusprotocol/venus-protocol/contracts/InterestRateModels/InterestRateModel.sol","file":"../InterestRateModels/InterestRateModel.sol","id":3912,"nodeType":"ImportDirective","scope":4006,"sourceUnit":2054,"src":"26:53:12","symbolAliases":[],"unitAlias":""},{"baseContracts":[{"arguments":null,"baseName":{"contractScope":null,"id":3913,"name":"InterestRateModel","nodeType":"UserDefinedTypeName","referencedDeclaration":2053,"src":"260:17:12","typeDescriptions":{"typeIdentifier":"t_contract$_InterestRateModel_$2053","typeString":"contract InterestRateModel"}},"id":3914,"nodeType":"InheritanceSpecifier","src":"260:17:12"}],"contractDependencies":[2053],"contractKind":"contract","documentation":"@title An Interest Rate Model for tests that can be instructed to return a failure instead of doing a calculation\n@author Venus","fullyImplemented":true,"id":4005,"linearizedBaseContracts":[4005,2053],"name":"InterestRateModelHarness","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":3917,"name":"opaqueBorrowFailureCode","nodeType":"VariableDeclaration","scope":4005,"src":"284:49:12","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3915,"name":"uint","nodeType":"ElementaryTypeName","src":"284:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"argumentTypes":null,"hexValue":"3230","id":3916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"331:2:12","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"public"},{"constant":false,"id":3919,"name":"failBorrowRate","nodeType":"VariableDeclaration","scope":4005,"src":"339:26:12","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3918,"name":"bool","nodeType":"ElementaryTypeName","src":"339:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"public"},{"constant":false,"id":3921,"name":"borrowRate","nodeType":"VariableDeclaration","scope":4005,"src":"371:22:12","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3920,"name":"uint","nodeType":"ElementaryTypeName","src":"371:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"public"},{"body":{"id":3930,"nodeType":"Block","src":"437:41:12","statements":[{"expression":{"argumentTypes":null,"id":3928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3926,"name":"borrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3921,"src":"447:10:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3927,"name":"borrowRate_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3923,"src":"460:11:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"447:24:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3929,"nodeType":"ExpressionStatement","src":"447:24:12"}]},"documentation":null,"id":3931,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nodeType":"FunctionDefinition","parameters":{"id":3924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3923,"name":"borrowRate_","nodeType":"VariableDeclaration","scope":3931,"src":"412:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3922,"name":"uint","nodeType":"ElementaryTypeName","src":"412:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"411:18:12"},"returnParameters":{"id":3925,"nodeType":"ParameterList","parameters":[],"src":"437:0:12"},"scope":4005,"src":"400:78:12","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3940,"nodeType":"Block","src":"540:49:12","statements":[{"expression":{"argumentTypes":null,"id":3938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3936,"name":"failBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3919,"src":"550:14:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3937,"name":"failBorrowRate_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3933,"src":"567:15:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"550:32:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3939,"nodeType":"ExpressionStatement","src":"550:32:12"}]},"documentation":null,"id":3941,"implemented":true,"kind":"function","modifiers":[],"name":"setFailBorrowRate","nodeType":"FunctionDefinition","parameters":{"id":3934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3933,"name":"failBorrowRate_","nodeType":"VariableDeclaration","scope":3941,"src":"511:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3932,"name":"bool","nodeType":"ElementaryTypeName","src":"511:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"value":null,"visibility":"internal"}],"src":"510:22:12"},"returnParameters":{"id":3935,"nodeType":"ParameterList","parameters":[],"src":"540:0:12"},"scope":4005,"src":"484:105:12","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3950,"nodeType":"Block","src":"643:41:12","statements":[{"expression":{"argumentTypes":null,"id":3948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"argumentTypes":null,"id":3946,"name":"borrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3921,"src":"653:10:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"argumentTypes":null,"id":3947,"name":"borrowRate_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3943,"src":"666:11:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"653:24:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3949,"nodeType":"ExpressionStatement","src":"653:24:12"}]},"documentation":null,"id":3951,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowRate","nodeType":"FunctionDefinition","parameters":{"id":3944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3943,"name":"borrowRate_","nodeType":"VariableDeclaration","scope":3951,"src":"618:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3942,"name":"uint","nodeType":"ElementaryTypeName","src":"618:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"617:18:12"},"returnParameters":{"id":3945,"nodeType":"ParameterList","parameters":[],"src":"643:0:12"},"scope":4005,"src":"595:89:12","stateMutability":"nonpayable","superFunction":null,"visibility":"public"},{"body":{"id":3976,"nodeType":"Block","src":"783:179:12","statements":[{"expression":{"argumentTypes":null,"id":3962,"name":"_cash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3953,"src":"793:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3963,"nodeType":"ExpressionStatement","src":"793:5:12"},{"expression":{"argumentTypes":null,"id":3964,"name":"_borrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3955,"src":"818:8:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3965,"nodeType":"ExpressionStatement","src":"818:8:12"},{"expression":{"argumentTypes":null,"id":3966,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3957,"src":"846:9:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3967,"nodeType":"ExpressionStatement","src":"846:9:12"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":3970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"883:15:12","subExpression":{"argumentTypes":null,"id":3969,"name":"failBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3919,"src":"884:14:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"494e5445524553545f524154455f4d4f44454c5f4552524f52","id":3971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"900:27:12","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_c193b492ff3564a03a2bf5a54f2008a6e8653a97c338b06ef6a49dbbcdb1442e","typeString":"literal_string \"INTEREST_RATE_MODEL_ERROR\""},"value":"INTEREST_RATE_MODEL_ERROR"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c193b492ff3564a03a2bf5a54f2008a6e8653a97c338b06ef6a49dbbcdb1442e","typeString":"literal_string \"INTEREST_RATE_MODEL_ERROR\""}],"id":3968,"name":"require","nodeType":"Identifier","overloadedDeclarations":[4033,4034],"referencedDeclaration":4034,"src":"875:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":3972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"875:53:12","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3973,"nodeType":"ExpressionStatement","src":"875:53:12"},{"expression":{"argumentTypes":null,"id":3974,"name":"borrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3921,"src":"945:10:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3961,"id":3975,"nodeType":"Return","src":"938:17:12"}]},"documentation":null,"id":3977,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowRate","nodeType":"FunctionDefinition","parameters":{"id":3958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3953,"name":"_cash","nodeType":"VariableDeclaration","scope":3977,"src":"713:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3952,"name":"uint","nodeType":"ElementaryTypeName","src":"713:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3955,"name":"_borrows","nodeType":"VariableDeclaration","scope":3977,"src":"725:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3954,"name":"uint","nodeType":"ElementaryTypeName","src":"725:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3957,"name":"_reserves","nodeType":"VariableDeclaration","scope":3977,"src":"740:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3956,"name":"uint","nodeType":"ElementaryTypeName","src":"740:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"712:43:12"},"returnParameters":{"id":3961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3960,"name":"","nodeType":"VariableDeclaration","scope":3977,"src":"777:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3959,"name":"uint","nodeType":"ElementaryTypeName","src":"777:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"776:6:12"},"scope":4005,"src":"690:272:12","stateMutability":"view","superFunction":2039,"visibility":"public"},{"body":{"id":4003,"nodeType":"Block","src":"1122:139:12","statements":[{"expression":{"argumentTypes":null,"id":3990,"name":"_cash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3979,"src":"1132:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3991,"nodeType":"ExpressionStatement","src":"1132:5:12"},{"expression":{"argumentTypes":null,"id":3992,"name":"_borrows","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3981,"src":"1157:8:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3993,"nodeType":"ExpressionStatement","src":"1157:8:12"},{"expression":{"argumentTypes":null,"id":3994,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3983,"src":"1185:9:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3995,"nodeType":"ExpressionStatement","src":"1185:9:12"},{"expression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":3996,"name":"borrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3921,"src":"1221:10:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"argumentTypes":null,"components":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"hexValue":"31","id":3997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1235:1:12","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"argumentTypes":null,"id":3998,"name":"_reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3985,"src":"1239:14:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1235:18:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4000,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1234:20:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1221:33:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3989,"id":4002,"nodeType":"Return","src":"1214:40:12"}]},"documentation":null,"id":4004,"implemented":true,"kind":"function","modifiers":[],"name":"getSupplyRate","nodeType":"FunctionDefinition","parameters":{"id":3986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3979,"name":"_cash","nodeType":"VariableDeclaration","scope":4004,"src":"1000:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3978,"name":"uint","nodeType":"ElementaryTypeName","src":"1000:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3981,"name":"_borrows","nodeType":"VariableDeclaration","scope":4004,"src":"1020:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3980,"name":"uint","nodeType":"ElementaryTypeName","src":"1020:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3983,"name":"_reserves","nodeType":"VariableDeclaration","scope":4004,"src":"1043:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3982,"name":"uint","nodeType":"ElementaryTypeName","src":"1043:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":3985,"name":"_reserveFactor","nodeType":"VariableDeclaration","scope":4004,"src":"1067:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3984,"name":"uint","nodeType":"ElementaryTypeName","src":"1067:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"990:102:12"},"returnParameters":{"id":3989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3988,"name":"","nodeType":"VariableDeclaration","scope":4004,"src":"1116:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3987,"name":"uint","nodeType":"ElementaryTypeName","src":"1116:4:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1115:6:12"},"scope":4005,"src":"968:293:12","stateMutability":"view","superFunction":2052,"visibility":"external"}],"scope":4006,"src":"223:1040:12"}],"src":"0:1264:12"},"id":12},"contracts/test/Imports-legacy.sol":{"ast":{"absolutePath":"contracts/test/Imports-legacy.sol","exportedSymbols":{},"id":4016,"nodeType":"SourceUnit","nodes":[{"absolutePath":"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol","file":"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol","id":4008,"nodeType":"ImportDirective","scope":4016,"sourceUnit":4006,"src":"0:117:13","symbolAliases":[{"foreign":4007,"local":null}],"unitAlias":""},{"id":4009,"literals":["solidity","0.5",".16"],"nodeType":"PragmaDirective","src":"159:23:13"},{"absolutePath":"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol","file":"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol","id":4011,"nodeType":"ImportDirective","scope":4016,"sourceUnit":4006,"src":"184:117:13","symbolAliases":[{"foreign":4010,"local":null}],"unitAlias":""},{"absolutePath":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol","file":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol","id":4013,"nodeType":"ImportDirective","scope":4016,"sourceUnit":3910,"src":"302:91:13","symbolAliases":[{"foreign":4012,"local":null}],"unitAlias":""},{"absolutePath":"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol","file":"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol","id":4015,"nodeType":"ImportDirective","scope":4016,"sourceUnit":2024,"src":"394:93:13","symbolAliases":[{"foreign":4014,"local":null}],"unitAlias":""}],"src":"0:488:13"},"id":13}},"contracts":{"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol":{"GovernorBravoDelegate":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGuardian","type":"address"},{"indexed":false,"internalType":"address","name":"newGuardian","type":"address"}],"name":"NewGuardian","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"},{"indexed":false,"internalType":"uint8","name":"proposalType","type":"uint8"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxOperations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxOperations","type":"uint256"}],"name":"ProposalMaxOperationsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldProposalThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"ProposalThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"votingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalThreshold","type":"uint256"}],"name":"SetProposalConfigs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldmaxVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldminVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newminVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldmaxVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxVotingDelay","type":"uint256"}],"name":"SetValidationParams","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"support","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingDelay","type":"uint256"}],"name":"VotingDelaySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingPeriod","type":"uint256"}],"name":"VotingPeriodSet","type":"event"},{"constant":true,"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"governorAlpha","type":"address"}],"name":"_initiate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newGuardian","type":"address"}],"name":"_setGuardian","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalMaxOperations_","type":"uint256"}],"name":"_setProposalMaxOperations","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"}],"name":"castVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"string","name":"reason","type":"string"}],"name":"castVoteWithReason","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct GovernorBravoDelegateStorageV1.Receipt","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialProposalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"xvsVault_","type":"address"},{"components":[{"internalType":"uint256","name":"minVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"maxVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"minVotingDelay","type":"uint256"},{"internalType":"uint256","name":"maxVotingDelay","type":"uint256"}],"internalType":"struct GovernorBravoDelegateStorageV3.ValidationParams","name":"validationParams_","type":"tuple"},{"components":[{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold","type":"uint256"}],"internalType":"struct GovernorBravoDelegateStorageV2.ProposalConfig[]","name":"proposalConfigs_","type":"tuple[]"},{"internalType":"contract TimelockInterface[]","name":"timelocks","type":"address[]"},{"internalType":"address","name":"guardian_","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalConfigs","outputs":[{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalTimelocks","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint8","name":"proposalType","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"},{"internalType":"enum GovernorBravoDelegateStorageV2.ProposalType","name":"proposalType","type":"uint8"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold","type":"uint256"}],"internalType":"struct GovernorBravoDelegateStorageV2.ProposalConfig[]","name":"proposalConfigs_","type":"tuple[]"}],"name":"setProposalConfigs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"uint256","name":"minVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"maxVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"minVotingDelay","type":"uint256"},{"internalType":"uint256","name":"maxVotingDelay","type":"uint256"}],"internalType":"struct GovernorBravoDelegateStorageV3.ValidationParams","name":"newValidationParams","type":"tuple"}],"name":"setValidationParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum GovernorBravoDelegateStorageV1.ProposalState","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"validationParams","outputs":[{"internalType":"uint256","name":"minVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"maxVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"minVotingDelay","type":"uint256"},{"internalType":"uint256","name":"maxVotingDelay","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"xvsVault","outputs":[{"internalType":"contract XvsVaultInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"methods":{"_acceptAdmin()":{"details":"Admin function for pending admin to accept role and update admin"},"_initiate(address)":{"details":"Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count","params":{"governorAlpha":"The address for the Governor to continue the proposal id count from"}},"_setGuardian(address)":{"params":{"newGuardian":"the address of the new guardian"}},"_setPendingAdmin(address)":{"details":"Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.","params":{"newPendingAdmin":"New pending admin."}},"_setProposalMaxOperations(uint256)":{"details":"Admin only.","params":{"proposalMaxOperations_":"Max proposal operations"}},"cancel(uint256)":{"params":{"proposalId":"The id of the proposal to cancel"}},"castVote(uint256,uint8)":{"params":{"proposalId":"The id of the proposal to vote on","support":"The support value for the vote. 0=against, 1=for, 2=abstain"}},"castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)":{"details":"External function that accepts EIP-712 signatures for voting on proposals.","params":{"proposalId":"The id of the proposal to vote on","r":"part of the ECDSA sig output","s":"part of the ECDSA sig output","support":"The support value for the vote. 0=against, 1=for, 2=abstain","v":"recovery id of ECDSA signature"}},"castVoteWithReason(uint256,uint8,string)":{"params":{"proposalId":"The id of the proposal to vote on","reason":"The reason given for the vote by the voter","support":"The support value for the vote. 0=against, 1=for, 2=abstain"}},"execute(uint256)":{"params":{"proposalId":"The id of the proposal to execute"}},"getActions(uint256)":{"params":{"proposalId":"the id of the proposal"},"return":"targets, values, signatures, and calldatas of the proposal actions"},"getReceipt(uint256,address)":{"params":{"proposalId":"the id of proposal","voter":"The address of the voter"},"return":"The voting receipt"},"initialize(address,(uint256,uint256,uint256,uint256),(uint256,uint256,uint256)[],address[],address)":{"params":{"proposalConfigs_":"Governance configs for each governance route","timelocks":"Timelock addresses for each governance route","xvsVault_":"The address of the XvsVault"}},"propose(address[],uint256[],string[],bytes[],string,uint8)":{"details":"NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists of duplicate actions, it's recommended to split those actions into separate proposals","params":{"calldatas":"Calldatas for proposal calls","description":"String description of the proposal","proposalType":"the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)","signatures":"Function signatures for proposal calls","targets":"Target addresses for proposal calls","values":"BNB values for proposal calls"},"return":"Proposal id of new proposal"},"queue(uint256)":{"params":{"proposalId":"The id of the proposal to queue"}},"state(uint256)":{"params":{"proposalId":"The id of the proposal"},"return":"Proposal state"}},"title":"GovernorBravoDelegate"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50614f84806100206000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806346416f9211610146578063da35c664116100c3578063e9c714f211610087578063e9c714f2146104d5578063ee9799ee146104dd578063f851a440146104f0578063f9d28b80146104f8578063fc4eee421461050b578063fe0d94c11461051357610253565b8063da35c6641461047f578063ddf0b00914610487578063deaaa7cc1461049a578063e23a9a52146104a2578063e38e8c0f146104c257610253565b80637bdbe4d01161010a5780637bdbe4d014610441578063b58131b014610449578063b71d1a0c14610451578063bb08c32114610464578063d33219b41461047757610253565b806346416f92146103f8578063567813881461040b5780635c60da1b1461041e578063791f5d23146104265780637b3c71d31461042e57610253565b806325fd935a116101d45780633932abb1116101985780633932abb1146103a25780633bccf4fd146103aa5780633e4f49e6146103bd57806340e58ee5146103dd578063452a9320146103f057610253565b806325fd935a146103285780632678224714610330578063328dd9821461034557806334cf39091461036857806335a87de21461038057610253565b80631b9ce5751161021b5780631b9ce575146102db5780631e75adf2146102f05780631ebcfefd1461030557806320606b701461031857806324bc1a641461032057610253565b8063013cf08b1461025857806302a251a31461028b57806306fdde03146102a0578063164a1ab1146102b557806317977c61146102c8575b600080fd5b61026b610266366004613159565b610526565b6040516102829b9a99989796959493929190614bac565b60405180910390f35b610293610592565b6040516102829190614750565b6102a8610598565b6040516102829190614815565b6102936102c3366004612f9e565b6105c8565b6102936102d6366004612ed4565b610a86565b6102e3610a98565b60405161028291906147f9565b6103036102fe366004613097565b610aa7565b005b610303610313366004613159565b610d8d565b610293610dfd565b610293610e14565b610293610e22565b610338610e30565b6040516102829190614620565b610358610353366004613159565b610e3f565b6040516102829493929190614703565b6103706110ce565b6040516102829493929190614c86565b61039361038e366004613159565b6110dd565b60405161028293929190614c5e565b6102936110fe565b6103036103b8366004613248565b611104565b6103d06103cb366004613159565b6112dc565b6040516102829190614807565b6103036103eb366004613159565b611476565b61033861170c565b610303610406366004612efa565b61171b565b6103036104193660046131b1565b611925565b61033861196f565b61029361197e565b61030361043c3660046131e1565b61198c565b6102936119dc565b6102936119e2565b61030361045f366004612ed4565b6119e8565b61030361047236600461313b565b611a65565b6102e3611b5f565b610293611b6e565b610303610495366004613159565b611b74565b610293611e08565b6104b56104b0366004613177565b611e14565b6040516102829190614ae6565b6103036104d0366004612ed4565b611e81565b610303611f39565b6102e36104eb366004613159565b612017565b610338612032565b610303610506366004612ed4565b612041565b61029361218e565b610303610521366004613159565b612194565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c880154600e9098015496986001600160a01b039096169794969395929492939192909160ff808316926101009004811691168b565b60045481565b6040518060400160405280601481526020017356656e757320476f7665726e6f7220427261766f60601b81525081565b6000600654600014156105f65760405162461bcd60e51b81526004016105ed906148a6565b60405180910390fd5b600e600083600281111561060657fe5b60ff1681526020810191909152604001600020600201546009546001600160a01b031663782d6fe13361063a436001612347565b6040518363ffffffff1660e01b815260040161065792919061462e565b60206040518083038186803b15801561066f57600080fd5b505afa158015610683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106a791908101906132b0565b6001600160601b031610156106ce5760405162461bcd60e51b81526004016105ed90614a46565b855187511480156106e0575084518751145b80156106ed575083518751145b6107095760405162461bcd60e51b81526004016105ed90614916565b86516107275760405162461bcd60e51b81526004016105ed90614986565b600c548751111561074a5760405162461bcd60e51b81526004016105ed906149e6565b336000908152600b602052604090205480156107c757600061076b826112dc565b9050600181600781111561077b57fe5b14156107995760405162461bcd60e51b81526004016105ed90614a26565b60008160078111156107a757fe5b14156107c55760405162461bcd60e51b81526004016105ed906149f6565b505b60006107f743600e60008760028111156107dd57fe5b60ff1681526020019081526020016000206000015461236f565b9050600061082982600e600088600281111561080f57fe5b60ff1681526020019081526020016000206001015461236f565b600780546001019055905061083c61270e565b604051806101e001604052806007548152602001336001600160a01b03168152602001600081526020018c81526020018b81526020018a81526020018981526020018481526020018381526020016000815260200160008152602001600081526020016000151581526020016000151581526020018760028111156108bd57fe5b60ff16905280516000908152600a602090815260409182902083518155818401516001820180546001600160a01b0319166001600160a01b039092169190911790559183015160028301556060830151805193945084936109249260038501920190612794565b50608082015180516109409160048401916020909101906127f9565b5060a0820151805161095c916005840191602090910190612840565b5060c08201518051610978916006840191602090910190612899565b5060e082015160078201556101008083015160088301556101208301516009830155610140830151600a830155610160830151600b80840191909155610180840151600c840180546101a087015160ff199182169315159390931761ff0019169215159094029190911790556101c090930151600e909201805490911660ff90921691909117905581516020808401516001600160a01b0316600090815292905260409091205580517fc8df7ff219f3c0358e14500814d8b62b443a4bebf3a596baa60b9295b1cf1bde90338d8d8d8d89898f8f6002811115610a5757fe5b604051610a6d9a99989796959493929190614af4565b60405180910390a15193505050505b9695505050505050565b600b6020526000908152604090205481565b6009546001600160a01b031681565b6000546001600160a01b03163314610ad15760405162461bcd60e51b81526004016105ed90614906565b60105415801590610ae3575060115415155b8015610af0575060125415155b8015610afd575060135415155b610b195760405162461bcd60e51b81526004016105ed90614856565b8051610b2361239b565b60ff168114610b445760405162461bcd60e51b81526004016105ed90614826565b60005b81811015610d8857601060000154838281518110610b6157fe5b6020026020010151602001511015610b8b5760405162461bcd60e51b81526004016105ed90614886565b601060010154838281518110610b9d57fe5b6020026020010151602001511115610bc75760405162461bcd60e51b81526004016105ed90614ad6565b601060020154838281518110610bd957fe5b6020026020010151600001511015610c035760405162461bcd60e51b81526004016105ed906149b6565b601060030154838281518110610c1557fe5b6020026020010151600001511115610c3f5760405162461bcd60e51b81526004016105ed90614996565b691fc3842bd1f071c00000838281518110610c5657fe5b6020026020010151604001511015610c805760405162461bcd60e51b81526004016105ed90614a86565b693f870857a3e0e3800000838281518110610c9757fe5b6020026020010151604001511115610cc15760405162461bcd60e51b81526004016105ed90614836565b828181518110610ccd57fe5b6020908102919091018101516000838152600e835260409081902082518155928201516001840155015160029091015582517f99382998f89cd4c8aec7ae5d6deca4b4b0bfa01691740ccd702bf76b6a6816d290849083908110610d2d57fe5b602002602001015160200151848381518110610d4557fe5b602002602001015160000151858481518110610d5d57fe5b602002602001015160400151604051610d7893929190614c5e565b60405180910390a1600101610b47565b505050565b6000546001600160a01b03163314610db75760405162461bcd60e51b81526004016105ed90614a06565b600c8054908290556040517fd03b3c3c5c1446bcdd31423061041c94ca3bc5450fe7ccfb0f636f4c420de87e90610df19083908590614c50565b60405180910390a15050565b604051610e0990614615565b604051809103902081565b697f0e10af47c1c700000081565b693f870857a3e0e380000081565b6001546001600160a01b031681565b6060806060806000600a600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610ec157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ea3575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610f1357602002820191906000526020600020905b815481526020019060010190808311610eff575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610fe65760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610fd25780601f10610fa757610100808354040283529160200191610fd2565b820191906000526020600020905b815481529060010190602001808311610fb557829003601f168201915b505050505081526020019060010190610f3b565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156110b85760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156110a45780601f10611079576101008083540402835291602001916110a4565b820191906000526020600020905b81548152906001019060200180831161108757829003601f168201915b50505050508152602001906001019061100d565b5050505090509450945094509450509193509193565b60105460115460125460135484565b600e6020526000908152604090208054600182015460029092015490919083565b60035481565b600060405161111290614615565b60408051918290038220828201909152601482527356656e757320476f7665726e6f7220427261766f60601b6020909201919091527f157d76627a3b71c0167806f5879f7a61d3e301322f3a3b9f900315f15937671a6111706123a1565b30604051602001611184949392919061475e565b60405160208183030381529060405280519060200120905060006040516111aa906145d9565b6040519081900381206111c3918990899060200161479c565b604051602081830303815290604052805190602001209050600082826040516020016111f09291906145e4565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161122d94939291906147c4565b6020604051602081039080840390855afa15801561124f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112825760405162461bcd60e51b81526004016105ed906148f6565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a6112ba858e8e6123a5565b6040516112c993929190614d5e565b60405180910390a2505050505050505050565b600081600754101580156112f1575060065482115b61130d5760405162461bcd60e51b81526004016105ed90614a76565b6000828152600a60205260409020600c81015460ff1615611332576002915050611471565b80600701544311611347576000915050611471565b8060080154431161135c576001915050611471565b80600a015481600901541115806113805750697f0e10af47c1c70000008160090154105b1561138f576003915050611471565b60028101546113a2576004915050611471565b600c810154610100900460ff16156113be576007915050611471565b6002810154600e82015460ff166000908152600f60209081526040918290205482516360d143f160e11b8152925161145b94936001600160a01b039092169263c1a287e29260048082019391829003018186803b15801561141e57600080fd5b505afa158015611432573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061145691908101906130e9565b61236f565b421061146b576006915050611471565b60059150505b919050565b6007611481826112dc565b600781111561148c57fe5b14156114aa5760405162461bcd60e51b81526004016105ed90614a66565b6000818152600a60205260409020600d546001600160a01b03163314806114dd575060018101546001600160a01b031633145b806115a05750600e8181015460ff16600090815260209190915260409020600201546009546001808401546001600160a01b039283169263782d6fe192911690611528904390612347565b6040518363ffffffff1660e01b8152600401611545929190614664565b60206040518083038186803b15801561155d57600080fd5b505afa158015611571573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061159591908101906132b0565b6001600160601b0316105b6115bc5760405162461bcd60e51b81526004016105ed906149c6565b600c8101805460ff1916600117905560005b60038201548110156116dc57600e82015460ff166000908152600f60205260409020546003830180546001600160a01b039092169163591fcdfe91908490811061161457fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061163c57fe5b906000526020600020015485600501858154811061165657fe5b9060005260206000200186600601868154811061166f57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161169e9594939291906146c2565b600060405180830381600087803b1580156116b857600080fd5b505af11580156116cc573d6000803e3d6000fd5b5050600190920191506115ce9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c82604051610df19190614750565b600d546001600160a01b031681565b60008052600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec375546001600160a01b03161561176c5760405162461bcd60e51b81526004016105ed90614936565b6000546001600160a01b031633146117965760405162461bcd60e51b81526004016105ed90614926565b6001600160a01b0385166117bc5760405162461bcd60e51b81526004016105ed906148d6565b6001600160a01b0381166117e25760405162461bcd60e51b81526004016105ed906149d6565b6117ea61239b565b60ff1682511461180c5760405162461bcd60e51b81526004016105ed90614896565b61181461239b565b60ff168351146118365760405162461bcd60e51b81526004016105ed90614a96565b600980546001600160a01b038088166001600160a01b031992831617909255600a600c55600d80549284169290911691909117905561187484611a65565b61187d83610aa7565b815160005b8181101561191c5760006001600160a01b03168482815181106118a157fe5b60200260200101516001600160a01b031614156118d05760405162461bcd60e51b81526004016105ed90614a16565b8381815181106118dc57fe5b6020908102919091018101516000838152600f909252604090912080546001600160a01b0319166001600160a01b03909216919091179055600101611882565b50505050505050565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836119548483836123a5565b60405161196393929190614d5e565b60405180910390a25050565b6002546001600160a01b031681565b691fc3842bd1f071c0000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda485856119bb8483836123a5565b86866040516119ce959493929190614d18565b60405180910390a250505050565b600c5481565b60055481565b6000546001600160a01b03163314611a125760405162461bcd60e51b81526004016105ed90614866565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a990610df19083908590614649565b6000546001600160a01b03163314611a8f5760405162461bcd60e51b81526004016105ed90614966565b805115801590611aa3575060008160400151115b8015611ab6575080606001518160400151105b8015611ac6575060208101518151105b611ae25760405162461bcd60e51b81526004016105ed90614a56565b60105481516011546020840151601254604080870151601354606089015192517fc90c7ad68c13a491443f1c63dafa18b365428ee69170415afe234c16dc6f650d98611b3998909790969095909490939291614ca1565b60405180910390a180516010556020810151601155604081015160125560600151601355565b6008546001600160a01b031681565b60075481565b6004611b7f826112dc565b6007811115611b8a57fe5b14611ba75760405162461bcd60e51b81526004016105ed90614946565b6000818152600a60209081526040808320600e81015460ff168452600f8352818420548251630d48571f60e31b81529251919493611c109342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b15801561141e57600080fd5b905060005b6003830154811015611dc157611db9836003018281548110611c3357fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611c5b57fe5b9060005260206000200154856005018481548110611c7557fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611d035780601f10611cd857610100808354040283529160200191611d03565b820191906000526020600020905b815481529060010190602001808311611ce657829003601f168201915b5050505050866006018581548110611d1757fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611da55780601f10611d7a57610100808354040283529160200191611da5565b820191906000526020600020905b815481529060010190602001808311611d8857829003601f168201915b50505050600e89015488915060ff16612595565b600101611c15565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611dfb9085908490614c50565b60405180910390a1505050565b604051610e09906145d9565b611e1c6128f2565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600d546001600160a01b0316331480611ea457506000546001600160a01b031633145b611ec05760405162461bcd60e51b81526004016105ed90614ab6565b6001600160a01b038116611ee65760405162461bcd60e51b81526004016105ed90614aa6565b600d80546001600160a01b038381166001600160a01b03198316179092556040519116907f08fdaf06427a2010e5958f4329b566993472d14ce81d3f16ce7f2a2660da98e390610df19083908590614649565b6001546001600160a01b031633148015611f5257503315155b611f6e5760405162461bcd60e51b81526004016105ed906149a6565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611fd2928692911690614649565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a991610df19184916001600160a01b031690614649565b600f602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b6000546001600160a01b0316331461206b5760405162461bcd60e51b81526004016105ed90614a36565b6006541561208b5760405162461bcd60e51b81526004016105ed90614976565b806001600160a01b031663da35c6646040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156120c657600080fd5b505af11580156120da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120fe91908101906130e9565b600781905560065560005b61211161239b565b60ff1681101561218a576000818152600f6020526040808220548151630e18b68160e01b815291516001600160a01b0390911692630e18b681926004808201939182900301818387803b15801561216757600080fd5b505af115801561217b573d6000803e3d6000fd5b50505050806001019050612109565b5050565b60065481565b600561219f826112dc565b60078111156121aa57fe5b146121c75760405162461bcd60e51b81526004016105ed906148e6565b6000818152600a60205260408120600c8101805461ff001916610100179055905b600382015481101561231757600e82015460ff166000908152600f60205260409020546003830180546001600160a01b0390921691630825f38f91908490811061222e57fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061225657fe5b906000526020600020015485600501858154811061227057fe5b9060005260206000200186600601868154811061228957fe5b9060005260206000200187600201546040518663ffffffff1660e01b81526004016122b89594939291906146c2565b600060405180830381600087803b1580156122d257600080fd5b505af11580156122e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261230e9190810190613107565b506001016121e8565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051610df19190614750565b6000828211156123695760405162461bcd60e51b81526004016105ed90614ac6565b50900390565b6000828201838110156123945760405162461bcd60e51b81526004016105ed90614956565b9392505050565b60035b90565b4690565b600060016123b2846112dc565b60078111156123bd57fe5b146123da5760405162461bcd60e51b81526004016105ed906148b6565b60028260ff1611156123fe5760405162461bcd60e51b81526004016105ed90614846565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156124475760405162461bcd60e51b81526004016105ed906148c6565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe19161247d918b91600401614664565b60206040518083038186803b15801561249557600080fd5b505afa1580156124a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124cd91908101906132b0565b905060ff85166124f8576124ee83600a0154826001600160601b031661236f565b600a84015561254e565b8460ff16600114156125255761251b8360090154826001600160601b031661236f565b600984015561254e565b8460ff166002141561254e5761254883600b0154826001600160601b031661236f565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150509392505050565b60ff81166000908152600f60209081526040918290205491516001600160a01b039092169163f2b06537916125d4918a918a918a918a918a9101614672565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016126069190614750565b60206040518083038186803b15801561261e57600080fd5b505afa158015612632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061265691908101906130cb565b156126735760405162461bcd60e51b81526004016105ed90614876565b60ff81166000908152600f602052604090819020549051633a66f90160e01b81526001600160a01b0390911690633a66f901906126bc9089908990899089908990600401614672565b602060405180830381600087803b1580156126d657600080fd5b505af11580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061191c91908101906130e9565b604051806101e001604052806000815260200160006001600160a01b0316815260200160008152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600015158152602001600060ff1681525090565b8280548282559060005260206000209081019282156127e9579160200282015b828111156127e957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906127b4565b506127f5929150612912565b5090565b828054828255906000526020600020908101928215612834579160200282015b82811115612834578251825591602001919060010190612819565b506127f5929150612936565b82805482825590600052602060002090810192821561288d579160200282015b8281111561288d578251805161287d918491602090910190612950565b5091602001919060010190612860565b506127f59291506129bd565b8280548282559060005260206000209081019282156128e6579160200282015b828111156128e657825180516128d6918491602090910190612950565b50916020019190600101906128b9565b506127f59291506129e0565b604080516060810182526000808252602082018190529181019190915290565b61239e91905b808211156127f55780546001600160a01b0319168155600101612918565b61239e91905b808211156127f5576000815560010161293c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061299157805160ff1916838001178555612834565b828001600101855582156128345791820182811115612834578251825591602001919060010190612819565b61239e91905b808211156127f55760006129d78282612a03565b506001016129c3565b61239e91905b808211156127f55760006129fa8282612a03565b506001016129e6565b50805460018160011615610100020316600290046000825580601f10612a295750612a47565b601f016020900490600052602060002090810190612a479190612936565b50565b8035611e7b81614ed3565b600082601f830112612a6657600080fd5b8135612a79612a7482614dbd565b614d97565b91508181835260208401935060208101905083856020840282011115612a9e57600080fd5b60005b83811015612aca5781612ab48882612a4a565b8452506020928301929190910190600101612aa1565b5050505092915050565b600082601f830112612ae557600080fd5b8135612af3612a7482614dbd565b81815260209384019390925082018360005b83811015612aca5781358601612b1b8882612d01565b8452506020928301929190910190600101612b05565b600082601f830112612b4257600080fd5b8135612b50612a7482614dbd565b91508181835260208401935060208101905083856020840282011115612b7557600080fd5b60005b83811015612aca5781612b8b8882612d96565b8452506020928301929190910190600101612b78565b600082601f830112612bb257600080fd5b8135612bc0612a7482614dbd565b81815260209384019390925082018360005b83811015612aca5781358601612be88882612d01565b8452506020928301929190910190600101612bd2565b600082601f830112612c0f57600080fd5b8135612c1d612a7482614dbd565b91508181835260208401935060208101905083856060840282011115612c4257600080fd5b60005b83811015612aca5781612c588882612df4565b84525060209092019160609190910190600101612c45565b600082601f830112612c8157600080fd5b8135612c8f612a7482614dbd565b91508181835260208401935060208101905083856020840282011115612cb457600080fd5b60005b83811015612aca5781612cca8882612ceb565b8452506020928301929190910190600101612cb7565b8051611e7b81614ee7565b8035611e7b81614ef0565b8051611e7b81614ef0565b600082601f830112612d1257600080fd5b8135612d20612a7482614ddd565b91508082526020830160208301858383011115612d3c57600080fd5b612d47838284614e87565b50505092915050565b600082601f830112612d6157600080fd5b8151612d6f612a7482614ddd565b91508082526020830160208301858383011115612d8b57600080fd5b612d47838284614e93565b8035611e7b81614ef9565b8035611e7b81614f02565b60008083601f840112612dbe57600080fd5b5081356001600160401b03811115612dd557600080fd5b602083019150836001820283011115612ded57600080fd5b9250929050565b600060608284031215612e0657600080fd5b612e106060614d97565b90506000612e1e8484612ceb565b8252506020612e2f84848301612ceb565b6020830152506040612e4384828501612ceb565b60408301525092915050565b600060808284031215612e6157600080fd5b612e6b6080614d97565b90506000612e798484612ceb565b8252506020612e8a84848301612ceb565b6020830152506040612e9e84828501612ceb565b6040830152506060612eb284828501612ceb565b60608301525092915050565b8035611e7b81614f0f565b8051611e7b81614f18565b600060208284031215612ee657600080fd5b6000612ef28484612a4a565b949350505050565b60008060008060006101008688031215612f1357600080fd5b6000612f1f8888612a4a565b9550506020612f3088828901612e4f565b94505060a08601356001600160401b03811115612f4c57600080fd5b612f5888828901612bfe565b93505060c08601356001600160401b03811115612f7457600080fd5b612f8088828901612b31565b92505060e0612f9188828901612a4a565b9150509295509295909350565b60008060008060008060c08789031215612fb757600080fd5b86356001600160401b03811115612fcd57600080fd5b612fd989828a01612a55565b96505060208701356001600160401b03811115612ff557600080fd5b61300189828a01612c70565b95505060408701356001600160401b0381111561301d57600080fd5b61302989828a01612ba1565b94505060608701356001600160401b0381111561304557600080fd5b61305189828a01612ad4565b93505060808701356001600160401b0381111561306d57600080fd5b61307989828a01612d01565b92505060a061308a89828a01612da1565b9150509295509295509295565b6000602082840312156130a957600080fd5b81356001600160401b038111156130bf57600080fd5b612ef284828501612bfe565b6000602082840312156130dd57600080fd5b6000612ef28484612ce0565b6000602082840312156130fb57600080fd5b6000612ef28484612cf6565b60006020828403121561311957600080fd5b81516001600160401b0381111561312f57600080fd5b612ef284828501612d50565b60006080828403121561314d57600080fd5b6000612ef28484612e4f565b60006020828403121561316b57600080fd5b6000612ef28484612ceb565b6000806040838503121561318a57600080fd5b60006131968585612ceb565b92505060206131a785828601612a4a565b9150509250929050565b600080604083850312156131c457600080fd5b60006131d08585612ceb565b92505060206131a785828601612ebe565b600080600080606085870312156131f757600080fd5b60006132038787612ceb565b945050602061321487828801612ebe565b93505060408501356001600160401b0381111561323057600080fd5b61323c87828801612dac565b95989497509550505050565b600080600080600060a0868803121561326057600080fd5b600061326c8888612ceb565b955050602061327d88828901612ebe565b945050604061328e88828901612ebe565b935050606061329f88828901612ceb565b9250506080612f9188828901612ceb565b6000602082840312156132c257600080fd5b6000612ef28484612ec9565b60006132da8383613309565b505060200190565b600061239483836134ab565b60006132da8383613491565b61330381614e66565b82525050565b61330381614e23565b600061331d82614e16565b6133278185614e1a565b935061333283614e04565b8060005b8381101561336057815161334a88826132ce565b975061335583614e04565b925050600101613336565b509495945050505050565b600061337682614e16565b6133808185614e1a565b93508360208202850161339285614e04565b8060005b858110156133cc57848403895281516133af85826132e2565b94506133ba83614e04565b60209a909a0199925050600101613396565b5091979650505050505050565b60006133e482614e16565b6133ee8185614e1a565b93508360208202850161340085614e04565b8060005b858110156133cc578484038952815161341d85826132e2565b945061342883614e04565b60209a909a0199925050600101613404565b600061344582614e16565b61344f8185614e1a565b935061345a83614e04565b8060005b8381101561336057815161347288826132ee565b975061347d83614e04565b92505060010161345e565b61330381614e2e565b6133038161239e565b6133036134a68261239e565b61239e565b60006134b682614e16565b6134c08185614e1a565b93506134d0818560208601614e93565b6134d981614ebf565b9093019392505050565b600081546001811660008114613500576001811461352657613565565b607f60028304166135118187614e1a565b60ff1984168152955050602085019250613565565b600282046135348187614e1a565b955061353f85614e0a565b60005b8281101561355e57815488820152600190910190602001613542565b8701945050505b505092915050565b61330381614e33565b61330381614e71565b600061358b8385614e1a565b9350613598838584614e87565b6134d983614ebf565b60006135ae604183614e1a565b600080516020614f2283398151915281527f733a20696e76616c69642070726f706f73616c20636f6e666967206c656e67746020820152600d60fb1b604082015260600192915050565b6000613605604183614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d61782070726f706f73616c207468726573686f6c6020820152601960fa1b604082015260600192915050565b600061365c603283614e1a565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b60006136b0604783614e1a565b600080516020614f2283398151915281527f733a2076616c69646174696f6e20706172616d73206e6f7420636f6e666967756020820152661c9959081e595d60ca1b604082015260600192915050565b600061370d602883611471565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b6000613757602a83614e1a565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006137a3605583614e1a565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b6000613820603c83614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d696e20766f74696e6720706572696f6400000000602082015260400192915050565b600061386d605683614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a6e756d62657281527f206f662074696d656c6f636b732073686f756c64206d61746368206e756d626560208201527572206f6620676f7665726e616e636520726f7574657360501b604082015260600192915050565b60006138eb603183614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b600061393e600283611471565b61190160f01b815260020192915050565b600061395c603183614e1a565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006139af603483614e1a565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b6000613a05603483614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c815273696420787673207661756c74206164647265737360601b602082015260400192915050565b6000613a5b604583614e1a565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b6000613ac8602f83614e1a565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b6000613b19602d83614e1a565b600080516020614f2283398151915281526c733a2061646d696e206f6e6c7960981b602082015260400192915050565b6000613b56604483614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b6000613bc2602583614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b6000613c09603283614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e6e6f8152717420696e697469616c697a6520747769636560701b602082015260400192915050565b6000613c5d604483614e1a565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b6000613cc9601183614e1a565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000613cf6604383611471565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613d61602e83614e1a565b7f476f7665726e6f72427261766f3a3a73657456616c69646174696f6e5061726181526d6d733a2061646d696e206f6e6c7960901b602082015260400192915050565b6000613db1603083614e1a565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e81526f6c7920696e697469617465206f6e636560801b602082015260400192915050565b6000613e03602c83614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613e51603b83614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d617820766f74696e672064656c61790000000000602082015260400192915050565b6000613e9e602e83614e1a565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613eee603b83614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d696e20766f74696e672064656c61790000000000602082015260400192915050565b6000613f3b602f83614e1a565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000613f8c602b83614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81526a34b21033bab0b93234b0b760a91b602082015260400192915050565b6000613fd9602883614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000614023605983614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b60006140a8603483614e1a565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c4d61784f7081527365726174696f6e733a2061646d696e206f6e6c7960601b602082015260400192915050565b60006140fe603283614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a696e76616c69815271642074696d656c6f636b206164647265737360701b602082015260400192915050565b6000614152605883614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611e7b600083614e1a565b60006141e4602483614e1a565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e208152636f6e6c7960e01b602082015260400192915050565b600061422a603f83614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000614289603283614e1a565b7f476f7665726e6f72427261766f3a3a73657456616c69646174696f6e506172618152716d733a20696e76616c696420706172616d7360701b602082015260400192915050565b60006142dd603683614e1a565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000614335602983614e1a565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000614380604183614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d696e2070726f706f73616c207468726573686f6c6020820152601960fa1b604082015260600192915050565b60006143d7605d83614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a6e756d62657281527f206f662070726f706f73616c20636f6e666967732073686f756c64206d61746360208201527f68206e756d626572206f6620676f7665726e616e636520726f75746573000000604082015260600192915050565b600061445c603b83614e1a565b7f476f7665726e6f72427261766f3a3a5f736574477561726469616e3a2063616e81527f6e6f74206c69766520776974686f7574206120677561726469616e0000000000602082015260400192915050565b60006144bb603383614e1a565b7f476f7665726e6f72427261766f3a3a5f736574477561726469616e3a2061646d815272696e206f7220677561726469616e206f6e6c7960681b602082015260400192915050565b6000614510601583614e1a565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b6000614541603c83614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d617820766f74696e6720706572696f6400000000602082015260400192915050565b805160608301906145928482613488565b5060208201516145a560208501826145be565b5060408201516145b860408501826145d0565b50505050565b61330381614e54565b61330381614e7c565b61330381614e5a565b6000611e7b82613700565b60006145ef82613931565b91506145fb828561349a565b60208201915061460b828461349a565b5060200192915050565b6000611e7b82613ce9565b60208101611e7b8284613309565b6040810161463c82856132fa565b6123946020830184613491565b604081016146578285613309565b6123946020830184613309565b6040810161463c8285613309565b60a081016146808288613309565b61468d6020830187613491565b818103604083015261469f81866134ab565b905081810360608301526146b381856134ab565b9050610a7c6080830184613491565b60a081016146d08288613309565b6146dd6020830187613491565b81810360408301526146ef81866134e3565b905081810360608301526146b381856134e3565b608080825281016147148187613312565b90508181036020830152614728818661343a565b9050818103604083015261473c81856133d9565b90508181036060830152610a7c818461336b565b60208101611e7b8284613491565b6080810161476c8287613491565b6147796020830186613491565b6147866040830185613491565b6147936060830184613309565b95945050505050565b606081016147aa8286613491565b6147b76020830185613491565b612ef260408301846145be565b608081016147d28287613491565b6147df60208301866145be565b6147ec6040830185613491565b6147936060830184613491565b60208101611e7b828461356d565b60208101611e7b8284613576565b6020808252810161239481846134ab565b60208082528101611e7b816135a1565b60208082528101611e7b816135f8565b60208082528101611e7b8161364f565b60208082528101611e7b816136a3565b60208082528101611e7b8161374a565b60208082528101611e7b81613796565b60208082528101611e7b81613813565b60208082528101611e7b81613860565b60208082528101611e7b816138de565b60208082528101611e7b8161394f565b60208082528101611e7b816139a2565b60208082528101611e7b816139f8565b60208082528101611e7b81613a4e565b60208082528101611e7b81613abb565b60208082528101611e7b81613b0c565b60208082528101611e7b81613b49565b60208082528101611e7b81613bb5565b60208082528101611e7b81613bfc565b60208082528101611e7b81613c50565b60208082528101611e7b81613cbc565b60208082528101611e7b81613d54565b60208082528101611e7b81613da4565b60208082528101611e7b81613df6565b60208082528101611e7b81613e44565b60208082528101611e7b81613e91565b60208082528101611e7b81613ee1565b60208082528101611e7b81613f2e565b60208082528101611e7b81613f7f565b60208082528101611e7b81613fcc565b60208082528101611e7b81614016565b60208082528101611e7b8161409b565b60208082528101611e7b816140f1565b60208082528101611e7b81614145565b60208082528101611e7b816141d7565b60208082528101611e7b8161421d565b60208082528101611e7b8161427c565b60208082528101611e7b816142d0565b60208082528101611e7b81614328565b60208082528101611e7b81614373565b60208082528101611e7b816143ca565b60208082528101611e7b8161444f565b60208082528101611e7b816144ae565b60208082528101611e7b81614503565b60208082528101611e7b81614534565b60608101611e7b8284614581565b6101408101614b03828d613491565b614b10602083018c6132fa565b8181036040830152614b22818b613312565b90508181036060830152614b36818a61343a565b90508181036080830152614b4a81896133d9565b905081810360a0830152614b5e818861336b565b9050614b6d60c0830187613491565b614b7a60e0830186613491565b818103610100830152614b8d81856134ab565b9050614b9d6101208301846145be565b9b9a5050505050505050505050565b6101608101614bbb828e613491565b614bc8602083018d613309565b614bd5604083018c613491565b614be2606083018b613491565b614bef608083018a613491565b614bfc60a0830189613491565b614c0960c0830188613491565b614c1660e0830187613491565b614c24610100830186613488565b614c32610120830185613488565b614c406101408301846145be565b9c9b505050505050505050505050565b6040810161463c8285613491565b60608101614c6c8286613491565b614c796020830185613491565b612ef26040830184613491565b60808101614c948287613491565b6147df6020830186613491565b6101008101614cb0828b613491565b614cbd602083018a613491565b614cca6040830189613491565b614cd76060830188613491565b614ce46080830187613491565b614cf160a0830186613491565b614cfe60c0830185613491565b614d0b60e0830184613491565b9998505050505050505050565b60808101614d268288613491565b614d3360208301876145be565b614d4060408301866145c7565b8181036060830152614d5381848661357f565b979650505050505050565b60808101614d6c8286613491565b614d7960208301856145be565b614d8660408301846145c7565b8181036060830152614793816141ca565b6040518181016001600160401b0381118282101715614db557600080fd5b604052919050565b60006001600160401b03821115614dd357600080fd5b5060209081020190565b60006001600160401b03821115614df357600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611e7b82614e48565b151590565b6000611e7b82614e23565b8061147181614ec9565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611e7b82614e33565b6000611e7b82614e3e565b6000611e7b82614e5a565b82818337506000910152565b60005b83811015614eae578181015183820152602001614e96565b838111156145b85750506000910152565b601f01601f191690565b60088110612a4757fe5b614edc81614e23565b8114612a4757600080fd5b614edc81614e2e565b614edc8161239e565b614edc81614e33565b60038110612a4757600080fd5b614edc81614e54565b614edc81614e5a56fe476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967a365627a7a723158207131c586f8c469c7dba84f67aea57b19b3c03e4dc9e347d6eeeee97b89da13cf6c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4F84 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x253 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x46416F92 GT PUSH2 0x146 JUMPI DUP1 PUSH4 0xDA35C664 GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xE9C714F2 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xE9C714F2 EQ PUSH2 0x4D5 JUMPI DUP1 PUSH4 0xEE9799EE EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0xF9D28B80 EQ PUSH2 0x4F8 JUMPI DUP1 PUSH4 0xFC4EEE42 EQ PUSH2 0x50B JUMPI DUP1 PUSH4 0xFE0D94C1 EQ PUSH2 0x513 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0xDA35C664 EQ PUSH2 0x47F JUMPI DUP1 PUSH4 0xDDF0B009 EQ PUSH2 0x487 JUMPI DUP1 PUSH4 0xDEAAA7CC EQ PUSH2 0x49A JUMPI DUP1 PUSH4 0xE23A9A52 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xE38E8C0F EQ PUSH2 0x4C2 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x7BDBE4D0 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0x7BDBE4D0 EQ PUSH2 0x441 JUMPI DUP1 PUSH4 0xB58131B0 EQ PUSH2 0x449 JUMPI DUP1 PUSH4 0xB71D1A0C EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0xBB08C321 EQ PUSH2 0x464 JUMPI DUP1 PUSH4 0xD33219B4 EQ PUSH2 0x477 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x46416F92 EQ PUSH2 0x3F8 JUMPI DUP1 PUSH4 0x56781388 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x41E JUMPI DUP1 PUSH4 0x791F5D23 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7B3C71D3 EQ PUSH2 0x42E JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x25FD935A GT PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x3932ABB1 GT PUSH2 0x198 JUMPI DUP1 PUSH4 0x3932ABB1 EQ PUSH2 0x3A2 JUMPI DUP1 PUSH4 0x3BCCF4FD EQ PUSH2 0x3AA JUMPI DUP1 PUSH4 0x3E4F49E6 EQ PUSH2 0x3BD JUMPI DUP1 PUSH4 0x40E58EE5 EQ PUSH2 0x3DD JUMPI DUP1 PUSH4 0x452A9320 EQ PUSH2 0x3F0 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x25FD935A EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x26782247 EQ PUSH2 0x330 JUMPI DUP1 PUSH4 0x328DD982 EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x34CF3909 EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x35A87DE2 EQ PUSH2 0x380 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x1B9CE575 GT PUSH2 0x21B JUMPI DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x2DB JUMPI DUP1 PUSH4 0x1E75ADF2 EQ PUSH2 0x2F0 JUMPI DUP1 PUSH4 0x1EBCFEFD EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x20606B70 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x24BC1A64 EQ PUSH2 0x320 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x13CF08B EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x2A251A3 EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x164A1AB1 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0x17977C61 EQ PUSH2 0x2C8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26B PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x526 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4BAC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x293 PUSH2 0x592 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4750 JUMP JUMPDEST PUSH2 0x2A8 PUSH2 0x598 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4815 JUMP JUMPDEST PUSH2 0x293 PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F9E JUMP JUMPDEST PUSH2 0x5C8 JUMP JUMPDEST PUSH2 0x293 PUSH2 0x2D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED4 JUMP JUMPDEST PUSH2 0xA86 JUMP JUMPDEST PUSH2 0x2E3 PUSH2 0xA98 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x47F9 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x2FE CALLDATASIZE PUSH1 0x4 PUSH2 0x3097 JUMP JUMPDEST PUSH2 0xAA7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x303 PUSH2 0x313 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0xD8D JUMP JUMPDEST PUSH2 0x293 PUSH2 0xDFD JUMP JUMPDEST PUSH2 0x293 PUSH2 0xE14 JUMP JUMPDEST PUSH2 0x293 PUSH2 0xE22 JUMP JUMPDEST PUSH2 0x338 PUSH2 0xE30 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4620 JUMP JUMPDEST PUSH2 0x358 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4703 JUMP JUMPDEST PUSH2 0x370 PUSH2 0x10CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4C86 JUMP JUMPDEST PUSH2 0x393 PUSH2 0x38E CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x10DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4C5E JUMP JUMPDEST PUSH2 0x293 PUSH2 0x10FE JUMP JUMPDEST PUSH2 0x303 PUSH2 0x3B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3248 JUMP JUMPDEST PUSH2 0x1104 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x3CB CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4807 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x3EB CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x1476 JUMP JUMPDEST PUSH2 0x338 PUSH2 0x170C JUMP JUMPDEST PUSH2 0x303 PUSH2 0x406 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EFA JUMP JUMPDEST PUSH2 0x171B JUMP JUMPDEST PUSH2 0x303 PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x31B1 JUMP JUMPDEST PUSH2 0x1925 JUMP JUMPDEST PUSH2 0x338 PUSH2 0x196F JUMP JUMPDEST PUSH2 0x293 PUSH2 0x197E JUMP JUMPDEST PUSH2 0x303 PUSH2 0x43C CALLDATASIZE PUSH1 0x4 PUSH2 0x31E1 JUMP JUMPDEST PUSH2 0x198C JUMP JUMPDEST PUSH2 0x293 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0x293 PUSH2 0x19E2 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED4 JUMP JUMPDEST PUSH2 0x19E8 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x313B JUMP JUMPDEST PUSH2 0x1A65 JUMP JUMPDEST PUSH2 0x2E3 PUSH2 0x1B5F JUMP JUMPDEST PUSH2 0x293 PUSH2 0x1B6E JUMP JUMPDEST PUSH2 0x303 PUSH2 0x495 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x1B74 JUMP JUMPDEST PUSH2 0x293 PUSH2 0x1E08 JUMP JUMPDEST PUSH2 0x4B5 PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3177 JUMP JUMPDEST PUSH2 0x1E14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4AE6 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x4D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED4 JUMP JUMPDEST PUSH2 0x1E81 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x1F39 JUMP JUMPDEST PUSH2 0x2E3 PUSH2 0x4EB CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x2017 JUMP JUMPDEST PUSH2 0x338 PUSH2 0x2032 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x506 CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED4 JUMP JUMPDEST PUSH2 0x2041 JUMP JUMPDEST PUSH2 0x293 PUSH2 0x218E JUMP JUMPDEST PUSH2 0x303 PUSH2 0x521 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x2194 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x8 DUP6 ADD SLOAD PUSH1 0x9 DUP7 ADD SLOAD SWAP7 DUP7 ADD SLOAD PUSH1 0xB DUP8 ADD SLOAD PUSH1 0xC DUP9 ADD SLOAD PUSH1 0xE SWAP1 SWAP9 ADD SLOAD SWAP7 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP8 SWAP5 SWAP7 SWAP4 SWAP6 SWAP3 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0xFF DUP1 DUP4 AND SWAP3 PUSH2 0x100 SWAP1 DIV DUP2 AND SWAP2 AND DUP12 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH20 0x56656E757320476F7665726E6F7220427261766F PUSH1 0x60 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x6 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x5F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48A6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xE PUSH1 0x0 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x606 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x782D6FE1 CALLER PUSH2 0x63A NUMBER PUSH1 0x1 PUSH2 0x2347 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x657 SWAP3 SWAP2 SWAP1 PUSH2 0x462E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x66F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x683 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x6A7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x32B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND LT ISZERO PUSH2 0x6CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A46 JUMP JUMPDEST DUP6 MLOAD DUP8 MLOAD EQ DUP1 ISZERO PUSH2 0x6E0 JUMPI POP DUP5 MLOAD DUP8 MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0x6ED JUMPI POP DUP4 MLOAD DUP8 MLOAD EQ JUMPDEST PUSH2 0x709 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4916 JUMP JUMPDEST DUP7 MLOAD PUSH2 0x727 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4986 JUMP JUMPDEST PUSH1 0xC SLOAD DUP8 MLOAD GT ISZERO PUSH2 0x74A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49E6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 PUSH2 0x76B DUP3 PUSH2 0x12DC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x77B JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x799 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A26 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x7A7 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49F6 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH2 0x7F7 NUMBER PUSH1 0xE PUSH1 0x0 DUP8 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x7DD JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD SLOAD PUSH2 0x236F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x829 DUP3 PUSH1 0xE PUSH1 0x0 DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x80F JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x236F JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE SWAP1 POP PUSH2 0x83C PUSH2 0x270E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1E0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 SLOAD DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x8BD JUMPI INVALID JUMPDEST PUSH1 0xFF AND SWAP1 MSTORE DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SSTORE DUP2 DUP5 ADD MLOAD PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP2 DUP4 ADD MLOAD PUSH1 0x2 DUP4 ADD SSTORE PUSH1 0x60 DUP4 ADD MLOAD DUP1 MLOAD SWAP4 SWAP5 POP DUP5 SWAP4 PUSH2 0x924 SWAP3 PUSH1 0x3 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x2794 JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x940 SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x27F9 JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x95C SWAP2 PUSH1 0x5 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2840 JUMP JUMPDEST POP PUSH1 0xC0 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x978 SWAP2 PUSH1 0x6 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2899 JUMP JUMPDEST POP PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x7 DUP3 ADD SSTORE PUSH2 0x100 DUP1 DUP4 ADD MLOAD PUSH1 0x8 DUP4 ADD SSTORE PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x9 DUP4 ADD SSTORE PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0xA DUP4 ADD SSTORE PUSH2 0x160 DUP4 ADD MLOAD PUSH1 0xB DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x180 DUP5 ADD MLOAD PUSH1 0xC DUP5 ADD DUP1 SLOAD PUSH2 0x1A0 DUP8 ADD MLOAD PUSH1 0xFF NOT SWAP2 DUP3 AND SWAP4 ISZERO ISZERO SWAP4 SWAP1 SWAP4 OR PUSH2 0xFF00 NOT AND SWAP3 ISZERO ISZERO SWAP1 SWAP5 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1C0 SWAP1 SWAP4 ADD MLOAD PUSH1 0xE SWAP1 SWAP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0xFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP3 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SSTORE DUP1 MLOAD PUSH32 0xC8DF7FF219F3C0358E14500814D8B62B443A4BEBF3A596BAA60B9295B1CF1BDE SWAP1 CALLER DUP14 DUP14 DUP14 DUP14 DUP10 DUP10 DUP16 DUP16 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xA57 JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6D SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4AF4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 MLOAD SWAP4 POP POP POP POP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4906 JUMP JUMPDEST PUSH1 0x10 SLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xAE3 JUMPI POP PUSH1 0x11 SLOAD ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0xAF0 JUMPI POP PUSH1 0x12 SLOAD ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0xAFD JUMPI POP PUSH1 0x13 SLOAD ISZERO ISZERO JUMPDEST PUSH2 0xB19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4856 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xB23 PUSH2 0x239B JUMP JUMPDEST PUSH1 0xFF AND DUP2 EQ PUSH2 0xB44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4826 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xD88 JUMPI PUSH1 0x10 PUSH1 0x0 ADD SLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB61 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0xB8B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4886 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x1 ADD SLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB9D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD GT ISZERO PUSH2 0xBC7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4AD6 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x2 ADD SLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xBD9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD LT ISZERO PUSH2 0xC03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49B6 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x3 ADD SLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC15 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD GT ISZERO PUSH2 0xC3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4996 JUMP JUMPDEST PUSH10 0x1FC3842BD1F071C00000 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD LT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A86 JUMP JUMPDEST PUSH10 0x3F870857A3E0E3800000 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC97 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD GT ISZERO PUSH2 0xCC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4836 JUMP JUMPDEST DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xCCD JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE DUP4 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP3 MLOAD DUP2 SSTORE SWAP3 DUP3 ADD MLOAD PUSH1 0x1 DUP5 ADD SSTORE ADD MLOAD PUSH1 0x2 SWAP1 SWAP2 ADD SSTORE DUP3 MLOAD PUSH32 0x99382998F89CD4C8AEC7AE5D6DECA4B4B0BFA01691740CCD702BF76B6A6816D2 SWAP1 DUP5 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0xD2D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xD45 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xD5D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0xD78 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4C5E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 ADD PUSH2 0xB47 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDB7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A06 JUMP JUMPDEST PUSH1 0xC DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xD03B3C3C5C1446BCDD31423061041C94CA3BC5450FE7CCFB0F636F4C420DE87E SWAP1 PUSH2 0xDF1 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x4C50 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE09 SWAP1 PUSH2 0x4615 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH10 0x7F0E10AF47C1C7000000 DUP2 JUMP JUMPDEST PUSH10 0x3F870857A3E0E3800000 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0xA PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP DUP1 PUSH1 0x3 ADD DUP2 PUSH1 0x4 ADD DUP3 PUSH1 0x5 ADD DUP4 PUSH1 0x6 ADD DUP4 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xEC1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xEA3 JUMPI JUMPDEST POP POP POP POP POP SWAP4 POP DUP3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xF13 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xEFF JUMPI JUMPDEST POP POP POP POP POP SWAP3 POP DUP2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0xFE6 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xFD2 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xFA7 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xFD2 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xFB5 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xF3B JUMP JUMPDEST POP POP POP POP SWAP2 POP DUP1 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x10B8 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x10A4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1079 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x10A4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1087 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x100D JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP POP SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x11 SLOAD PUSH1 0x12 SLOAD PUSH1 0x13 SLOAD DUP5 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x1112 SWAP1 PUSH2 0x4615 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x14 DUP3 MSTORE PUSH20 0x56656E757320476F7665726E6F7220427261766F PUSH1 0x60 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x157D76627A3B71C0167806F5879F7A61D3E301322F3A3B9F900315F15937671A PUSH2 0x1170 PUSH2 0x23A1 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1184 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x475E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x11AA SWAP1 PUSH2 0x45D9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x11C3 SWAP2 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x20 ADD PUSH2 0x479C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x11F0 SWAP3 SWAP2 SWAP1 PUSH2 0x45E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP3 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x122D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x47C4 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x124F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48F6 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xB8E138887D0AA13BAB447E82DE9D5C1777041ECD21CA36BA824FF1E6C07DDDA4 DUP11 DUP11 PUSH2 0x12BA DUP6 DUP15 DUP15 PUSH2 0x23A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12C9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D5E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x7 SLOAD LT ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI POP PUSH1 0x6 SLOAD DUP3 GT JUMPDEST PUSH2 0x130D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC DUP2 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1332 JUMPI PUSH1 0x2 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST DUP1 PUSH1 0x7 ADD SLOAD NUMBER GT PUSH2 0x1347 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST DUP1 PUSH1 0x8 ADD SLOAD NUMBER GT PUSH2 0x135C JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST DUP1 PUSH1 0xA ADD SLOAD DUP2 PUSH1 0x9 ADD SLOAD GT ISZERO DUP1 PUSH2 0x1380 JUMPI POP PUSH10 0x7F0E10AF47C1C7000000 DUP2 PUSH1 0x9 ADD SLOAD LT JUMPDEST ISZERO PUSH2 0x138F JUMPI PUSH1 0x3 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0x13A2 JUMPI PUSH1 0x4 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST PUSH1 0xC DUP2 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x13BE JUMPI PUSH1 0x7 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xE DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH4 0x60D143F1 PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 MLOAD PUSH2 0x145B SWAP5 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 PUSH4 0xC1A287E2 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x141E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1456 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x30E9 JUMP JUMPDEST PUSH2 0x236F JUMP JUMPDEST TIMESTAMP LT PUSH2 0x146B JUMPI PUSH1 0x6 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST PUSH1 0x5 SWAP2 POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x7 PUSH2 0x1481 DUP3 PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x148C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x14AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A66 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x14DD JUMPI POP PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST DUP1 PUSH2 0x15A0 JUMPI POP PUSH1 0xE DUP2 DUP2 ADD SLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x9 SLOAD PUSH1 0x1 DUP1 DUP5 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x782D6FE1 SWAP3 SWAP2 AND SWAP1 PUSH2 0x1528 SWAP1 NUMBER SWAP1 PUSH2 0x2347 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1545 SWAP3 SWAP2 SWAP1 PUSH2 0x4664 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x155D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1571 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1595 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x32B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND LT JUMPDEST PUSH2 0x15BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49C6 JUMP JUMPDEST PUSH1 0xC DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x16DC JUMPI PUSH1 0xE DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x591FCDFE SWAP2 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1614 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x163C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP6 PUSH1 0x5 ADD DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x1656 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP7 PUSH1 0x6 ADD DUP7 DUP2 SLOAD DUP2 LT PUSH2 0x166F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP8 PUSH1 0x2 ADD SLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x169E SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x46C2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x15CE SWAP1 POP JUMP JUMPDEST POP PUSH32 0x789CF55BE980739DAD1D0699B93B58E806B51C9D96619BFA8FE0A28ABAA7B30C DUP3 PUSH1 0x40 MLOAD PUSH2 0xDF1 SWAP2 SWAP1 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH32 0xF4803E074BD026BAAF6ED2E288C9515F68C72FB7216EEBDD7CAE1718A53EC375 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x176C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4936 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1796 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4926 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x17BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48D6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x17E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49D6 JUMP JUMPDEST PUSH2 0x17EA PUSH2 0x239B JUMP JUMPDEST PUSH1 0xFF AND DUP3 MLOAD EQ PUSH2 0x180C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4896 JUMP JUMPDEST PUSH2 0x1814 PUSH2 0x239B JUMP JUMPDEST PUSH1 0xFF AND DUP4 MLOAD EQ PUSH2 0x1836 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A96 JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xA PUSH1 0xC SSTORE PUSH1 0xD DUP1 SLOAD SWAP3 DUP5 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1874 DUP5 PUSH2 0x1A65 JUMP JUMPDEST PUSH2 0x187D DUP4 PUSH2 0xAA7 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x191C JUMPI PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18A1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x18D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A16 JUMP JUMPDEST DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x18DC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xF SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x1882 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH32 0xB8E138887D0AA13BAB447E82DE9D5C1777041ECD21CA36BA824FF1E6C07DDDA4 DUP4 DUP4 PUSH2 0x1954 DUP5 DUP4 DUP4 PUSH2 0x23A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1963 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D5E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH10 0x1FC3842BD1F071C00000 DUP2 JUMP JUMPDEST CALLER PUSH32 0xB8E138887D0AA13BAB447E82DE9D5C1777041ECD21CA36BA824FF1E6C07DDDA4 DUP6 DUP6 PUSH2 0x19BB DUP5 DUP4 DUP4 PUSH2 0x23A5 JUMP JUMPDEST DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x19CE SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D18 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A12 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4866 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0xCA4F2F25D0898EDD99413412FB94012F9E54EC8142F9B093E7720646A95B16A9 SWAP1 PUSH2 0xDF1 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4966 JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1AA3 JUMPI POP PUSH1 0x0 DUP2 PUSH1 0x40 ADD MLOAD GT JUMPDEST DUP1 ISZERO PUSH2 0x1AB6 JUMPI POP DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD LT JUMPDEST DUP1 ISZERO PUSH2 0x1AC6 JUMPI POP PUSH1 0x20 DUP2 ADD MLOAD DUP2 MLOAD LT JUMPDEST PUSH2 0x1AE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A56 JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 MLOAD PUSH1 0x11 SLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x12 SLOAD PUSH1 0x40 DUP1 DUP8 ADD MLOAD PUSH1 0x13 SLOAD PUSH1 0x60 DUP10 ADD MLOAD SWAP3 MLOAD PUSH32 0xC90C7AD68C13A491443F1C63DAFA18B365428EE69170415AFE234C16DC6F650D SWAP9 PUSH2 0x1B39 SWAP9 SWAP1 SWAP8 SWAP1 SWAP7 SWAP1 SWAP6 SWAP1 SWAP5 SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x4CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 MLOAD PUSH1 0x10 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x11 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x12 SSTORE PUSH1 0x60 ADD MLOAD PUSH1 0x13 SSTORE JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH2 0x1B7F DUP3 PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x1B8A JUMPI INVALID JUMPDEST EQ PUSH2 0x1BA7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4946 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0xE DUP2 ADD SLOAD PUSH1 0xFF AND DUP5 MSTORE PUSH1 0xF DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP3 MLOAD PUSH4 0xD48571F PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 MLOAD SWAP2 SWAP5 SWAP4 PUSH2 0x1C10 SWAP4 TIMESTAMP SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND SWAP3 PUSH4 0x6A42B8F8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x141E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD DUP2 LT ISZERO PUSH2 0x1DC1 JUMPI PUSH2 0x1DB9 DUP4 PUSH1 0x3 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1C33 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1C5B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP6 PUSH1 0x5 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1C75 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1D03 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1CD8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1D03 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1CE6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP7 PUSH1 0x6 ADD DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x1D17 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1DA5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1D7A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1DA5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1D88 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0xE DUP10 ADD SLOAD DUP9 SWAP2 POP PUSH1 0xFF AND PUSH2 0x2595 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1C15 JUMP JUMPDEST POP PUSH1 0x2 DUP3 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9A2E42FD6722813D69113E7D0079D3D940171428DF7373DF9C7F7617CFDA2892 SWAP1 PUSH2 0x1DFB SWAP1 DUP6 SWAP1 DUP5 SWAP1 PUSH2 0x4C50 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE09 SWAP1 PUSH2 0x45D9 JUMP JUMPDEST PUSH2 0x1E1C PUSH2 0x28F2 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE PUSH1 0xD ADD DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP3 DIV AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH3 0x10000 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x1EA4 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST PUSH2 0x1EC0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4AB6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1EE6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4AA6 JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x8FDAF06427A2010E5958F4329B566993472D14CE81D3F16CE7F2A2660DA98E3 SWAP1 PUSH2 0xDF1 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 ISZERO PUSH2 0x1F52 JUMPI POP CALLER ISZERO ISZERO JUMPDEST PUSH2 0x1F6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49A6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND DUP3 OR SWAP7 DUP8 SWAP1 SSTORE SWAP1 SWAP3 AND SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP3 DUP3 AND SWAP4 SWAP1 SWAP3 PUSH32 0xF9FFABCA9C8276E99321725BCB43FB076A6C66A54B7F21C4E8146D8519B417DC SWAP3 PUSH2 0x1FD2 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xCA4F2F25D0898EDD99413412FB94012F9E54EC8142F9B093E7720646A95B16A9 SWAP2 PUSH2 0xDF1 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x206B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A36 JUMP JUMPDEST PUSH1 0x6 SLOAD ISZERO PUSH2 0x208B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4976 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDA35C664 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x20DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x20FE SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x30E9 JUMP JUMPDEST PUSH1 0x7 DUP2 SWAP1 SSTORE PUSH1 0x6 SSTORE PUSH1 0x0 JUMPDEST PUSH2 0x2111 PUSH2 0x239B JUMP JUMPDEST PUSH1 0xFF AND DUP2 LT ISZERO PUSH2 0x218A JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0xE18B681 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0xE18B681 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x217B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x2109 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH2 0x219F DUP3 PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x21AA JUMPI INVALID JUMPDEST EQ PUSH2 0x21C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0xC DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE SWAP1 JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x2317 JUMPI PUSH1 0xE DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x825F38F SWAP2 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x222E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x2256 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP6 PUSH1 0x5 ADD DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x2270 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP7 PUSH1 0x6 ADD DUP7 DUP2 SLOAD DUP2 LT PUSH2 0x2289 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP8 PUSH1 0x2 ADD SLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22B8 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x46C2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x22E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x230E SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3107 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x21E8 JUMP JUMPDEST POP PUSH32 0x712AE1383F79AC853F8D882153778E0260EF8F03B504E2866E0593E04D2B291F DUP3 PUSH1 0x40 MLOAD PUSH2 0xDF1 SWAP2 SWAP1 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2369 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4AC6 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x2394 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4956 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 JUMPDEST SWAP1 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x23B2 DUP5 PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x23BD JUMPI INVALID JUMPDEST EQ PUSH2 0x23DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48B6 JUMP JUMPDEST PUSH1 0x2 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x23FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4846 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE PUSH1 0xD DUP2 ADD SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2447 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48C6 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x7 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x782D6FE1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x782D6FE1 SWAP2 PUSH2 0x247D SWAP2 DUP12 SWAP2 PUSH1 0x4 ADD PUSH2 0x4664 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2495 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x24CD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x32B0 JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP6 AND PUSH2 0x24F8 JUMPI PUSH2 0x24EE DUP4 PUSH1 0xA ADD SLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x236F JUMP JUMPDEST PUSH1 0xA DUP5 ADD SSTORE PUSH2 0x254E JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1 EQ ISZERO PUSH2 0x2525 JUMPI PUSH2 0x251B DUP4 PUSH1 0x9 ADD SLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x236F JUMP JUMPDEST PUSH1 0x9 DUP5 ADD SSTORE PUSH2 0x254E JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x2 EQ ISZERO PUSH2 0x254E JUMPI PUSH2 0x2548 DUP4 PUSH1 0xB ADD SLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x236F JUMP JUMPDEST PUSH1 0xB DUP5 ADD SSTORE JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0xFF NOT SWAP1 SWAP2 AND OR PUSH2 0xFF00 NOT AND PUSH2 0x100 PUSH1 0xFF DUP8 AND MUL OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFF0000 NOT AND PUSH3 0x10000 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP4 AND MUL OR SWAP1 SWAP2 SSTORE SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF2B06537 SWAP2 PUSH2 0x25D4 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP11 SWAP2 ADD PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2606 SWAP2 SWAP1 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x261E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2632 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x2656 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x30CB JUMP JUMPDEST ISZERO PUSH2 0x2673 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4876 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x3A66F901 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x3A66F901 SWAP1 PUSH2 0x26BC SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x191C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x30E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1E0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x27E9 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x27E9 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x27B4 JUMP JUMPDEST POP PUSH2 0x27F5 SWAP3 SWAP2 POP PUSH2 0x2912 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x2834 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2834 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2819 JUMP JUMPDEST POP PUSH2 0x27F5 SWAP3 SWAP2 POP PUSH2 0x2936 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x288D JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x288D JUMPI DUP3 MLOAD DUP1 MLOAD PUSH2 0x287D SWAP2 DUP5 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2950 JUMP JUMPDEST POP SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2860 JUMP JUMPDEST POP PUSH2 0x27F5 SWAP3 SWAP2 POP PUSH2 0x29BD JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x28E6 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x28E6 JUMPI DUP3 MLOAD DUP1 MLOAD PUSH2 0x28D6 SWAP2 DUP5 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2950 JUMP JUMPDEST POP SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x28B9 JUMP JUMPDEST POP PUSH2 0x27F5 SWAP3 SWAP2 POP PUSH2 0x29E0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x239E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27F5 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2918 JUMP JUMPDEST PUSH2 0x239E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27F5 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x293C JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2991 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2834 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2834 JUMPI SWAP2 DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x2834 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2819 JUMP JUMPDEST PUSH2 0x239E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27F5 JUMPI PUSH1 0x0 PUSH2 0x29D7 DUP3 DUP3 PUSH2 0x2A03 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x29C3 JUMP JUMPDEST PUSH2 0x239E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27F5 JUMPI PUSH1 0x0 PUSH2 0x29FA DUP3 DUP3 PUSH2 0x2A03 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x29E6 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0x2A29 JUMPI POP PUSH2 0x2A47 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2A47 SWAP2 SWAP1 PUSH2 0x2936 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4ED3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2A66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2A79 PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST PUSH2 0x4D97 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x2A9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 PUSH2 0x2AB4 DUP9 DUP3 PUSH2 0x2A4A JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2AA1 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2AE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2AF3 PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x2B1B DUP9 DUP3 PUSH2 0x2D01 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2B05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2B42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2B50 PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x2B75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 PUSH2 0x2B8B DUP9 DUP3 PUSH2 0x2D96 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2B78 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2BB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2BC0 PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x2BE8 DUP9 DUP3 PUSH2 0x2D01 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2BD2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2C0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2C1D PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x60 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x2C42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 PUSH2 0x2C58 DUP9 DUP3 PUSH2 0x2DF4 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2C45 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2C81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2C8F PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x2CB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 PUSH2 0x2CCA DUP9 DUP3 PUSH2 0x2CEB JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2CB7 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1E7B DUP2 PUSH2 0x4EE7 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4EF0 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1E7B DUP2 PUSH2 0x4EF0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2D20 PUSH2 0x2A74 DUP3 PUSH2 0x4DDD JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x2D3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D47 DUP4 DUP3 DUP5 PUSH2 0x4E87 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2D6F PUSH2 0x2A74 DUP3 PUSH2 0x4DDD JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x2D8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D47 DUP4 DUP3 DUP5 PUSH2 0x4E93 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4EF9 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4F02 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2DBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2DD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x2DED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E10 PUSH1 0x60 PUSH2 0x4D97 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E1E DUP5 DUP5 PUSH2 0x2CEB JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x2E2F DUP5 DUP5 DUP4 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x2E43 DUP5 DUP3 DUP6 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6B PUSH1 0x80 PUSH2 0x4D97 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E79 DUP5 DUP5 PUSH2 0x2CEB JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x2E8A DUP5 DUP5 DUP4 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x2E9E DUP5 DUP3 DUP6 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x2EB2 DUP5 DUP3 DUP6 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4F0F JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1E7B DUP2 PUSH2 0x4F18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2EE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2A4A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2F13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2F1F DUP9 DUP9 PUSH2 0x2A4A JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x2F30 DUP9 DUP3 DUP10 ADD PUSH2 0x2E4F JUMP JUMPDEST SWAP5 POP POP PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2F4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F58 DUP9 DUP3 DUP10 ADD PUSH2 0x2BFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2F74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F80 DUP9 DUP3 DUP10 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xE0 PUSH2 0x2F91 DUP9 DUP3 DUP10 ADD PUSH2 0x2A4A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2FB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2FCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FD9 DUP10 DUP3 DUP11 ADD PUSH2 0x2A55 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2FF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3001 DUP10 DUP3 DUP11 ADD PUSH2 0x2C70 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x301D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3029 DUP10 DUP3 DUP11 ADD PUSH2 0x2BA1 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3045 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3051 DUP10 DUP3 DUP11 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x306D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3079 DUP10 DUP3 DUP11 ADD PUSH2 0x2D01 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 PUSH2 0x308A DUP10 DUP3 DUP11 ADD PUSH2 0x2DA1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x30BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2EF2 DUP5 DUP3 DUP6 ADD PUSH2 0x2BFE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2CE0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2CF6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x312F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2EF2 DUP5 DUP3 DUP6 ADD PUSH2 0x2D50 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x314D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2E4F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x316B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x318A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3196 DUP6 DUP6 PUSH2 0x2CEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x31A7 DUP6 DUP3 DUP7 ADD PUSH2 0x2A4A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x31C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x31D0 DUP6 DUP6 PUSH2 0x2CEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x31A7 DUP6 DUP3 DUP7 ADD PUSH2 0x2EBE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x31F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3203 DUP8 DUP8 PUSH2 0x2CEB JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x3214 DUP8 DUP3 DUP9 ADD PUSH2 0x2EBE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x323C DUP8 DUP3 DUP9 ADD PUSH2 0x2DAC JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x326C DUP9 DUP9 PUSH2 0x2CEB JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x327D DUP9 DUP3 DUP10 ADD PUSH2 0x2EBE JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x328E DUP9 DUP3 DUP10 ADD PUSH2 0x2EBE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x329F DUP9 DUP3 DUP10 ADD PUSH2 0x2CEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x2F91 DUP9 DUP3 DUP10 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2EC9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32DA DUP4 DUP4 PUSH2 0x3309 JUMP JUMPDEST POP POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2394 DUP4 DUP4 PUSH2 0x34AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32DA DUP4 DUP4 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E66 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E23 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x331D DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x3327 DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP PUSH2 0x3332 DUP4 PUSH2 0x4E04 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3360 JUMPI DUP2 MLOAD PUSH2 0x334A DUP9 DUP3 PUSH2 0x32CE JUMP JUMPDEST SWAP8 POP PUSH2 0x3355 DUP4 PUSH2 0x4E04 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3336 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3376 DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x3380 DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x3392 DUP6 PUSH2 0x4E04 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x33CC JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x33AF DUP6 DUP3 PUSH2 0x32E2 JUMP JUMPDEST SWAP5 POP PUSH2 0x33BA DUP4 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x20 SWAP11 SWAP1 SWAP11 ADD SWAP10 SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3396 JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33E4 DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x33EE DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x3400 DUP6 PUSH2 0x4E04 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x33CC JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x341D DUP6 DUP3 PUSH2 0x32E2 JUMP JUMPDEST SWAP5 POP PUSH2 0x3428 DUP4 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x20 SWAP11 SWAP1 SWAP11 ADD SWAP10 SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3404 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3445 DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x344F DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP PUSH2 0x345A DUP4 PUSH2 0x4E04 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3360 JUMPI DUP2 MLOAD PUSH2 0x3472 DUP9 DUP3 PUSH2 0x32EE JUMP JUMPDEST SWAP8 POP PUSH2 0x347D DUP4 PUSH2 0x4E04 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x345E JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E2E JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x239E JUMP JUMPDEST PUSH2 0x3303 PUSH2 0x34A6 DUP3 PUSH2 0x239E JUMP JUMPDEST PUSH2 0x239E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B6 DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x34C0 DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP PUSH2 0x34D0 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x4E93 JUMP JUMPDEST PUSH2 0x34D9 DUP2 PUSH2 0x4EBF JUMP JUMPDEST SWAP1 SWAP4 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH1 0x1 DUP2 AND PUSH1 0x0 DUP2 EQ PUSH2 0x3500 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x3526 JUMPI PUSH2 0x3565 JUMP JUMPDEST PUSH1 0x7F PUSH1 0x2 DUP4 DIV AND PUSH2 0x3511 DUP2 DUP8 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0xFF NOT DUP5 AND DUP2 MSTORE SWAP6 POP POP PUSH1 0x20 DUP6 ADD SWAP3 POP PUSH2 0x3565 JUMP JUMPDEST PUSH1 0x2 DUP3 DIV PUSH2 0x3534 DUP2 DUP8 PUSH2 0x4E1A JUMP JUMPDEST SWAP6 POP PUSH2 0x353F DUP6 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x355E JUMPI DUP2 SLOAD DUP9 DUP3 ADD MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0x3542 JUMP JUMPDEST DUP8 ADD SWAP5 POP POP POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E33 JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E71 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x358B DUP4 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP PUSH2 0x3598 DUP4 DUP6 DUP5 PUSH2 0x4E87 JUMP JUMPDEST PUSH2 0x34D9 DUP4 PUSH2 0x4EBF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x35AE PUSH1 0x41 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C69642070726F706F73616C20636F6E666967206C656E6774 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0xFB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3605 PUSH1 0x41 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D61782070726F706F73616C207468726573686F6C PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0xFA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x365C PUSH1 0x32 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63617374566F7465496E7465726E616C3A DUP2 MSTORE PUSH18 0x20696E76616C696420766F74652074797065 PUSH1 0x70 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x36B0 PUSH1 0x47 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A2076616C69646174696F6E20706172616D73206E6F7420636F6E66696775 PUSH1 0x20 DUP3 ADD MSTORE PUSH7 0x1C9959081E595D PUSH1 0xCA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x370D PUSH1 0x28 DUP4 PUSH2 0x1471 JUMP JUMPDEST PUSH32 0x42616C6C6F742875696E743235362070726F706F73616C49642C75696E743820 DUP2 MSTORE PUSH8 0x737570706F727429 PUSH1 0xC0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3757 PUSH1 0x2A DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A5F73657450656E64696E6741646D696E3A20 DUP2 MSTORE PUSH10 0x61646D696E206F6E6C79 PUSH1 0xB0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37A3 PUSH1 0x55 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A71756575654F72526576657274496E7465 DUP2 MSTORE PUSH32 0x726E616C3A206964656E746963616C2070726F706F73616C20616374696F6E20 PUSH1 0x20 DUP3 ADD MSTORE PUSH21 0x616C72656164792071756575656420617420657461 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3820 PUSH1 0x3C DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D696E20766F74696E6720706572696F6400000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x386D PUSH1 0x56 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A6E756D626572 DUP2 MSTORE PUSH32 0x206F662074696D656C6F636B732073686F756C64206D61746368206E756D6265 PUSH1 0x20 DUP3 ADD MSTORE PUSH22 0x72206F6620676F7665726E616E636520726F75746573 PUSH1 0x50 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38EB PUSH1 0x31 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A20476F7665726E6F72 DUP2 MSTORE PUSH17 0x20427261766F206E6F7420616374697665 PUSH1 0x78 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x393E PUSH1 0x2 DUP4 PUSH2 0x1471 JUMP JUMPDEST PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x395C PUSH1 0x31 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63617374566F7465496E7465726E616C3A DUP2 MSTORE PUSH17 0x81D9BDD1A5B99C81A5CC818DB1BDCD959 PUSH1 0x7A SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39AF PUSH1 0x34 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63617374566F7465496E7465726E616C3A DUP2 MSTORE PUSH20 0x81D9BDD195C88185B1C9958591E481D9BDD1959 PUSH1 0x62 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A05 PUSH1 0x34 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A20696E76616C DUP2 MSTORE PUSH20 0x696420787673207661756C742061646472657373 PUSH1 0x60 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A5B PUSH1 0x45 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A657865637574653A2070726F706F73616C DUP2 MSTORE PUSH32 0x2063616E206F6E6C792062652065786563757465642069662069742069732071 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0x1D595D5959 PUSH1 0xDA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AC8 PUSH1 0x2F DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63617374566F746542795369673A20696E DUP2 MSTORE PUSH15 0x76616C6964207369676E6174757265 PUSH1 0x88 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B19 PUSH1 0x2D DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH13 0x733A2061646D696E206F6E6C79 PUSH1 0x98 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B56 PUSH1 0x44 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A2070726F706F73616C DUP2 MSTORE PUSH32 0x2066756E6374696F6E20696E666F726D6174696F6E206172697479206D69736D PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0xC2E8C6D PUSH1 0xE3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BC2 PUSH1 0x25 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A2061646D696E DUP2 MSTORE PUSH5 0x206F6E6C79 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C09 PUSH1 0x32 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A2063616E6E6F DUP2 MSTORE PUSH18 0x7420696E697469616C697A65207477696365 PUSH1 0x70 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C5D PUSH1 0x44 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A71756575653A2070726F706F73616C2063 DUP2 MSTORE PUSH32 0x616E206F6E6C7920626520717565756564206966206974206973207375636365 PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0x19591959 PUSH1 0xE2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3CC9 PUSH1 0x11 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH17 0x6164646974696F6E206F766572666C6F77 PUSH1 0x78 SHL DUP2 MSTORE PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3CF6 PUSH1 0x43 DUP4 PUSH2 0x1471 JUMP JUMPDEST PUSH32 0x454950373132446F6D61696E28737472696E67206E616D652C75696E74323536 DUP2 MSTORE PUSH32 0x20636861696E49642C6164647265737320766572696679696E67436F6E747261 PUSH1 0x20 DUP3 ADD MSTORE PUSH3 0x637429 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x43 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D61 PUSH1 0x2E DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A73657456616C69646174696F6E50617261 DUP2 MSTORE PUSH14 0x6D733A2061646D696E206F6E6C79 PUSH1 0x90 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DB1 PUSH1 0x30 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F696E6974696174653A2063616E206F6E DUP2 MSTORE PUSH16 0x6C7920696E697469617465206F6E6365 PUSH1 0x80 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E03 PUSH1 0x2C DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A206D7573742070726F DUP2 MSTORE PUSH12 0x7669646520616374696F6E73 PUSH1 0xA0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E51 PUSH1 0x3B DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D617820766F74696E672064656C61790000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E9E PUSH1 0x2E DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A5F61636365707441646D696E3A2070656E64 DUP2 MSTORE PUSH14 0x696E672061646D696E206F6E6C79 PUSH1 0x90 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EEE PUSH1 0x3B DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D696E20766F74696E672064656C61790000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F3B PUSH1 0x2F DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63616E63656C3A2070726F706F73657220 DUP2 MSTORE PUSH15 0x18589BDD99481D1A1C995CDA1BDB19 PUSH1 0x8A SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F8C PUSH1 0x2B DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A20696E76616C DUP2 MSTORE PUSH11 0x34B21033BAB0B93234B0B7 PUSH1 0xA9 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD9 PUSH1 0x28 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A20746F6F206D616E79 DUP2 MSTORE PUSH8 0x20616374696F6E73 PUSH1 0xC0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4023 PUSH1 0x59 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A206F6E65206C697665 DUP2 MSTORE PUSH32 0x2070726F706F73616C207065722070726F706F7365722C20666F756E6420616E PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x20616C72656164792070656E64696E672070726F706F73616C00000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40A8 PUSH1 0x34 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F73657450726F706F73616C4D61784F70 DUP2 MSTORE PUSH20 0x65726174696F6E733A2061646D696E206F6E6C79 PUSH1 0x60 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40FE PUSH1 0x32 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A696E76616C69 DUP2 MSTORE PUSH18 0x642074696D656C6F636B2061646472657373 PUSH1 0x70 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4152 PUSH1 0x58 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A206F6E65206C697665 DUP2 MSTORE PUSH32 0x2070726F706F73616C207065722070726F706F7365722C20666F756E6420616E PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x20616C7265616479206163746976652070726F706F73616C0000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B PUSH1 0x0 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x41E4 PUSH1 0x24 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F696E6974696174653A2061646D696E20 DUP2 MSTORE PUSH4 0x6F6E6C79 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x422A PUSH1 0x3F DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A2070726F706F736572 DUP2 MSTORE PUSH32 0x20766F7465732062656C6F772070726F706F73616C207468726573686F6C6400 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4289 PUSH1 0x32 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A73657456616C69646174696F6E50617261 DUP2 MSTORE PUSH18 0x6D733A20696E76616C696420706172616D73 PUSH1 0x70 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x42DD PUSH1 0x36 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63616E63656C3A2063616E6E6F74206361 DUP2 MSTORE PUSH22 0x1B98D95B08195E1958DD5D1959081C1C9BDC1BDCD85B PUSH1 0x52 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4335 PUSH1 0x29 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A73746174653A20696E76616C6964207072 DUP2 MSTORE PUSH9 0x1BDC1BDCD85B081A59 PUSH1 0xBA SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4380 PUSH1 0x41 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D696E2070726F706F73616C207468726573686F6C PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0xFA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43D7 PUSH1 0x5D DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A6E756D626572 DUP2 MSTORE PUSH32 0x206F662070726F706F73616C20636F6E666967732073686F756C64206D617463 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x68206E756D626572206F6620676F7665726E616E636520726F75746573000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x445C PUSH1 0x3B DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F736574477561726469616E3A2063616E DUP2 MSTORE PUSH32 0x6E6F74206C69766520776974686F7574206120677561726469616E0000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44BB PUSH1 0x33 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F736574477561726469616E3A2061646D DUP2 MSTORE PUSH19 0x696E206F7220677561726469616E206F6E6C79 PUSH1 0x68 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4510 PUSH1 0x15 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH21 0x7375627472616374696F6E20756E646572666C6F77 PUSH1 0x58 SHL DUP2 MSTORE PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4541 PUSH1 0x3C DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D617820766F74696E6720706572696F6400000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x4592 DUP5 DUP3 PUSH2 0x3488 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x45A5 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x45BE JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x45B8 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x45D0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E54 JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E7C JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E5A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x3700 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45EF DUP3 PUSH2 0x3931 JUMP JUMPDEST SWAP2 POP PUSH2 0x45FB DUP3 DUP6 PUSH2 0x349A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x460B DUP3 DUP5 PUSH2 0x349A JUMP JUMPDEST POP PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x3CE9 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x3309 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x463C DUP3 DUP6 PUSH2 0x32FA JUMP JUMPDEST PUSH2 0x2394 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4657 DUP3 DUP6 PUSH2 0x3309 JUMP JUMPDEST PUSH2 0x2394 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3309 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x463C DUP3 DUP6 PUSH2 0x3309 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x4680 DUP3 DUP9 PUSH2 0x3309 JUMP JUMPDEST PUSH2 0x468D PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x469F DUP2 DUP7 PUSH2 0x34AB JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x46B3 DUP2 DUP6 PUSH2 0x34AB JUMP JUMPDEST SWAP1 POP PUSH2 0xA7C PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x46D0 DUP3 DUP9 PUSH2 0x3309 JUMP JUMPDEST PUSH2 0x46DD PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x46EF DUP2 DUP7 PUSH2 0x34E3 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x46B3 DUP2 DUP6 PUSH2 0x34E3 JUMP JUMPDEST PUSH1 0x80 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x4714 DUP2 DUP8 PUSH2 0x3312 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4728 DUP2 DUP7 PUSH2 0x343A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x473C DUP2 DUP6 PUSH2 0x33D9 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xA7C DUP2 DUP5 PUSH2 0x336B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x476C DUP3 DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4779 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4786 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4793 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x3309 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x47AA DUP3 DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x47B7 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x2EF2 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x45BE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x47D2 DUP3 DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x47DF PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x45BE JUMP JUMPDEST PUSH2 0x47EC PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4793 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x356D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x3576 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2394 DUP2 DUP5 PUSH2 0x34AB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x35A1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x35F8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x364F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x36A3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x374A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3796 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3813 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3860 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x38DE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x394F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x39A2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x39F8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3ABB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3B0C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3B49 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3BB5 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3BFC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3CBC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3D54 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3DA4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3DF6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3E44 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3E91 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3EE1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3F2E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3F7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3FCC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4016 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x409B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x40F1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4145 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x41D7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x421D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x427C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x42D0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4328 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4373 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x444F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x44AE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4503 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4534 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x4581 JUMP JUMPDEST PUSH2 0x140 DUP2 ADD PUSH2 0x4B03 DUP3 DUP14 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4B10 PUSH1 0x20 DUP4 ADD DUP13 PUSH2 0x32FA JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4B22 DUP2 DUP12 PUSH2 0x3312 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4B36 DUP2 DUP11 PUSH2 0x343A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x4B4A DUP2 DUP10 PUSH2 0x33D9 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x4B5E DUP2 DUP9 PUSH2 0x336B JUMP JUMPDEST SWAP1 POP PUSH2 0x4B6D PUSH1 0xC0 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4B7A PUSH1 0xE0 DUP4 ADD DUP7 PUSH2 0x3491 JUMP JUMPDEST DUP2 DUP2 SUB PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x4B8D DUP2 DUP6 PUSH2 0x34AB JUMP JUMPDEST SWAP1 POP PUSH2 0x4B9D PUSH2 0x120 DUP4 ADD DUP5 PUSH2 0x45BE JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD PUSH2 0x4BBB DUP3 DUP15 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4BC8 PUSH1 0x20 DUP4 ADD DUP14 PUSH2 0x3309 JUMP JUMPDEST PUSH2 0x4BD5 PUSH1 0x40 DUP4 ADD DUP13 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4BE2 PUSH1 0x60 DUP4 ADD DUP12 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4BEF PUSH1 0x80 DUP4 ADD DUP11 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4BFC PUSH1 0xA0 DUP4 ADD DUP10 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4C09 PUSH1 0xC0 DUP4 ADD DUP9 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4C16 PUSH1 0xE0 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4C24 PUSH2 0x100 DUP4 ADD DUP7 PUSH2 0x3488 JUMP JUMPDEST PUSH2 0x4C32 PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x3488 JUMP JUMPDEST PUSH2 0x4C40 PUSH2 0x140 DUP4 ADD DUP5 PUSH2 0x45BE JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x463C DUP3 DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4C6C DUP3 DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4C79 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x2EF2 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4C94 DUP3 DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x47DF PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD PUSH2 0x4CB0 DUP3 DUP12 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CBD PUSH1 0x20 DUP4 ADD DUP11 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CCA PUSH1 0x40 DUP4 ADD DUP10 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CD7 PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CE4 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CF1 PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CFE PUSH1 0xC0 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4D0B PUSH1 0xE0 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4D26 DUP3 DUP9 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4D33 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x45BE JUMP JUMPDEST PUSH2 0x4D40 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x45C7 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4D53 DUP2 DUP5 DUP7 PUSH2 0x357F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4D6C DUP3 DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4D79 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x45BE JUMP JUMPDEST PUSH2 0x4D86 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x45C7 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4793 DUP2 PUSH2 0x41CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4DB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x4DD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x4DF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E48 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E23 JUMP JUMPDEST DUP1 PUSH2 0x1471 DUP2 PUSH2 0x4EC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E33 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E3E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E5A JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4EAE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4E96 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x45B8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 JUMP JUMPDEST PUSH1 0x8 DUP2 LT PUSH2 0x2A47 JUMPI INVALID JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E23 JUMP JUMPDEST DUP2 EQ PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E2E JUMP JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x239E JUMP JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E33 JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E54 JUMP JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E5A JUMP INVALID SELFBALANCE PUSH16 0x7665726E6F72427261766F3A3A736574 POP PUSH19 0x6F706F73616C436F6E666967A365627A7A7231 PC KECCAK256 PUSH18 0x31C586F8C469C7DBA84F67AEA57B19B3C03E 0x4D 0xC9 0xE3 SELFBALANCE 0xD6 0xEE 0xEE 0xE9 PUSH28 0x89DA13CF6C6578706572696D656E74616CF564736F6C634300051000 BLOCKHASH ","sourceMap":"4581:23593:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4581:23593:0;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102535760003560e01c806346416f9211610146578063da35c664116100c3578063e9c714f211610087578063e9c714f2146104d5578063ee9799ee146104dd578063f851a440146104f0578063f9d28b80146104f8578063fc4eee421461050b578063fe0d94c11461051357610253565b8063da35c6641461047f578063ddf0b00914610487578063deaaa7cc1461049a578063e23a9a52146104a2578063e38e8c0f146104c257610253565b80637bdbe4d01161010a5780637bdbe4d014610441578063b58131b014610449578063b71d1a0c14610451578063bb08c32114610464578063d33219b41461047757610253565b806346416f92146103f8578063567813881461040b5780635c60da1b1461041e578063791f5d23146104265780637b3c71d31461042e57610253565b806325fd935a116101d45780633932abb1116101985780633932abb1146103a25780633bccf4fd146103aa5780633e4f49e6146103bd57806340e58ee5146103dd578063452a9320146103f057610253565b806325fd935a146103285780632678224714610330578063328dd9821461034557806334cf39091461036857806335a87de21461038057610253565b80631b9ce5751161021b5780631b9ce575146102db5780631e75adf2146102f05780631ebcfefd1461030557806320606b701461031857806324bc1a641461032057610253565b8063013cf08b1461025857806302a251a31461028b57806306fdde03146102a0578063164a1ab1146102b557806317977c61146102c8575b600080fd5b61026b610266366004613159565b610526565b6040516102829b9a99989796959493929190614bac565b60405180910390f35b610293610592565b6040516102829190614750565b6102a8610598565b6040516102829190614815565b6102936102c3366004612f9e565b6105c8565b6102936102d6366004612ed4565b610a86565b6102e3610a98565b60405161028291906147f9565b6103036102fe366004613097565b610aa7565b005b610303610313366004613159565b610d8d565b610293610dfd565b610293610e14565b610293610e22565b610338610e30565b6040516102829190614620565b610358610353366004613159565b610e3f565b6040516102829493929190614703565b6103706110ce565b6040516102829493929190614c86565b61039361038e366004613159565b6110dd565b60405161028293929190614c5e565b6102936110fe565b6103036103b8366004613248565b611104565b6103d06103cb366004613159565b6112dc565b6040516102829190614807565b6103036103eb366004613159565b611476565b61033861170c565b610303610406366004612efa565b61171b565b6103036104193660046131b1565b611925565b61033861196f565b61029361197e565b61030361043c3660046131e1565b61198c565b6102936119dc565b6102936119e2565b61030361045f366004612ed4565b6119e8565b61030361047236600461313b565b611a65565b6102e3611b5f565b610293611b6e565b610303610495366004613159565b611b74565b610293611e08565b6104b56104b0366004613177565b611e14565b6040516102829190614ae6565b6103036104d0366004612ed4565b611e81565b610303611f39565b6102e36104eb366004613159565b612017565b610338612032565b610303610506366004612ed4565b612041565b61029361218e565b610303610521366004613159565b612194565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c880154600e9098015496986001600160a01b039096169794969395929492939192909160ff808316926101009004811691168b565b60045481565b6040518060400160405280601481526020017356656e757320476f7665726e6f7220427261766f60601b81525081565b6000600654600014156105f65760405162461bcd60e51b81526004016105ed906148a6565b60405180910390fd5b600e600083600281111561060657fe5b60ff1681526020810191909152604001600020600201546009546001600160a01b031663782d6fe13361063a436001612347565b6040518363ffffffff1660e01b815260040161065792919061462e565b60206040518083038186803b15801561066f57600080fd5b505afa158015610683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106a791908101906132b0565b6001600160601b031610156106ce5760405162461bcd60e51b81526004016105ed90614a46565b855187511480156106e0575084518751145b80156106ed575083518751145b6107095760405162461bcd60e51b81526004016105ed90614916565b86516107275760405162461bcd60e51b81526004016105ed90614986565b600c548751111561074a5760405162461bcd60e51b81526004016105ed906149e6565b336000908152600b602052604090205480156107c757600061076b826112dc565b9050600181600781111561077b57fe5b14156107995760405162461bcd60e51b81526004016105ed90614a26565b60008160078111156107a757fe5b14156107c55760405162461bcd60e51b81526004016105ed906149f6565b505b60006107f743600e60008760028111156107dd57fe5b60ff1681526020019081526020016000206000015461236f565b9050600061082982600e600088600281111561080f57fe5b60ff1681526020019081526020016000206001015461236f565b600780546001019055905061083c61270e565b604051806101e001604052806007548152602001336001600160a01b03168152602001600081526020018c81526020018b81526020018a81526020018981526020018481526020018381526020016000815260200160008152602001600081526020016000151581526020016000151581526020018760028111156108bd57fe5b60ff16905280516000908152600a602090815260409182902083518155818401516001820180546001600160a01b0319166001600160a01b039092169190911790559183015160028301556060830151805193945084936109249260038501920190612794565b50608082015180516109409160048401916020909101906127f9565b5060a0820151805161095c916005840191602090910190612840565b5060c08201518051610978916006840191602090910190612899565b5060e082015160078201556101008083015160088301556101208301516009830155610140830151600a830155610160830151600b80840191909155610180840151600c840180546101a087015160ff199182169315159390931761ff0019169215159094029190911790556101c090930151600e909201805490911660ff90921691909117905581516020808401516001600160a01b0316600090815292905260409091205580517fc8df7ff219f3c0358e14500814d8b62b443a4bebf3a596baa60b9295b1cf1bde90338d8d8d8d89898f8f6002811115610a5757fe5b604051610a6d9a99989796959493929190614af4565b60405180910390a15193505050505b9695505050505050565b600b6020526000908152604090205481565b6009546001600160a01b031681565b6000546001600160a01b03163314610ad15760405162461bcd60e51b81526004016105ed90614906565b60105415801590610ae3575060115415155b8015610af0575060125415155b8015610afd575060135415155b610b195760405162461bcd60e51b81526004016105ed90614856565b8051610b2361239b565b60ff168114610b445760405162461bcd60e51b81526004016105ed90614826565b60005b81811015610d8857601060000154838281518110610b6157fe5b6020026020010151602001511015610b8b5760405162461bcd60e51b81526004016105ed90614886565b601060010154838281518110610b9d57fe5b6020026020010151602001511115610bc75760405162461bcd60e51b81526004016105ed90614ad6565b601060020154838281518110610bd957fe5b6020026020010151600001511015610c035760405162461bcd60e51b81526004016105ed906149b6565b601060030154838281518110610c1557fe5b6020026020010151600001511115610c3f5760405162461bcd60e51b81526004016105ed90614996565b691fc3842bd1f071c00000838281518110610c5657fe5b6020026020010151604001511015610c805760405162461bcd60e51b81526004016105ed90614a86565b693f870857a3e0e3800000838281518110610c9757fe5b6020026020010151604001511115610cc15760405162461bcd60e51b81526004016105ed90614836565b828181518110610ccd57fe5b6020908102919091018101516000838152600e835260409081902082518155928201516001840155015160029091015582517f99382998f89cd4c8aec7ae5d6deca4b4b0bfa01691740ccd702bf76b6a6816d290849083908110610d2d57fe5b602002602001015160200151848381518110610d4557fe5b602002602001015160000151858481518110610d5d57fe5b602002602001015160400151604051610d7893929190614c5e565b60405180910390a1600101610b47565b505050565b6000546001600160a01b03163314610db75760405162461bcd60e51b81526004016105ed90614a06565b600c8054908290556040517fd03b3c3c5c1446bcdd31423061041c94ca3bc5450fe7ccfb0f636f4c420de87e90610df19083908590614c50565b60405180910390a15050565b604051610e0990614615565b604051809103902081565b697f0e10af47c1c700000081565b693f870857a3e0e380000081565b6001546001600160a01b031681565b6060806060806000600a600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610ec157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ea3575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610f1357602002820191906000526020600020905b815481526020019060010190808311610eff575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610fe65760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610fd25780601f10610fa757610100808354040283529160200191610fd2565b820191906000526020600020905b815481529060010190602001808311610fb557829003601f168201915b505050505081526020019060010190610f3b565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156110b85760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156110a45780601f10611079576101008083540402835291602001916110a4565b820191906000526020600020905b81548152906001019060200180831161108757829003601f168201915b50505050508152602001906001019061100d565b5050505090509450945094509450509193509193565b60105460115460125460135484565b600e6020526000908152604090208054600182015460029092015490919083565b60035481565b600060405161111290614615565b60408051918290038220828201909152601482527356656e757320476f7665726e6f7220427261766f60601b6020909201919091527f157d76627a3b71c0167806f5879f7a61d3e301322f3a3b9f900315f15937671a6111706123a1565b30604051602001611184949392919061475e565b60405160208183030381529060405280519060200120905060006040516111aa906145d9565b6040519081900381206111c3918990899060200161479c565b604051602081830303815290604052805190602001209050600082826040516020016111f09291906145e4565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161122d94939291906147c4565b6020604051602081039080840390855afa15801561124f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112825760405162461bcd60e51b81526004016105ed906148f6565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a6112ba858e8e6123a5565b6040516112c993929190614d5e565b60405180910390a2505050505050505050565b600081600754101580156112f1575060065482115b61130d5760405162461bcd60e51b81526004016105ed90614a76565b6000828152600a60205260409020600c81015460ff1615611332576002915050611471565b80600701544311611347576000915050611471565b8060080154431161135c576001915050611471565b80600a015481600901541115806113805750697f0e10af47c1c70000008160090154105b1561138f576003915050611471565b60028101546113a2576004915050611471565b600c810154610100900460ff16156113be576007915050611471565b6002810154600e82015460ff166000908152600f60209081526040918290205482516360d143f160e11b8152925161145b94936001600160a01b039092169263c1a287e29260048082019391829003018186803b15801561141e57600080fd5b505afa158015611432573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061145691908101906130e9565b61236f565b421061146b576006915050611471565b60059150505b919050565b6007611481826112dc565b600781111561148c57fe5b14156114aa5760405162461bcd60e51b81526004016105ed90614a66565b6000818152600a60205260409020600d546001600160a01b03163314806114dd575060018101546001600160a01b031633145b806115a05750600e8181015460ff16600090815260209190915260409020600201546009546001808401546001600160a01b039283169263782d6fe192911690611528904390612347565b6040518363ffffffff1660e01b8152600401611545929190614664565b60206040518083038186803b15801561155d57600080fd5b505afa158015611571573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061159591908101906132b0565b6001600160601b0316105b6115bc5760405162461bcd60e51b81526004016105ed906149c6565b600c8101805460ff1916600117905560005b60038201548110156116dc57600e82015460ff166000908152600f60205260409020546003830180546001600160a01b039092169163591fcdfe91908490811061161457fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061163c57fe5b906000526020600020015485600501858154811061165657fe5b9060005260206000200186600601868154811061166f57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161169e9594939291906146c2565b600060405180830381600087803b1580156116b857600080fd5b505af11580156116cc573d6000803e3d6000fd5b5050600190920191506115ce9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c82604051610df19190614750565b600d546001600160a01b031681565b60008052600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec375546001600160a01b03161561176c5760405162461bcd60e51b81526004016105ed90614936565b6000546001600160a01b031633146117965760405162461bcd60e51b81526004016105ed90614926565b6001600160a01b0385166117bc5760405162461bcd60e51b81526004016105ed906148d6565b6001600160a01b0381166117e25760405162461bcd60e51b81526004016105ed906149d6565b6117ea61239b565b60ff1682511461180c5760405162461bcd60e51b81526004016105ed90614896565b61181461239b565b60ff168351146118365760405162461bcd60e51b81526004016105ed90614a96565b600980546001600160a01b038088166001600160a01b031992831617909255600a600c55600d80549284169290911691909117905561187484611a65565b61187d83610aa7565b815160005b8181101561191c5760006001600160a01b03168482815181106118a157fe5b60200260200101516001600160a01b031614156118d05760405162461bcd60e51b81526004016105ed90614a16565b8381815181106118dc57fe5b6020908102919091018101516000838152600f909252604090912080546001600160a01b0319166001600160a01b03909216919091179055600101611882565b50505050505050565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836119548483836123a5565b60405161196393929190614d5e565b60405180910390a25050565b6002546001600160a01b031681565b691fc3842bd1f071c0000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda485856119bb8483836123a5565b86866040516119ce959493929190614d18565b60405180910390a250505050565b600c5481565b60055481565b6000546001600160a01b03163314611a125760405162461bcd60e51b81526004016105ed90614866565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a990610df19083908590614649565b6000546001600160a01b03163314611a8f5760405162461bcd60e51b81526004016105ed90614966565b805115801590611aa3575060008160400151115b8015611ab6575080606001518160400151105b8015611ac6575060208101518151105b611ae25760405162461bcd60e51b81526004016105ed90614a56565b60105481516011546020840151601254604080870151601354606089015192517fc90c7ad68c13a491443f1c63dafa18b365428ee69170415afe234c16dc6f650d98611b3998909790969095909490939291614ca1565b60405180910390a180516010556020810151601155604081015160125560600151601355565b6008546001600160a01b031681565b60075481565b6004611b7f826112dc565b6007811115611b8a57fe5b14611ba75760405162461bcd60e51b81526004016105ed90614946565b6000818152600a60209081526040808320600e81015460ff168452600f8352818420548251630d48571f60e31b81529251919493611c109342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b15801561141e57600080fd5b905060005b6003830154811015611dc157611db9836003018281548110611c3357fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611c5b57fe5b9060005260206000200154856005018481548110611c7557fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611d035780601f10611cd857610100808354040283529160200191611d03565b820191906000526020600020905b815481529060010190602001808311611ce657829003601f168201915b5050505050866006018581548110611d1757fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611da55780601f10611d7a57610100808354040283529160200191611da5565b820191906000526020600020905b815481529060010190602001808311611d8857829003601f168201915b50505050600e89015488915060ff16612595565b600101611c15565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611dfb9085908490614c50565b60405180910390a1505050565b604051610e09906145d9565b611e1c6128f2565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600d546001600160a01b0316331480611ea457506000546001600160a01b031633145b611ec05760405162461bcd60e51b81526004016105ed90614ab6565b6001600160a01b038116611ee65760405162461bcd60e51b81526004016105ed90614aa6565b600d80546001600160a01b038381166001600160a01b03198316179092556040519116907f08fdaf06427a2010e5958f4329b566993472d14ce81d3f16ce7f2a2660da98e390610df19083908590614649565b6001546001600160a01b031633148015611f5257503315155b611f6e5760405162461bcd60e51b81526004016105ed906149a6565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611fd2928692911690614649565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a991610df19184916001600160a01b031690614649565b600f602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b6000546001600160a01b0316331461206b5760405162461bcd60e51b81526004016105ed90614a36565b6006541561208b5760405162461bcd60e51b81526004016105ed90614976565b806001600160a01b031663da35c6646040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156120c657600080fd5b505af11580156120da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120fe91908101906130e9565b600781905560065560005b61211161239b565b60ff1681101561218a576000818152600f6020526040808220548151630e18b68160e01b815291516001600160a01b0390911692630e18b681926004808201939182900301818387803b15801561216757600080fd5b505af115801561217b573d6000803e3d6000fd5b50505050806001019050612109565b5050565b60065481565b600561219f826112dc565b60078111156121aa57fe5b146121c75760405162461bcd60e51b81526004016105ed906148e6565b6000818152600a60205260408120600c8101805461ff001916610100179055905b600382015481101561231757600e82015460ff166000908152600f60205260409020546003830180546001600160a01b0390921691630825f38f91908490811061222e57fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061225657fe5b906000526020600020015485600501858154811061227057fe5b9060005260206000200186600601868154811061228957fe5b9060005260206000200187600201546040518663ffffffff1660e01b81526004016122b89594939291906146c2565b600060405180830381600087803b1580156122d257600080fd5b505af11580156122e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261230e9190810190613107565b506001016121e8565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051610df19190614750565b6000828211156123695760405162461bcd60e51b81526004016105ed90614ac6565b50900390565b6000828201838110156123945760405162461bcd60e51b81526004016105ed90614956565b9392505050565b60035b90565b4690565b600060016123b2846112dc565b60078111156123bd57fe5b146123da5760405162461bcd60e51b81526004016105ed906148b6565b60028260ff1611156123fe5760405162461bcd60e51b81526004016105ed90614846565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156124475760405162461bcd60e51b81526004016105ed906148c6565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe19161247d918b91600401614664565b60206040518083038186803b15801561249557600080fd5b505afa1580156124a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124cd91908101906132b0565b905060ff85166124f8576124ee83600a0154826001600160601b031661236f565b600a84015561254e565b8460ff16600114156125255761251b8360090154826001600160601b031661236f565b600984015561254e565b8460ff166002141561254e5761254883600b0154826001600160601b031661236f565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150509392505050565b60ff81166000908152600f60209081526040918290205491516001600160a01b039092169163f2b06537916125d4918a918a918a918a918a9101614672565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016126069190614750565b60206040518083038186803b15801561261e57600080fd5b505afa158015612632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061265691908101906130cb565b156126735760405162461bcd60e51b81526004016105ed90614876565b60ff81166000908152600f602052604090819020549051633a66f90160e01b81526001600160a01b0390911690633a66f901906126bc9089908990899089908990600401614672565b602060405180830381600087803b1580156126d657600080fd5b505af11580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061191c91908101906130e9565b604051806101e001604052806000815260200160006001600160a01b0316815260200160008152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600015158152602001600060ff1681525090565b8280548282559060005260206000209081019282156127e9579160200282015b828111156127e957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906127b4565b506127f5929150612912565b5090565b828054828255906000526020600020908101928215612834579160200282015b82811115612834578251825591602001919060010190612819565b506127f5929150612936565b82805482825590600052602060002090810192821561288d579160200282015b8281111561288d578251805161287d918491602090910190612950565b5091602001919060010190612860565b506127f59291506129bd565b8280548282559060005260206000209081019282156128e6579160200282015b828111156128e657825180516128d6918491602090910190612950565b50916020019190600101906128b9565b506127f59291506129e0565b604080516060810182526000808252602082018190529181019190915290565b61239e91905b808211156127f55780546001600160a01b0319168155600101612918565b61239e91905b808211156127f5576000815560010161293c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061299157805160ff1916838001178555612834565b828001600101855582156128345791820182811115612834578251825591602001919060010190612819565b61239e91905b808211156127f55760006129d78282612a03565b506001016129c3565b61239e91905b808211156127f55760006129fa8282612a03565b506001016129e6565b50805460018160011615610100020316600290046000825580601f10612a295750612a47565b601f016020900490600052602060002090810190612a479190612936565b50565b8035611e7b81614ed3565b600082601f830112612a6657600080fd5b8135612a79612a7482614dbd565b614d97565b91508181835260208401935060208101905083856020840282011115612a9e57600080fd5b60005b83811015612aca5781612ab48882612a4a565b8452506020928301929190910190600101612aa1565b5050505092915050565b600082601f830112612ae557600080fd5b8135612af3612a7482614dbd565b81815260209384019390925082018360005b83811015612aca5781358601612b1b8882612d01565b8452506020928301929190910190600101612b05565b600082601f830112612b4257600080fd5b8135612b50612a7482614dbd565b91508181835260208401935060208101905083856020840282011115612b7557600080fd5b60005b83811015612aca5781612b8b8882612d96565b8452506020928301929190910190600101612b78565b600082601f830112612bb257600080fd5b8135612bc0612a7482614dbd565b81815260209384019390925082018360005b83811015612aca5781358601612be88882612d01565b8452506020928301929190910190600101612bd2565b600082601f830112612c0f57600080fd5b8135612c1d612a7482614dbd565b91508181835260208401935060208101905083856060840282011115612c4257600080fd5b60005b83811015612aca5781612c588882612df4565b84525060209092019160609190910190600101612c45565b600082601f830112612c8157600080fd5b8135612c8f612a7482614dbd565b91508181835260208401935060208101905083856020840282011115612cb457600080fd5b60005b83811015612aca5781612cca8882612ceb565b8452506020928301929190910190600101612cb7565b8051611e7b81614ee7565b8035611e7b81614ef0565b8051611e7b81614ef0565b600082601f830112612d1257600080fd5b8135612d20612a7482614ddd565b91508082526020830160208301858383011115612d3c57600080fd5b612d47838284614e87565b50505092915050565b600082601f830112612d6157600080fd5b8151612d6f612a7482614ddd565b91508082526020830160208301858383011115612d8b57600080fd5b612d47838284614e93565b8035611e7b81614ef9565b8035611e7b81614f02565b60008083601f840112612dbe57600080fd5b5081356001600160401b03811115612dd557600080fd5b602083019150836001820283011115612ded57600080fd5b9250929050565b600060608284031215612e0657600080fd5b612e106060614d97565b90506000612e1e8484612ceb565b8252506020612e2f84848301612ceb565b6020830152506040612e4384828501612ceb565b60408301525092915050565b600060808284031215612e6157600080fd5b612e6b6080614d97565b90506000612e798484612ceb565b8252506020612e8a84848301612ceb565b6020830152506040612e9e84828501612ceb565b6040830152506060612eb284828501612ceb565b60608301525092915050565b8035611e7b81614f0f565b8051611e7b81614f18565b600060208284031215612ee657600080fd5b6000612ef28484612a4a565b949350505050565b60008060008060006101008688031215612f1357600080fd5b6000612f1f8888612a4a565b9550506020612f3088828901612e4f565b94505060a08601356001600160401b03811115612f4c57600080fd5b612f5888828901612bfe565b93505060c08601356001600160401b03811115612f7457600080fd5b612f8088828901612b31565b92505060e0612f9188828901612a4a565b9150509295509295909350565b60008060008060008060c08789031215612fb757600080fd5b86356001600160401b03811115612fcd57600080fd5b612fd989828a01612a55565b96505060208701356001600160401b03811115612ff557600080fd5b61300189828a01612c70565b95505060408701356001600160401b0381111561301d57600080fd5b61302989828a01612ba1565b94505060608701356001600160401b0381111561304557600080fd5b61305189828a01612ad4565b93505060808701356001600160401b0381111561306d57600080fd5b61307989828a01612d01565b92505060a061308a89828a01612da1565b9150509295509295509295565b6000602082840312156130a957600080fd5b81356001600160401b038111156130bf57600080fd5b612ef284828501612bfe565b6000602082840312156130dd57600080fd5b6000612ef28484612ce0565b6000602082840312156130fb57600080fd5b6000612ef28484612cf6565b60006020828403121561311957600080fd5b81516001600160401b0381111561312f57600080fd5b612ef284828501612d50565b60006080828403121561314d57600080fd5b6000612ef28484612e4f565b60006020828403121561316b57600080fd5b6000612ef28484612ceb565b6000806040838503121561318a57600080fd5b60006131968585612ceb565b92505060206131a785828601612a4a565b9150509250929050565b600080604083850312156131c457600080fd5b60006131d08585612ceb565b92505060206131a785828601612ebe565b600080600080606085870312156131f757600080fd5b60006132038787612ceb565b945050602061321487828801612ebe565b93505060408501356001600160401b0381111561323057600080fd5b61323c87828801612dac565b95989497509550505050565b600080600080600060a0868803121561326057600080fd5b600061326c8888612ceb565b955050602061327d88828901612ebe565b945050604061328e88828901612ebe565b935050606061329f88828901612ceb565b9250506080612f9188828901612ceb565b6000602082840312156132c257600080fd5b6000612ef28484612ec9565b60006132da8383613309565b505060200190565b600061239483836134ab565b60006132da8383613491565b61330381614e66565b82525050565b61330381614e23565b600061331d82614e16565b6133278185614e1a565b935061333283614e04565b8060005b8381101561336057815161334a88826132ce565b975061335583614e04565b925050600101613336565b509495945050505050565b600061337682614e16565b6133808185614e1a565b93508360208202850161339285614e04565b8060005b858110156133cc57848403895281516133af85826132e2565b94506133ba83614e04565b60209a909a0199925050600101613396565b5091979650505050505050565b60006133e482614e16565b6133ee8185614e1a565b93508360208202850161340085614e04565b8060005b858110156133cc578484038952815161341d85826132e2565b945061342883614e04565b60209a909a0199925050600101613404565b600061344582614e16565b61344f8185614e1a565b935061345a83614e04565b8060005b8381101561336057815161347288826132ee565b975061347d83614e04565b92505060010161345e565b61330381614e2e565b6133038161239e565b6133036134a68261239e565b61239e565b60006134b682614e16565b6134c08185614e1a565b93506134d0818560208601614e93565b6134d981614ebf565b9093019392505050565b600081546001811660008114613500576001811461352657613565565b607f60028304166135118187614e1a565b60ff1984168152955050602085019250613565565b600282046135348187614e1a565b955061353f85614e0a565b60005b8281101561355e57815488820152600190910190602001613542565b8701945050505b505092915050565b61330381614e33565b61330381614e71565b600061358b8385614e1a565b9350613598838584614e87565b6134d983614ebf565b60006135ae604183614e1a565b600080516020614f2283398151915281527f733a20696e76616c69642070726f706f73616c20636f6e666967206c656e67746020820152600d60fb1b604082015260600192915050565b6000613605604183614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d61782070726f706f73616c207468726573686f6c6020820152601960fa1b604082015260600192915050565b600061365c603283614e1a565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b60006136b0604783614e1a565b600080516020614f2283398151915281527f733a2076616c69646174696f6e20706172616d73206e6f7420636f6e666967756020820152661c9959081e595d60ca1b604082015260600192915050565b600061370d602883611471565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b6000613757602a83614e1a565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006137a3605583614e1a565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b6000613820603c83614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d696e20766f74696e6720706572696f6400000000602082015260400192915050565b600061386d605683614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a6e756d62657281527f206f662074696d656c6f636b732073686f756c64206d61746368206e756d626560208201527572206f6620676f7665726e616e636520726f7574657360501b604082015260600192915050565b60006138eb603183614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b600061393e600283611471565b61190160f01b815260020192915050565b600061395c603183614e1a565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006139af603483614e1a565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b6000613a05603483614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c815273696420787673207661756c74206164647265737360601b602082015260400192915050565b6000613a5b604583614e1a565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b6000613ac8602f83614e1a565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b6000613b19602d83614e1a565b600080516020614f2283398151915281526c733a2061646d696e206f6e6c7960981b602082015260400192915050565b6000613b56604483614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b6000613bc2602583614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b6000613c09603283614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e6e6f8152717420696e697469616c697a6520747769636560701b602082015260400192915050565b6000613c5d604483614e1a565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b6000613cc9601183614e1a565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000613cf6604383611471565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613d61602e83614e1a565b7f476f7665726e6f72427261766f3a3a73657456616c69646174696f6e5061726181526d6d733a2061646d696e206f6e6c7960901b602082015260400192915050565b6000613db1603083614e1a565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e81526f6c7920696e697469617465206f6e636560801b602082015260400192915050565b6000613e03602c83614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613e51603b83614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d617820766f74696e672064656c61790000000000602082015260400192915050565b6000613e9e602e83614e1a565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613eee603b83614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d696e20766f74696e672064656c61790000000000602082015260400192915050565b6000613f3b602f83614e1a565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000613f8c602b83614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616c81526a34b21033bab0b93234b0b760a91b602082015260400192915050565b6000613fd9602883614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000614023605983614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b60006140a8603483614e1a565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c4d61784f7081527365726174696f6e733a2061646d696e206f6e6c7960601b602082015260400192915050565b60006140fe603283614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a696e76616c69815271642074696d656c6f636b206164647265737360701b602082015260400192915050565b6000614152605883614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611e7b600083614e1a565b60006141e4602483614e1a565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e208152636f6e6c7960e01b602082015260400192915050565b600061422a603f83614e1a565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000614289603283614e1a565b7f476f7665726e6f72427261766f3a3a73657456616c69646174696f6e506172618152716d733a20696e76616c696420706172616d7360701b602082015260400192915050565b60006142dd603683614e1a565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000614335602983614e1a565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000614380604183614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d696e2070726f706f73616c207468726573686f6c6020820152601960fa1b604082015260600192915050565b60006143d7605d83614e1a565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a6e756d62657281527f206f662070726f706f73616c20636f6e666967732073686f756c64206d61746360208201527f68206e756d626572206f6620676f7665726e616e636520726f75746573000000604082015260600192915050565b600061445c603b83614e1a565b7f476f7665726e6f72427261766f3a3a5f736574477561726469616e3a2063616e81527f6e6f74206c69766520776974686f7574206120677561726469616e0000000000602082015260400192915050565b60006144bb603383614e1a565b7f476f7665726e6f72427261766f3a3a5f736574477561726469616e3a2061646d815272696e206f7220677561726469616e206f6e6c7960681b602082015260400192915050565b6000614510601583614e1a565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b6000614541603c83614e1a565b600080516020614f2283398151915281527f733a20696e76616c6964206d617820766f74696e6720706572696f6400000000602082015260400192915050565b805160608301906145928482613488565b5060208201516145a560208501826145be565b5060408201516145b860408501826145d0565b50505050565b61330381614e54565b61330381614e7c565b61330381614e5a565b6000611e7b82613700565b60006145ef82613931565b91506145fb828561349a565b60208201915061460b828461349a565b5060200192915050565b6000611e7b82613ce9565b60208101611e7b8284613309565b6040810161463c82856132fa565b6123946020830184613491565b604081016146578285613309565b6123946020830184613309565b6040810161463c8285613309565b60a081016146808288613309565b61468d6020830187613491565b818103604083015261469f81866134ab565b905081810360608301526146b381856134ab565b9050610a7c6080830184613491565b60a081016146d08288613309565b6146dd6020830187613491565b81810360408301526146ef81866134e3565b905081810360608301526146b381856134e3565b608080825281016147148187613312565b90508181036020830152614728818661343a565b9050818103604083015261473c81856133d9565b90508181036060830152610a7c818461336b565b60208101611e7b8284613491565b6080810161476c8287613491565b6147796020830186613491565b6147866040830185613491565b6147936060830184613309565b95945050505050565b606081016147aa8286613491565b6147b76020830185613491565b612ef260408301846145be565b608081016147d28287613491565b6147df60208301866145be565b6147ec6040830185613491565b6147936060830184613491565b60208101611e7b828461356d565b60208101611e7b8284613576565b6020808252810161239481846134ab565b60208082528101611e7b816135a1565b60208082528101611e7b816135f8565b60208082528101611e7b8161364f565b60208082528101611e7b816136a3565b60208082528101611e7b8161374a565b60208082528101611e7b81613796565b60208082528101611e7b81613813565b60208082528101611e7b81613860565b60208082528101611e7b816138de565b60208082528101611e7b8161394f565b60208082528101611e7b816139a2565b60208082528101611e7b816139f8565b60208082528101611e7b81613a4e565b60208082528101611e7b81613abb565b60208082528101611e7b81613b0c565b60208082528101611e7b81613b49565b60208082528101611e7b81613bb5565b60208082528101611e7b81613bfc565b60208082528101611e7b81613c50565b60208082528101611e7b81613cbc565b60208082528101611e7b81613d54565b60208082528101611e7b81613da4565b60208082528101611e7b81613df6565b60208082528101611e7b81613e44565b60208082528101611e7b81613e91565b60208082528101611e7b81613ee1565b60208082528101611e7b81613f2e565b60208082528101611e7b81613f7f565b60208082528101611e7b81613fcc565b60208082528101611e7b81614016565b60208082528101611e7b8161409b565b60208082528101611e7b816140f1565b60208082528101611e7b81614145565b60208082528101611e7b816141d7565b60208082528101611e7b8161421d565b60208082528101611e7b8161427c565b60208082528101611e7b816142d0565b60208082528101611e7b81614328565b60208082528101611e7b81614373565b60208082528101611e7b816143ca565b60208082528101611e7b8161444f565b60208082528101611e7b816144ae565b60208082528101611e7b81614503565b60208082528101611e7b81614534565b60608101611e7b8284614581565b6101408101614b03828d613491565b614b10602083018c6132fa565b8181036040830152614b22818b613312565b90508181036060830152614b36818a61343a565b90508181036080830152614b4a81896133d9565b905081810360a0830152614b5e818861336b565b9050614b6d60c0830187613491565b614b7a60e0830186613491565b818103610100830152614b8d81856134ab565b9050614b9d6101208301846145be565b9b9a5050505050505050505050565b6101608101614bbb828e613491565b614bc8602083018d613309565b614bd5604083018c613491565b614be2606083018b613491565b614bef608083018a613491565b614bfc60a0830189613491565b614c0960c0830188613491565b614c1660e0830187613491565b614c24610100830186613488565b614c32610120830185613488565b614c406101408301846145be565b9c9b505050505050505050505050565b6040810161463c8285613491565b60608101614c6c8286613491565b614c796020830185613491565b612ef26040830184613491565b60808101614c948287613491565b6147df6020830186613491565b6101008101614cb0828b613491565b614cbd602083018a613491565b614cca6040830189613491565b614cd76060830188613491565b614ce46080830187613491565b614cf160a0830186613491565b614cfe60c0830185613491565b614d0b60e0830184613491565b9998505050505050505050565b60808101614d268288613491565b614d3360208301876145be565b614d4060408301866145c7565b8181036060830152614d5381848661357f565b979650505050505050565b60808101614d6c8286613491565b614d7960208301856145be565b614d8660408301846145c7565b8181036060830152614793816141ca565b6040518181016001600160401b0381118282101715614db557600080fd5b604052919050565b60006001600160401b03821115614dd357600080fd5b5060209081020190565b60006001600160401b03821115614df357600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611e7b82614e48565b151590565b6000611e7b82614e23565b8061147181614ec9565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611e7b82614e33565b6000611e7b82614e3e565b6000611e7b82614e5a565b82818337506000910152565b60005b83811015614eae578181015183820152602001614e96565b838111156145b85750506000910152565b601f01601f191690565b60088110612a4757fe5b614edc81614e23565b8114612a4757600080fd5b614edc81614e2e565b614edc8161239e565b614edc81614e33565b60038110612a4757600080fd5b614edc81614e54565b614edc81614e5a56fe476f7665726e6f72427261766f3a3a73657450726f706f73616c436f6e666967a365627a7a723158207131c586f8c469c7dba84f67aea57b19b3c03e4dc9e347d6eeeee97b89da13cf6c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x253 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x46416F92 GT PUSH2 0x146 JUMPI DUP1 PUSH4 0xDA35C664 GT PUSH2 0xC3 JUMPI DUP1 PUSH4 0xE9C714F2 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xE9C714F2 EQ PUSH2 0x4D5 JUMPI DUP1 PUSH4 0xEE9799EE EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0xF9D28B80 EQ PUSH2 0x4F8 JUMPI DUP1 PUSH4 0xFC4EEE42 EQ PUSH2 0x50B JUMPI DUP1 PUSH4 0xFE0D94C1 EQ PUSH2 0x513 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0xDA35C664 EQ PUSH2 0x47F JUMPI DUP1 PUSH4 0xDDF0B009 EQ PUSH2 0x487 JUMPI DUP1 PUSH4 0xDEAAA7CC EQ PUSH2 0x49A JUMPI DUP1 PUSH4 0xE23A9A52 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xE38E8C0F EQ PUSH2 0x4C2 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x7BDBE4D0 GT PUSH2 0x10A JUMPI DUP1 PUSH4 0x7BDBE4D0 EQ PUSH2 0x441 JUMPI DUP1 PUSH4 0xB58131B0 EQ PUSH2 0x449 JUMPI DUP1 PUSH4 0xB71D1A0C EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0xBB08C321 EQ PUSH2 0x464 JUMPI DUP1 PUSH4 0xD33219B4 EQ PUSH2 0x477 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x46416F92 EQ PUSH2 0x3F8 JUMPI DUP1 PUSH4 0x56781388 EQ PUSH2 0x40B JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x41E JUMPI DUP1 PUSH4 0x791F5D23 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7B3C71D3 EQ PUSH2 0x42E JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x25FD935A GT PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x3932ABB1 GT PUSH2 0x198 JUMPI DUP1 PUSH4 0x3932ABB1 EQ PUSH2 0x3A2 JUMPI DUP1 PUSH4 0x3BCCF4FD EQ PUSH2 0x3AA JUMPI DUP1 PUSH4 0x3E4F49E6 EQ PUSH2 0x3BD JUMPI DUP1 PUSH4 0x40E58EE5 EQ PUSH2 0x3DD JUMPI DUP1 PUSH4 0x452A9320 EQ PUSH2 0x3F0 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x25FD935A EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x26782247 EQ PUSH2 0x330 JUMPI DUP1 PUSH4 0x328DD982 EQ PUSH2 0x345 JUMPI DUP1 PUSH4 0x34CF3909 EQ PUSH2 0x368 JUMPI DUP1 PUSH4 0x35A87DE2 EQ PUSH2 0x380 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x1B9CE575 GT PUSH2 0x21B JUMPI DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x2DB JUMPI DUP1 PUSH4 0x1E75ADF2 EQ PUSH2 0x2F0 JUMPI DUP1 PUSH4 0x1EBCFEFD EQ PUSH2 0x305 JUMPI DUP1 PUSH4 0x20606B70 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x24BC1A64 EQ PUSH2 0x320 JUMPI PUSH2 0x253 JUMP JUMPDEST DUP1 PUSH4 0x13CF08B EQ PUSH2 0x258 JUMPI DUP1 PUSH4 0x2A251A3 EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x2A0 JUMPI DUP1 PUSH4 0x164A1AB1 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0x17977C61 EQ PUSH2 0x2C8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26B PUSH2 0x266 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x526 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4BAC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x293 PUSH2 0x592 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4750 JUMP JUMPDEST PUSH2 0x2A8 PUSH2 0x598 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4815 JUMP JUMPDEST PUSH2 0x293 PUSH2 0x2C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2F9E JUMP JUMPDEST PUSH2 0x5C8 JUMP JUMPDEST PUSH2 0x293 PUSH2 0x2D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED4 JUMP JUMPDEST PUSH2 0xA86 JUMP JUMPDEST PUSH2 0x2E3 PUSH2 0xA98 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x47F9 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x2FE CALLDATASIZE PUSH1 0x4 PUSH2 0x3097 JUMP JUMPDEST PUSH2 0xAA7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x303 PUSH2 0x313 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0xD8D JUMP JUMPDEST PUSH2 0x293 PUSH2 0xDFD JUMP JUMPDEST PUSH2 0x293 PUSH2 0xE14 JUMP JUMPDEST PUSH2 0x293 PUSH2 0xE22 JUMP JUMPDEST PUSH2 0x338 PUSH2 0xE30 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4620 JUMP JUMPDEST PUSH2 0x358 PUSH2 0x353 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4703 JUMP JUMPDEST PUSH2 0x370 PUSH2 0x10CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4C86 JUMP JUMPDEST PUSH2 0x393 PUSH2 0x38E CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x10DD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4C5E JUMP JUMPDEST PUSH2 0x293 PUSH2 0x10FE JUMP JUMPDEST PUSH2 0x303 PUSH2 0x3B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3248 JUMP JUMPDEST PUSH2 0x1104 JUMP JUMPDEST PUSH2 0x3D0 PUSH2 0x3CB CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4807 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x3EB CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x1476 JUMP JUMPDEST PUSH2 0x338 PUSH2 0x170C JUMP JUMPDEST PUSH2 0x303 PUSH2 0x406 CALLDATASIZE PUSH1 0x4 PUSH2 0x2EFA JUMP JUMPDEST PUSH2 0x171B JUMP JUMPDEST PUSH2 0x303 PUSH2 0x419 CALLDATASIZE PUSH1 0x4 PUSH2 0x31B1 JUMP JUMPDEST PUSH2 0x1925 JUMP JUMPDEST PUSH2 0x338 PUSH2 0x196F JUMP JUMPDEST PUSH2 0x293 PUSH2 0x197E JUMP JUMPDEST PUSH2 0x303 PUSH2 0x43C CALLDATASIZE PUSH1 0x4 PUSH2 0x31E1 JUMP JUMPDEST PUSH2 0x198C JUMP JUMPDEST PUSH2 0x293 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0x293 PUSH2 0x19E2 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED4 JUMP JUMPDEST PUSH2 0x19E8 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x313B JUMP JUMPDEST PUSH2 0x1A65 JUMP JUMPDEST PUSH2 0x2E3 PUSH2 0x1B5F JUMP JUMPDEST PUSH2 0x293 PUSH2 0x1B6E JUMP JUMPDEST PUSH2 0x303 PUSH2 0x495 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x1B74 JUMP JUMPDEST PUSH2 0x293 PUSH2 0x1E08 JUMP JUMPDEST PUSH2 0x4B5 PUSH2 0x4B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3177 JUMP JUMPDEST PUSH2 0x1E14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x282 SWAP2 SWAP1 PUSH2 0x4AE6 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x4D0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED4 JUMP JUMPDEST PUSH2 0x1E81 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x1F39 JUMP JUMPDEST PUSH2 0x2E3 PUSH2 0x4EB CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x2017 JUMP JUMPDEST PUSH2 0x338 PUSH2 0x2032 JUMP JUMPDEST PUSH2 0x303 PUSH2 0x506 CALLDATASIZE PUSH1 0x4 PUSH2 0x2ED4 JUMP JUMPDEST PUSH2 0x2041 JUMP JUMPDEST PUSH2 0x293 PUSH2 0x218E JUMP JUMPDEST PUSH2 0x303 PUSH2 0x521 CALLDATASIZE PUSH1 0x4 PUSH2 0x3159 JUMP JUMPDEST PUSH2 0x2194 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x8 DUP6 ADD SLOAD PUSH1 0x9 DUP7 ADD SLOAD SWAP7 DUP7 ADD SLOAD PUSH1 0xB DUP8 ADD SLOAD PUSH1 0xC DUP9 ADD SLOAD PUSH1 0xE SWAP1 SWAP9 ADD SLOAD SWAP7 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP8 SWAP5 SWAP7 SWAP4 SWAP6 SWAP3 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0xFF DUP1 DUP4 AND SWAP3 PUSH2 0x100 SWAP1 DIV DUP2 AND SWAP2 AND DUP12 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH20 0x56656E757320476F7665726E6F7220427261766F PUSH1 0x60 SHL DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x6 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x5F6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48A6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xE PUSH1 0x0 DUP4 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x606 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x782D6FE1 CALLER PUSH2 0x63A NUMBER PUSH1 0x1 PUSH2 0x2347 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x657 SWAP3 SWAP2 SWAP1 PUSH2 0x462E JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x66F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x683 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x6A7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x32B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND LT ISZERO PUSH2 0x6CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A46 JUMP JUMPDEST DUP6 MLOAD DUP8 MLOAD EQ DUP1 ISZERO PUSH2 0x6E0 JUMPI POP DUP5 MLOAD DUP8 MLOAD EQ JUMPDEST DUP1 ISZERO PUSH2 0x6ED JUMPI POP DUP4 MLOAD DUP8 MLOAD EQ JUMPDEST PUSH2 0x709 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4916 JUMP JUMPDEST DUP7 MLOAD PUSH2 0x727 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4986 JUMP JUMPDEST PUSH1 0xC SLOAD DUP8 MLOAD GT ISZERO PUSH2 0x74A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49E6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 PUSH2 0x76B DUP3 PUSH2 0x12DC JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x77B JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x799 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A26 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x7A7 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x7C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49F6 JUMP JUMPDEST POP JUMPDEST PUSH1 0x0 PUSH2 0x7F7 NUMBER PUSH1 0xE PUSH1 0x0 DUP8 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x7DD JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD SLOAD PUSH2 0x236F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x829 DUP3 PUSH1 0xE PUSH1 0x0 DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x80F JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x236F JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE SWAP1 POP PUSH2 0x83C PUSH2 0x270E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1E0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 SLOAD DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x8BD JUMPI INVALID JUMPDEST PUSH1 0xFF AND SWAP1 MSTORE DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SSTORE DUP2 DUP5 ADD MLOAD PUSH1 0x1 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP2 DUP4 ADD MLOAD PUSH1 0x2 DUP4 ADD SSTORE PUSH1 0x60 DUP4 ADD MLOAD DUP1 MLOAD SWAP4 SWAP5 POP DUP5 SWAP4 PUSH2 0x924 SWAP3 PUSH1 0x3 DUP6 ADD SWAP3 ADD SWAP1 PUSH2 0x2794 JUMP JUMPDEST POP PUSH1 0x80 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x940 SWAP2 PUSH1 0x4 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x27F9 JUMP JUMPDEST POP PUSH1 0xA0 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x95C SWAP2 PUSH1 0x5 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2840 JUMP JUMPDEST POP PUSH1 0xC0 DUP3 ADD MLOAD DUP1 MLOAD PUSH2 0x978 SWAP2 PUSH1 0x6 DUP5 ADD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2899 JUMP JUMPDEST POP PUSH1 0xE0 DUP3 ADD MLOAD PUSH1 0x7 DUP3 ADD SSTORE PUSH2 0x100 DUP1 DUP4 ADD MLOAD PUSH1 0x8 DUP4 ADD SSTORE PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x9 DUP4 ADD SSTORE PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0xA DUP4 ADD SSTORE PUSH2 0x160 DUP4 ADD MLOAD PUSH1 0xB DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH2 0x180 DUP5 ADD MLOAD PUSH1 0xC DUP5 ADD DUP1 SLOAD PUSH2 0x1A0 DUP8 ADD MLOAD PUSH1 0xFF NOT SWAP2 DUP3 AND SWAP4 ISZERO ISZERO SWAP4 SWAP1 SWAP4 OR PUSH2 0xFF00 NOT AND SWAP3 ISZERO ISZERO SWAP1 SWAP5 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1C0 SWAP1 SWAP4 ADD MLOAD PUSH1 0xE SWAP1 SWAP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND PUSH1 0xFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP2 MLOAD PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP3 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SSTORE DUP1 MLOAD PUSH32 0xC8DF7FF219F3C0358E14500814D8B62B443A4BEBF3A596BAA60B9295B1CF1BDE SWAP1 CALLER DUP14 DUP14 DUP14 DUP14 DUP10 DUP10 DUP16 DUP16 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xA57 JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6D SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4AF4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 MLOAD SWAP4 POP POP POP POP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xAD1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4906 JUMP JUMPDEST PUSH1 0x10 SLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xAE3 JUMPI POP PUSH1 0x11 SLOAD ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0xAF0 JUMPI POP PUSH1 0x12 SLOAD ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0xAFD JUMPI POP PUSH1 0x13 SLOAD ISZERO ISZERO JUMPDEST PUSH2 0xB19 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4856 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xB23 PUSH2 0x239B JUMP JUMPDEST PUSH1 0xFF AND DUP2 EQ PUSH2 0xB44 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4826 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xD88 JUMPI PUSH1 0x10 PUSH1 0x0 ADD SLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB61 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0xB8B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4886 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x1 ADD SLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xB9D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD GT ISZERO PUSH2 0xBC7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4AD6 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x2 ADD SLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xBD9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD LT ISZERO PUSH2 0xC03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49B6 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x3 ADD SLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC15 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD GT ISZERO PUSH2 0xC3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4996 JUMP JUMPDEST PUSH10 0x1FC3842BD1F071C00000 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC56 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD LT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A86 JUMP JUMPDEST PUSH10 0x3F870857A3E0E3800000 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC97 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD GT ISZERO PUSH2 0xCC1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4836 JUMP JUMPDEST DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0xCCD JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xE DUP4 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP3 MLOAD DUP2 SSTORE SWAP3 DUP3 ADD MLOAD PUSH1 0x1 DUP5 ADD SSTORE ADD MLOAD PUSH1 0x2 SWAP1 SWAP2 ADD SSTORE DUP3 MLOAD PUSH32 0x99382998F89CD4C8AEC7AE5D6DECA4B4B0BFA01691740CCD702BF76B6A6816D2 SWAP1 DUP5 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0xD2D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xD45 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xD5D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0xD78 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4C5E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 ADD PUSH2 0xB47 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xDB7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A06 JUMP JUMPDEST PUSH1 0xC DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xD03B3C3C5C1446BCDD31423061041C94CA3BC5450FE7CCFB0F636F4C420DE87E SWAP1 PUSH2 0xDF1 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x4C50 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE09 SWAP1 PUSH2 0x4615 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 JUMP JUMPDEST PUSH10 0x7F0E10AF47C1C7000000 DUP2 JUMP JUMPDEST PUSH10 0x3F870857A3E0E3800000 DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH1 0xA PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 POP DUP1 PUSH1 0x3 ADD DUP2 PUSH1 0x4 ADD DUP3 PUSH1 0x5 ADD DUP4 PUSH1 0x6 ADD DUP4 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xEC1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xEA3 JUMPI JUMPDEST POP POP POP POP POP SWAP4 POP DUP3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xF13 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 DUP1 DUP4 GT PUSH2 0xEFF JUMPI JUMPDEST POP POP POP POP POP SWAP3 POP DUP2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0xFE6 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xFD2 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xFA7 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xFD2 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xFB5 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xF3B JUMP JUMPDEST POP POP POP POP SWAP2 POP DUP1 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 LT ISZERO PUSH2 0x10B8 JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 SWAP1 KECCAK256 DUP4 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x10A4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1079 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x10A4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1087 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x100D JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP POP SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x11 SLOAD PUSH1 0x12 SLOAD PUSH1 0x13 SLOAD DUP5 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x1112 SWAP1 PUSH2 0x4615 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x14 DUP3 MSTORE PUSH20 0x56656E757320476F7665726E6F7220427261766F PUSH1 0x60 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x157D76627A3B71C0167806F5879F7A61D3E301322F3A3B9F900315F15937671A PUSH2 0x1170 PUSH2 0x23A1 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1184 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x475E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x11AA SWAP1 PUSH2 0x45D9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 PUSH2 0x11C3 SWAP2 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x20 ADD PUSH2 0x479C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 DUP3 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x11F0 SWAP3 SWAP2 SWAP1 PUSH2 0x45E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP3 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x122D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x47C4 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x124F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1282 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48F6 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xB8E138887D0AA13BAB447E82DE9D5C1777041ECD21CA36BA824FF1E6C07DDDA4 DUP11 DUP11 PUSH2 0x12BA DUP6 DUP15 DUP15 PUSH2 0x23A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12C9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D5E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x7 SLOAD LT ISZERO DUP1 ISZERO PUSH2 0x12F1 JUMPI POP PUSH1 0x6 SLOAD DUP3 GT JUMPDEST PUSH2 0x130D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xC DUP2 ADD SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1332 JUMPI PUSH1 0x2 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST DUP1 PUSH1 0x7 ADD SLOAD NUMBER GT PUSH2 0x1347 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST DUP1 PUSH1 0x8 ADD SLOAD NUMBER GT PUSH2 0x135C JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST DUP1 PUSH1 0xA ADD SLOAD DUP2 PUSH1 0x9 ADD SLOAD GT ISZERO DUP1 PUSH2 0x1380 JUMPI POP PUSH10 0x7F0E10AF47C1C7000000 DUP2 PUSH1 0x9 ADD SLOAD LT JUMPDEST ISZERO PUSH2 0x138F JUMPI PUSH1 0x3 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH2 0x13A2 JUMPI PUSH1 0x4 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST PUSH1 0xC DUP2 ADD SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x13BE JUMPI PUSH1 0x7 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD SLOAD PUSH1 0xE DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD PUSH4 0x60D143F1 PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 MLOAD PUSH2 0x145B SWAP5 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 PUSH4 0xC1A287E2 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x141E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1456 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x30E9 JUMP JUMPDEST PUSH2 0x236F JUMP JUMPDEST TIMESTAMP LT PUSH2 0x146B JUMPI PUSH1 0x6 SWAP2 POP POP PUSH2 0x1471 JUMP JUMPDEST PUSH1 0x5 SWAP2 POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x7 PUSH2 0x1481 DUP3 PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x148C JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x14AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A66 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x14DD JUMPI POP PUSH1 0x1 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST DUP1 PUSH2 0x15A0 JUMPI POP PUSH1 0xE DUP2 DUP2 ADD SLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x9 SLOAD PUSH1 0x1 DUP1 DUP5 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH4 0x782D6FE1 SWAP3 SWAP2 AND SWAP1 PUSH2 0x1528 SWAP1 NUMBER SWAP1 PUSH2 0x2347 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1545 SWAP3 SWAP2 SWAP1 PUSH2 0x4664 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x155D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1571 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x1595 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x32B0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND LT JUMPDEST PUSH2 0x15BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49C6 JUMP JUMPDEST PUSH1 0xC DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x16DC JUMPI PUSH1 0xE DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x591FCDFE SWAP2 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1614 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x163C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP6 PUSH1 0x5 ADD DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x1656 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP7 PUSH1 0x6 ADD DUP7 DUP2 SLOAD DUP2 LT PUSH2 0x166F JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP8 PUSH1 0x2 ADD SLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x169E SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x46C2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 POP PUSH2 0x15CE SWAP1 POP JUMP JUMPDEST POP PUSH32 0x789CF55BE980739DAD1D0699B93B58E806B51C9D96619BFA8FE0A28ABAA7B30C DUP3 PUSH1 0x40 MLOAD PUSH2 0xDF1 SWAP2 SWAP1 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH32 0xF4803E074BD026BAAF6ED2E288C9515F68C72FB7216EEBDD7CAE1718A53EC375 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x176C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4936 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1796 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4926 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH2 0x17BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48D6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x17E2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49D6 JUMP JUMPDEST PUSH2 0x17EA PUSH2 0x239B JUMP JUMPDEST PUSH1 0xFF AND DUP3 MLOAD EQ PUSH2 0x180C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4896 JUMP JUMPDEST PUSH2 0x1814 PUSH2 0x239B JUMP JUMPDEST PUSH1 0xFF AND DUP4 MLOAD EQ PUSH2 0x1836 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A96 JUMP JUMPDEST PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0xA PUSH1 0xC SSTORE PUSH1 0xD DUP1 SLOAD SWAP3 DUP5 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1874 DUP5 PUSH2 0x1A65 JUMP JUMPDEST PUSH2 0x187D DUP4 PUSH2 0xAA7 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x191C JUMPI PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18A1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x18D0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A16 JUMP JUMPDEST DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x18DC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xF SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 ADD PUSH2 0x1882 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH32 0xB8E138887D0AA13BAB447E82DE9D5C1777041ECD21CA36BA824FF1E6C07DDDA4 DUP4 DUP4 PUSH2 0x1954 DUP5 DUP4 DUP4 PUSH2 0x23A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1963 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D5E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH10 0x1FC3842BD1F071C00000 DUP2 JUMP JUMPDEST CALLER PUSH32 0xB8E138887D0AA13BAB447E82DE9D5C1777041ECD21CA36BA824FF1E6C07DDDA4 DUP6 DUP6 PUSH2 0x19BB DUP5 DUP4 DUP4 PUSH2 0x23A5 JUMP JUMPDEST DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x19CE SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D18 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A12 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4866 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0xCA4F2F25D0898EDD99413412FB94012F9E54EC8142F9B093E7720646A95B16A9 SWAP1 PUSH2 0xDF1 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4966 JUMP JUMPDEST DUP1 MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1AA3 JUMPI POP PUSH1 0x0 DUP2 PUSH1 0x40 ADD MLOAD GT JUMPDEST DUP1 ISZERO PUSH2 0x1AB6 JUMPI POP DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x40 ADD MLOAD LT JUMPDEST DUP1 ISZERO PUSH2 0x1AC6 JUMPI POP PUSH1 0x20 DUP2 ADD MLOAD DUP2 MLOAD LT JUMPDEST PUSH2 0x1AE2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A56 JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 MLOAD PUSH1 0x11 SLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x12 SLOAD PUSH1 0x40 DUP1 DUP8 ADD MLOAD PUSH1 0x13 SLOAD PUSH1 0x60 DUP10 ADD MLOAD SWAP3 MLOAD PUSH32 0xC90C7AD68C13A491443F1C63DAFA18B365428EE69170415AFE234C16DC6F650D SWAP9 PUSH2 0x1B39 SWAP9 SWAP1 SWAP8 SWAP1 SWAP7 SWAP1 SWAP6 SWAP1 SWAP5 SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x4CA1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 MLOAD PUSH1 0x10 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x11 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x12 SSTORE PUSH1 0x60 ADD MLOAD PUSH1 0x13 SSTORE JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH2 0x1B7F DUP3 PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x1B8A JUMPI INVALID JUMPDEST EQ PUSH2 0x1BA7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4946 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0xE DUP2 ADD SLOAD PUSH1 0xFF AND DUP5 MSTORE PUSH1 0xF DUP4 MSTORE DUP2 DUP5 KECCAK256 SLOAD DUP3 MLOAD PUSH4 0xD48571F PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 MLOAD SWAP2 SWAP5 SWAP4 PUSH2 0x1C10 SWAP4 TIMESTAMP SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND SWAP3 PUSH4 0x6A42B8F8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x141E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD DUP2 LT ISZERO PUSH2 0x1DC1 JUMPI PUSH2 0x1DB9 DUP4 PUSH1 0x3 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1C33 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1C5B JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP6 PUSH1 0x5 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x1C75 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1D03 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1CD8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1D03 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1CE6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP7 PUSH1 0x6 ADD DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x1D17 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV SWAP3 DUP4 ADD DUP6 SWAP1 DIV DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP2 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1DA5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1D7A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1DA5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1D88 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP PUSH1 0xE DUP10 ADD SLOAD DUP9 SWAP2 POP PUSH1 0xFF AND PUSH2 0x2595 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1C15 JUMP JUMPDEST POP PUSH1 0x2 DUP3 ADD DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9A2E42FD6722813D69113E7D0079D3D940171428DF7373DF9C7F7617CFDA2892 SWAP1 PUSH2 0x1DFB SWAP1 DUP6 SWAP1 DUP5 SWAP1 PUSH2 0x4C50 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE09 SWAP1 PUSH2 0x45D9 JUMP JUMPDEST PUSH2 0x1E1C PUSH2 0x28F2 JUMP JUMPDEST POP PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE PUSH1 0xD ADD DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0xFF DUP1 DUP3 AND ISZERO ISZERO DUP4 MSTORE PUSH2 0x100 DUP3 DIV AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH3 0x10000 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH2 0x1EA4 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ JUMPDEST PUSH2 0x1EC0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4AB6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1EE6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4AA6 JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP1 PUSH32 0x8FDAF06427A2010E5958F4329B566993472D14CE81D3F16CE7F2A2660DA98E3 SWAP1 PUSH2 0xDF1 SWAP1 DUP4 SWAP1 DUP6 SWAP1 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 ISZERO PUSH2 0x1F52 JUMPI POP CALLER ISZERO ISZERO JUMPDEST PUSH2 0x1F6E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x49A6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP1 DUP7 AND DUP3 OR SWAP7 DUP8 SWAP1 SSTORE SWAP1 SWAP3 AND SWAP1 SWAP3 SSTORE PUSH1 0x40 MLOAD SWAP3 DUP3 AND SWAP4 SWAP1 SWAP3 PUSH32 0xF9FFABCA9C8276E99321725BCB43FB076A6C66A54B7F21C4E8146D8519B417DC SWAP3 PUSH2 0x1FD2 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xCA4F2F25D0898EDD99413412FB94012F9E54EC8142F9B093E7720646A95B16A9 SWAP2 PUSH2 0xDF1 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x4649 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x206B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4A36 JUMP JUMPDEST PUSH1 0x6 SLOAD ISZERO PUSH2 0x208B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4976 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDA35C664 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x20DA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x20FE SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x30E9 JUMP JUMPDEST PUSH1 0x7 DUP2 SWAP1 SSTORE PUSH1 0x6 SSTORE PUSH1 0x0 JUMPDEST PUSH2 0x2111 PUSH2 0x239B JUMP JUMPDEST PUSH1 0xFF AND DUP2 LT ISZERO PUSH2 0x218A JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0xE18B681 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 PUSH4 0xE18B681 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x217B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x1 ADD SWAP1 POP PUSH2 0x2109 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH2 0x219F DUP3 PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x21AA JUMPI INVALID JUMPDEST EQ PUSH2 0x21C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48E6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0xC DUP2 ADD DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x100 OR SWAP1 SSTORE SWAP1 JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD DUP2 LT ISZERO PUSH2 0x2317 JUMPI PUSH1 0xE DUP3 ADD SLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3 DUP4 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0x825F38F SWAP2 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x222E JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0x2256 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD DUP6 PUSH1 0x5 ADD DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x2270 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP7 PUSH1 0x6 ADD DUP7 DUP2 SLOAD DUP2 LT PUSH2 0x2289 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP8 PUSH1 0x2 ADD SLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22B8 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x46C2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x22E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x230E SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3107 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x21E8 JUMP JUMPDEST POP PUSH32 0x712AE1383F79AC853F8D882153778E0260EF8F03B504E2866E0593E04D2B291F DUP3 PUSH1 0x40 MLOAD PUSH2 0xDF1 SWAP2 SWAP1 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 GT ISZERO PUSH2 0x2369 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4AC6 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x2394 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4956 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x3 JUMPDEST SWAP1 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH2 0x23B2 DUP5 PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x7 DUP2 GT ISZERO PUSH2 0x23BD JUMPI INVALID JUMPDEST EQ PUSH2 0x23DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48B6 JUMP JUMPDEST PUSH1 0x2 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x23FE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4846 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE PUSH1 0xD DUP2 ADD SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2447 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x48C6 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x7 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x782D6FE1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH4 0x782D6FE1 SWAP2 PUSH2 0x247D SWAP2 DUP12 SWAP2 PUSH1 0x4 ADD PUSH2 0x4664 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2495 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x24CD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x32B0 JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP6 AND PUSH2 0x24F8 JUMPI PUSH2 0x24EE DUP4 PUSH1 0xA ADD SLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x236F JUMP JUMPDEST PUSH1 0xA DUP5 ADD SSTORE PUSH2 0x254E JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x1 EQ ISZERO PUSH2 0x2525 JUMPI PUSH2 0x251B DUP4 PUSH1 0x9 ADD SLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x236F JUMP JUMPDEST PUSH1 0x9 DUP5 ADD SSTORE PUSH2 0x254E JUMP JUMPDEST DUP5 PUSH1 0xFF AND PUSH1 0x2 EQ ISZERO PUSH2 0x254E JUMPI PUSH2 0x2548 DUP4 PUSH1 0xB ADD SLOAD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND PUSH2 0x236F JUMP JUMPDEST PUSH1 0xB DUP5 ADD SSTORE JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0xFF NOT SWAP1 SWAP2 AND OR PUSH2 0xFF00 NOT AND PUSH2 0x100 PUSH1 0xFF DUP8 AND MUL OR PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFF0000 NOT AND PUSH3 0x10000 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP4 AND MUL OR SWAP1 SWAP2 SSTORE SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 PUSH4 0xF2B06537 SWAP2 PUSH2 0x25D4 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP11 SWAP2 ADD PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2606 SWAP2 SWAP1 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x261E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2632 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x2656 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x30CB JUMP JUMPDEST ISZERO PUSH2 0x2673 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5ED SWAP1 PUSH2 0x4876 JUMP JUMPDEST PUSH1 0xFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0x3A66F901 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x3A66F901 SWAP1 PUSH2 0x26BC SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH1 0x4 ADD PUSH2 0x4672 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x26D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26EA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH2 0x191C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x30E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1E0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x27E9 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x27E9 JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x27B4 JUMP JUMPDEST POP PUSH2 0x27F5 SWAP3 SWAP2 POP PUSH2 0x2912 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x2834 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2834 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2819 JUMP JUMPDEST POP PUSH2 0x27F5 SWAP3 SWAP2 POP PUSH2 0x2936 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x288D JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x288D JUMPI DUP3 MLOAD DUP1 MLOAD PUSH2 0x287D SWAP2 DUP5 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2950 JUMP JUMPDEST POP SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2860 JUMP JUMPDEST POP PUSH2 0x27F5 SWAP3 SWAP2 POP PUSH2 0x29BD JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x28E6 JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x28E6 JUMPI DUP3 MLOAD DUP1 MLOAD PUSH2 0x28D6 SWAP2 DUP5 SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x2950 JUMP JUMPDEST POP SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x28B9 JUMP JUMPDEST POP PUSH2 0x27F5 SWAP3 SWAP2 POP PUSH2 0x29E0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x239E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27F5 JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2918 JUMP JUMPDEST PUSH2 0x239E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27F5 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x293C JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2991 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2834 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2834 JUMPI SWAP2 DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x2834 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2819 JUMP JUMPDEST PUSH2 0x239E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27F5 JUMPI PUSH1 0x0 PUSH2 0x29D7 DUP3 DUP3 PUSH2 0x2A03 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x29C3 JUMP JUMPDEST PUSH2 0x239E SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27F5 JUMPI PUSH1 0x0 PUSH2 0x29FA DUP3 DUP3 PUSH2 0x2A03 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x29E6 JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV PUSH1 0x0 DUP3 SSTORE DUP1 PUSH1 0x1F LT PUSH2 0x2A29 JUMPI POP PUSH2 0x2A47 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2A47 SWAP2 SWAP1 PUSH2 0x2936 JUMP JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4ED3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2A66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2A79 PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST PUSH2 0x4D97 JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x2A9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 PUSH2 0x2AB4 DUP9 DUP3 PUSH2 0x2A4A JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2AA1 JUMP JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2AE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2AF3 PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x2B1B DUP9 DUP3 PUSH2 0x2D01 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2B05 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2B42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2B50 PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x2B75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 PUSH2 0x2B8B DUP9 DUP3 PUSH2 0x2D96 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2B78 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2BB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2BC0 PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 POP DUP3 ADD DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 CALLDATALOAD DUP7 ADD PUSH2 0x2BE8 DUP9 DUP3 PUSH2 0x2D01 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2BD2 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2C0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2C1D PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x60 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x2C42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 PUSH2 0x2C58 DUP9 DUP3 PUSH2 0x2DF4 JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x60 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2C45 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2C81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2C8F PUSH2 0x2A74 DUP3 PUSH2 0x4DBD JUMP JUMPDEST SWAP2 POP DUP2 DUP2 DUP4 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x20 DUP2 ADD SWAP1 POP DUP4 DUP6 PUSH1 0x20 DUP5 MUL DUP3 ADD GT ISZERO PUSH2 0x2CB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2ACA JUMPI DUP2 PUSH2 0x2CCA DUP9 DUP3 PUSH2 0x2CEB JUMP JUMPDEST DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2CB7 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1E7B DUP2 PUSH2 0x4EE7 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4EF0 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1E7B DUP2 PUSH2 0x4EF0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x2D20 PUSH2 0x2A74 DUP3 PUSH2 0x4DDD JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x2D3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D47 DUP4 DUP3 DUP5 PUSH2 0x4E87 JUMP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x2D6F PUSH2 0x2A74 DUP3 PUSH2 0x4DDD JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP4 ADD DUP6 DUP4 DUP4 ADD GT ISZERO PUSH2 0x2D8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D47 DUP4 DUP3 DUP5 PUSH2 0x4E93 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4EF9 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4F02 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2DBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2DD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x2DED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E10 PUSH1 0x60 PUSH2 0x4D97 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E1E DUP5 DUP5 PUSH2 0x2CEB JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x2E2F DUP5 DUP5 DUP4 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x2E43 DUP5 DUP3 DUP6 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E6B PUSH1 0x80 PUSH2 0x4D97 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2E79 DUP5 DUP5 PUSH2 0x2CEB JUMP JUMPDEST DUP3 MSTORE POP PUSH1 0x20 PUSH2 0x2E8A DUP5 DUP5 DUP4 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 PUSH2 0x2E9E DUP5 DUP3 DUP6 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 PUSH2 0x2EB2 DUP5 DUP3 DUP6 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1E7B DUP2 PUSH2 0x4F0F JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1E7B DUP2 PUSH2 0x4F18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2EE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2A4A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2F13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2F1F DUP9 DUP9 PUSH2 0x2A4A JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x2F30 DUP9 DUP3 DUP10 ADD PUSH2 0x2E4F JUMP JUMPDEST SWAP5 POP POP PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2F4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F58 DUP9 DUP3 DUP10 ADD PUSH2 0x2BFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2F74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F80 DUP9 DUP3 DUP10 ADD PUSH2 0x2B31 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xE0 PUSH2 0x2F91 DUP9 DUP3 DUP10 ADD PUSH2 0x2A4A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2FB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2FCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FD9 DUP10 DUP3 DUP11 ADD PUSH2 0x2A55 JUMP JUMPDEST SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2FF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3001 DUP10 DUP3 DUP11 ADD PUSH2 0x2C70 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x301D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3029 DUP10 DUP3 DUP11 ADD PUSH2 0x2BA1 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3045 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3051 DUP10 DUP3 DUP11 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x306D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3079 DUP10 DUP3 DUP11 ADD PUSH2 0x2D01 JUMP JUMPDEST SWAP3 POP POP PUSH1 0xA0 PUSH2 0x308A DUP10 DUP3 DUP11 ADD PUSH2 0x2DA1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x30BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2EF2 DUP5 DUP3 DUP6 ADD PUSH2 0x2BFE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2CE0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2CF6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x312F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2EF2 DUP5 DUP3 DUP6 ADD PUSH2 0x2D50 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x314D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2E4F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x316B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x318A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3196 DUP6 DUP6 PUSH2 0x2CEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x31A7 DUP6 DUP3 DUP7 ADD PUSH2 0x2A4A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x31C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x31D0 DUP6 DUP6 PUSH2 0x2CEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x31A7 DUP6 DUP3 DUP7 ADD PUSH2 0x2EBE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x31F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3203 DUP8 DUP8 PUSH2 0x2CEB JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0x3214 DUP8 DUP3 DUP9 ADD PUSH2 0x2EBE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x3230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x323C DUP8 DUP3 DUP9 ADD PUSH2 0x2DAC JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x326C DUP9 DUP9 PUSH2 0x2CEB JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x327D DUP9 DUP3 DUP10 ADD PUSH2 0x2EBE JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x328E DUP9 DUP3 DUP10 ADD PUSH2 0x2EBE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x329F DUP9 DUP3 DUP10 ADD PUSH2 0x2CEB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x2F91 DUP9 DUP3 DUP10 ADD PUSH2 0x2CEB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x32C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2EF2 DUP5 DUP5 PUSH2 0x2EC9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32DA DUP4 DUP4 PUSH2 0x3309 JUMP JUMPDEST POP POP PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2394 DUP4 DUP4 PUSH2 0x34AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32DA DUP4 DUP4 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E66 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E23 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x331D DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x3327 DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP PUSH2 0x3332 DUP4 PUSH2 0x4E04 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3360 JUMPI DUP2 MLOAD PUSH2 0x334A DUP9 DUP3 PUSH2 0x32CE JUMP JUMPDEST SWAP8 POP PUSH2 0x3355 DUP4 PUSH2 0x4E04 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3336 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3376 DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x3380 DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x3392 DUP6 PUSH2 0x4E04 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x33CC JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x33AF DUP6 DUP3 PUSH2 0x32E2 JUMP JUMPDEST SWAP5 POP PUSH2 0x33BA DUP4 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x20 SWAP11 SWAP1 SWAP11 ADD SWAP10 SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3396 JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33E4 DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x33EE DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x3400 DUP6 PUSH2 0x4E04 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x33CC JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x341D DUP6 DUP3 PUSH2 0x32E2 JUMP JUMPDEST SWAP5 POP PUSH2 0x3428 DUP4 PUSH2 0x4E04 JUMP JUMPDEST PUSH1 0x20 SWAP11 SWAP1 SWAP11 ADD SWAP10 SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x3404 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3445 DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x344F DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP PUSH2 0x345A DUP4 PUSH2 0x4E04 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3360 JUMPI DUP2 MLOAD PUSH2 0x3472 DUP9 DUP3 PUSH2 0x32EE JUMP JUMPDEST SWAP8 POP PUSH2 0x347D DUP4 PUSH2 0x4E04 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x345E JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E2E JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x239E JUMP JUMPDEST PUSH2 0x3303 PUSH2 0x34A6 DUP3 PUSH2 0x239E JUMP JUMPDEST PUSH2 0x239E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34B6 DUP3 PUSH2 0x4E16 JUMP JUMPDEST PUSH2 0x34C0 DUP2 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP PUSH2 0x34D0 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x4E93 JUMP JUMPDEST PUSH2 0x34D9 DUP2 PUSH2 0x4EBF JUMP JUMPDEST SWAP1 SWAP4 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH1 0x1 DUP2 AND PUSH1 0x0 DUP2 EQ PUSH2 0x3500 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x3526 JUMPI PUSH2 0x3565 JUMP JUMPDEST PUSH1 0x7F PUSH1 0x2 DUP4 DIV AND PUSH2 0x3511 DUP2 DUP8 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0xFF NOT DUP5 AND DUP2 MSTORE SWAP6 POP POP PUSH1 0x20 DUP6 ADD SWAP3 POP PUSH2 0x3565 JUMP JUMPDEST PUSH1 0x2 DUP3 DIV PUSH2 0x3534 DUP2 DUP8 PUSH2 0x4E1A JUMP JUMPDEST SWAP6 POP PUSH2 0x353F DUP6 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x355E JUMPI DUP2 SLOAD DUP9 DUP3 ADD MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD PUSH2 0x3542 JUMP JUMPDEST DUP8 ADD SWAP5 POP POP POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E33 JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E71 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x358B DUP4 DUP6 PUSH2 0x4E1A JUMP JUMPDEST SWAP4 POP PUSH2 0x3598 DUP4 DUP6 DUP5 PUSH2 0x4E87 JUMP JUMPDEST PUSH2 0x34D9 DUP4 PUSH2 0x4EBF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x35AE PUSH1 0x41 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C69642070726F706F73616C20636F6E666967206C656E6774 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0xFB SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3605 PUSH1 0x41 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D61782070726F706F73616C207468726573686F6C PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0xFA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x365C PUSH1 0x32 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63617374566F7465496E7465726E616C3A DUP2 MSTORE PUSH18 0x20696E76616C696420766F74652074797065 PUSH1 0x70 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x36B0 PUSH1 0x47 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A2076616C69646174696F6E20706172616D73206E6F7420636F6E66696775 PUSH1 0x20 DUP3 ADD MSTORE PUSH7 0x1C9959081E595D PUSH1 0xCA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x370D PUSH1 0x28 DUP4 PUSH2 0x1471 JUMP JUMPDEST PUSH32 0x42616C6C6F742875696E743235362070726F706F73616C49642C75696E743820 DUP2 MSTORE PUSH8 0x737570706F727429 PUSH1 0xC0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3757 PUSH1 0x2A DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A5F73657450656E64696E6741646D696E3A20 DUP2 MSTORE PUSH10 0x61646D696E206F6E6C79 PUSH1 0xB0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37A3 PUSH1 0x55 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A71756575654F72526576657274496E7465 DUP2 MSTORE PUSH32 0x726E616C3A206964656E746963616C2070726F706F73616C20616374696F6E20 PUSH1 0x20 DUP3 ADD MSTORE PUSH21 0x616C72656164792071756575656420617420657461 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3820 PUSH1 0x3C DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D696E20766F74696E6720706572696F6400000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x386D PUSH1 0x56 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A6E756D626572 DUP2 MSTORE PUSH32 0x206F662074696D656C6F636B732073686F756C64206D61746368206E756D6265 PUSH1 0x20 DUP3 ADD MSTORE PUSH22 0x72206F6620676F7665726E616E636520726F75746573 PUSH1 0x50 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38EB PUSH1 0x31 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A20476F7665726E6F72 DUP2 MSTORE PUSH17 0x20427261766F206E6F7420616374697665 PUSH1 0x78 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x393E PUSH1 0x2 DUP4 PUSH2 0x1471 JUMP JUMPDEST PUSH2 0x1901 PUSH1 0xF0 SHL DUP2 MSTORE PUSH1 0x2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x395C PUSH1 0x31 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63617374566F7465496E7465726E616C3A DUP2 MSTORE PUSH17 0x81D9BDD1A5B99C81A5CC818DB1BDCD959 PUSH1 0x7A SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39AF PUSH1 0x34 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63617374566F7465496E7465726E616C3A DUP2 MSTORE PUSH20 0x81D9BDD195C88185B1C9958591E481D9BDD1959 PUSH1 0x62 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A05 PUSH1 0x34 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A20696E76616C DUP2 MSTORE PUSH20 0x696420787673207661756C742061646472657373 PUSH1 0x60 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A5B PUSH1 0x45 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A657865637574653A2070726F706F73616C DUP2 MSTORE PUSH32 0x2063616E206F6E6C792062652065786563757465642069662069742069732071 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0x1D595D5959 PUSH1 0xDA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AC8 PUSH1 0x2F DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63617374566F746542795369673A20696E DUP2 MSTORE PUSH15 0x76616C6964207369676E6174757265 PUSH1 0x88 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B19 PUSH1 0x2D DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH13 0x733A2061646D696E206F6E6C79 PUSH1 0x98 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B56 PUSH1 0x44 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A2070726F706F73616C DUP2 MSTORE PUSH32 0x2066756E6374696F6E20696E666F726D6174696F6E206172697479206D69736D PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0xC2E8C6D PUSH1 0xE3 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BC2 PUSH1 0x25 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A2061646D696E DUP2 MSTORE PUSH5 0x206F6E6C79 PUSH1 0xD8 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C09 PUSH1 0x32 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A2063616E6E6F DUP2 MSTORE PUSH18 0x7420696E697469616C697A65207477696365 PUSH1 0x70 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C5D PUSH1 0x44 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A71756575653A2070726F706F73616C2063 DUP2 MSTORE PUSH32 0x616E206F6E6C7920626520717565756564206966206974206973207375636365 PUSH1 0x20 DUP3 ADD MSTORE PUSH4 0x19591959 PUSH1 0xE2 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3CC9 PUSH1 0x11 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH17 0x6164646974696F6E206F766572666C6F77 PUSH1 0x78 SHL DUP2 MSTORE PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3CF6 PUSH1 0x43 DUP4 PUSH2 0x1471 JUMP JUMPDEST PUSH32 0x454950373132446F6D61696E28737472696E67206E616D652C75696E74323536 DUP2 MSTORE PUSH32 0x20636861696E49642C6164647265737320766572696679696E67436F6E747261 PUSH1 0x20 DUP3 ADD MSTORE PUSH3 0x637429 PUSH1 0xE8 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x43 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D61 PUSH1 0x2E DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A73657456616C69646174696F6E50617261 DUP2 MSTORE PUSH14 0x6D733A2061646D696E206F6E6C79 PUSH1 0x90 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DB1 PUSH1 0x30 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F696E6974696174653A2063616E206F6E DUP2 MSTORE PUSH16 0x6C7920696E697469617465206F6E6365 PUSH1 0x80 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E03 PUSH1 0x2C DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A206D7573742070726F DUP2 MSTORE PUSH12 0x7669646520616374696F6E73 PUSH1 0xA0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E51 PUSH1 0x3B DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D617820766F74696E672064656C61790000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E9E PUSH1 0x2E DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A5F61636365707441646D696E3A2070656E64 DUP2 MSTORE PUSH14 0x696E672061646D696E206F6E6C79 PUSH1 0x90 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EEE PUSH1 0x3B DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D696E20766F74696E672064656C61790000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F3B PUSH1 0x2F DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63616E63656C3A2070726F706F73657220 DUP2 MSTORE PUSH15 0x18589BDD99481D1A1C995CDA1BDB19 PUSH1 0x8A SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F8C PUSH1 0x2B DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A20696E76616C DUP2 MSTORE PUSH11 0x34B21033BAB0B93234B0B7 PUSH1 0xA9 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FD9 PUSH1 0x28 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A20746F6F206D616E79 DUP2 MSTORE PUSH8 0x20616374696F6E73 PUSH1 0xC0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4023 PUSH1 0x59 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A206F6E65206C697665 DUP2 MSTORE PUSH32 0x2070726F706F73616C207065722070726F706F7365722C20666F756E6420616E PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x20616C72656164792070656E64696E672070726F706F73616C00000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40A8 PUSH1 0x34 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F73657450726F706F73616C4D61784F70 DUP2 MSTORE PUSH20 0x65726174696F6E733A2061646D696E206F6E6C79 PUSH1 0x60 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40FE PUSH1 0x32 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A696E76616C69 DUP2 MSTORE PUSH18 0x642074696D656C6F636B2061646472657373 PUSH1 0x70 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4152 PUSH1 0x58 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A206F6E65206C697665 DUP2 MSTORE PUSH32 0x2070726F706F73616C207065722070726F706F7365722C20666F756E6420616E PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x20616C7265616479206163746976652070726F706F73616C0000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B PUSH1 0x0 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x41E4 PUSH1 0x24 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F696E6974696174653A2061646D696E20 DUP2 MSTORE PUSH4 0x6F6E6C79 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x422A PUSH1 0x3F DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A70726F706F73653A2070726F706F736572 DUP2 MSTORE PUSH32 0x20766F7465732062656C6F772070726F706F73616C207468726573686F6C6400 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4289 PUSH1 0x32 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A73657456616C69646174696F6E50617261 DUP2 MSTORE PUSH18 0x6D733A20696E76616C696420706172616D73 PUSH1 0x70 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x42DD PUSH1 0x36 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A63616E63656C3A2063616E6E6F74206361 DUP2 MSTORE PUSH22 0x1B98D95B08195E1958DD5D1959081C1C9BDC1BDCD85B PUSH1 0x52 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4335 PUSH1 0x29 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A73746174653A20696E76616C6964207072 DUP2 MSTORE PUSH9 0x1BDC1BDCD85B081A59 PUSH1 0xBA SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4380 PUSH1 0x41 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D696E2070726F706F73616C207468726573686F6C PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0xFA SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x43D7 PUSH1 0x5D DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A696E697469616C697A653A6E756D626572 DUP2 MSTORE PUSH32 0x206F662070726F706F73616C20636F6E666967732073686F756C64206D617463 PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x68206E756D626572206F6620676F7665726E616E636520726F75746573000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x445C PUSH1 0x3B DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F736574477561726469616E3A2063616E DUP2 MSTORE PUSH32 0x6E6F74206C69766520776974686F7574206120677561726469616E0000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44BB PUSH1 0x33 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH32 0x476F7665726E6F72427261766F3A3A5F736574477561726469616E3A2061646D DUP2 MSTORE PUSH19 0x696E206F7220677561726469616E206F6E6C79 PUSH1 0x68 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4510 PUSH1 0x15 DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH21 0x7375627472616374696F6E20756E646572666C6F77 PUSH1 0x58 SHL DUP2 MSTORE PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4541 PUSH1 0x3C DUP4 PUSH2 0x4E1A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x4F22 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP2 MSTORE PUSH32 0x733A20696E76616C6964206D617820766F74696E6720706572696F6400000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x4592 DUP5 DUP3 PUSH2 0x3488 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x45A5 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x45BE JUMP JUMPDEST POP PUSH1 0x40 DUP3 ADD MLOAD PUSH2 0x45B8 PUSH1 0x40 DUP6 ADD DUP3 PUSH2 0x45D0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E54 JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E7C JUMP JUMPDEST PUSH2 0x3303 DUP2 PUSH2 0x4E5A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x3700 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45EF DUP3 PUSH2 0x3931 JUMP JUMPDEST SWAP2 POP PUSH2 0x45FB DUP3 DUP6 PUSH2 0x349A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x460B DUP3 DUP5 PUSH2 0x349A JUMP JUMPDEST POP PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x3CE9 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x3309 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x463C DUP3 DUP6 PUSH2 0x32FA JUMP JUMPDEST PUSH2 0x2394 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x4657 DUP3 DUP6 PUSH2 0x3309 JUMP JUMPDEST PUSH2 0x2394 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3309 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x463C DUP3 DUP6 PUSH2 0x3309 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x4680 DUP3 DUP9 PUSH2 0x3309 JUMP JUMPDEST PUSH2 0x468D PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x469F DUP2 DUP7 PUSH2 0x34AB JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x46B3 DUP2 DUP6 PUSH2 0x34AB JUMP JUMPDEST SWAP1 POP PUSH2 0xA7C PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH2 0x46D0 DUP3 DUP9 PUSH2 0x3309 JUMP JUMPDEST PUSH2 0x46DD PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x46EF DUP2 DUP7 PUSH2 0x34E3 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x46B3 DUP2 DUP6 PUSH2 0x34E3 JUMP JUMPDEST PUSH1 0x80 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x4714 DUP2 DUP8 PUSH2 0x3312 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4728 DUP2 DUP7 PUSH2 0x343A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x473C DUP2 DUP6 PUSH2 0x33D9 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0xA7C DUP2 DUP5 PUSH2 0x336B JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x476C DUP3 DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4779 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4786 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4793 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x3309 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x47AA DUP3 DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x47B7 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x2EF2 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x45BE JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x47D2 DUP3 DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x47DF PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x45BE JUMP JUMPDEST PUSH2 0x47EC PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4793 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x356D JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x3576 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x2394 DUP2 DUP5 PUSH2 0x34AB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x35A1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x35F8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x364F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x36A3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x374A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3796 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3813 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3860 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x38DE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x394F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x39A2 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x39F8 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3A4E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3ABB JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3B0C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3B49 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3BB5 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3BFC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3CBC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3D54 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3DA4 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3DF6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3E44 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3E91 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3EE1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3F2E JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3F7F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x3FCC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4016 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x409B JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x40F1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4145 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x41D7 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x421D JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x427C JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x42D0 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4328 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4373 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x43CA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x444F JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x44AE JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4503 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 ADD PUSH2 0x1E7B DUP2 PUSH2 0x4534 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x1E7B DUP3 DUP5 PUSH2 0x4581 JUMP JUMPDEST PUSH2 0x140 DUP2 ADD PUSH2 0x4B03 DUP3 DUP14 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4B10 PUSH1 0x20 DUP4 ADD DUP13 PUSH2 0x32FA JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x4B22 DUP2 DUP12 PUSH2 0x3312 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4B36 DUP2 DUP11 PUSH2 0x343A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x4B4A DUP2 DUP10 PUSH2 0x33D9 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x4B5E DUP2 DUP9 PUSH2 0x336B JUMP JUMPDEST SWAP1 POP PUSH2 0x4B6D PUSH1 0xC0 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4B7A PUSH1 0xE0 DUP4 ADD DUP7 PUSH2 0x3491 JUMP JUMPDEST DUP2 DUP2 SUB PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x4B8D DUP2 DUP6 PUSH2 0x34AB JUMP JUMPDEST SWAP1 POP PUSH2 0x4B9D PUSH2 0x120 DUP4 ADD DUP5 PUSH2 0x45BE JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD PUSH2 0x4BBB DUP3 DUP15 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4BC8 PUSH1 0x20 DUP4 ADD DUP14 PUSH2 0x3309 JUMP JUMPDEST PUSH2 0x4BD5 PUSH1 0x40 DUP4 ADD DUP13 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4BE2 PUSH1 0x60 DUP4 ADD DUP12 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4BEF PUSH1 0x80 DUP4 ADD DUP11 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4BFC PUSH1 0xA0 DUP4 ADD DUP10 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4C09 PUSH1 0xC0 DUP4 ADD DUP9 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4C16 PUSH1 0xE0 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4C24 PUSH2 0x100 DUP4 ADD DUP7 PUSH2 0x3488 JUMP JUMPDEST PUSH2 0x4C32 PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x3488 JUMP JUMPDEST PUSH2 0x4C40 PUSH2 0x140 DUP4 ADD DUP5 PUSH2 0x45BE JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 ADD PUSH2 0x463C DUP3 DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4C6C DUP3 DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4C79 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x2EF2 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4C94 DUP3 DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x47DF PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD PUSH2 0x4CB0 DUP3 DUP12 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CBD PUSH1 0x20 DUP4 ADD DUP11 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CCA PUSH1 0x40 DUP4 ADD DUP10 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CD7 PUSH1 0x60 DUP4 ADD DUP9 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CE4 PUSH1 0x80 DUP4 ADD DUP8 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CF1 PUSH1 0xA0 DUP4 ADD DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4CFE PUSH1 0xC0 DUP4 ADD DUP6 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4D0B PUSH1 0xE0 DUP4 ADD DUP5 PUSH2 0x3491 JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4D26 DUP3 DUP9 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4D33 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x45BE JUMP JUMPDEST PUSH2 0x4D40 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x45C7 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4D53 DUP2 DUP5 DUP7 PUSH2 0x357F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x4D6C DUP3 DUP7 PUSH2 0x3491 JUMP JUMPDEST PUSH2 0x4D79 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x45BE JUMP JUMPDEST PUSH2 0x4D86 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x45C7 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4793 DUP2 PUSH2 0x41CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4DB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x4DD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x4DF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x1F SWAP2 SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E48 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E23 JUMP JUMPDEST DUP1 PUSH2 0x1471 DUP2 PUSH2 0x4EC9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E33 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E3E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E7B DUP3 PUSH2 0x4E5A JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4EAE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x4E96 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x45B8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP1 JUMP JUMPDEST PUSH1 0x8 DUP2 LT PUSH2 0x2A47 JUMPI INVALID JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E23 JUMP JUMPDEST DUP2 EQ PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E2E JUMP JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x239E JUMP JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E33 JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E54 JUMP JUMPDEST PUSH2 0x4EDC DUP2 PUSH2 0x4E5A JUMP INVALID SELFBALANCE PUSH16 0x7665726E6F72427261766F3A3A736574 POP PUSH19 0x6F706F73616C436F6E666967A365627A7A7231 PC KECCAK256 PUSH18 0x31C586F8C469C7DBA84F67AEA57B19B3C03E 0x4D 0xC9 0xE3 SELFBALANCE 0xD6 0xEE 0xEE 0xE9 PUSH28 0x89DA13CF6C6578706572696D656E74616CF564736F6C634300051000 BLOCKHASH ","sourceMap":"4581:23593:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4581:23593:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4650:42:1;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;4057:24;;;:::i;:::-;;;;;;;;4715:52:0;;;:::i;:::-;;;;;;;;12047:2916;;;;;;;;;:::i;4753:49:1:-;;;;;;;;;:::i;4543:33::-;;;:::i;:::-;;;;;;;;8981:2230:0;;;;;;;;;:::i;:::-;;25488:387;;;;;;;;;:::i;5306:130::-;;;:::i;5169:44::-;;;:::i;4961:55::-;;;:::i;3389:27:1:-;;;:::i;:::-;;;;;;;;18684:328:0;;;;;;;;;:::i;:::-;;;;;;;;;;;8962:40:1;;;:::i;:::-;;;;;;;;;;;8150:54;;;;;;;;;:::i;:::-;;;;;;;;;;3952:23;;;:::i;21973:702:0:-;;;;;;;;;:::i;19517:1134::-;;;;;;;;;:::i;:::-;;;;;;;;17505:985;;;;;;;;;:::i;7232:23:1:-;;;:::i;5913:1540:0:-;;;;;;;;;:::i;20856:177::-;;;;;;;;;:::i;3465:29:1:-;;;:::i;4829:55:0:-;;;:::i;21316:215::-;;;;;;;;;:::i;7129:33:1:-;;;:::i;4186:29::-;;;:::i;26189:521:0:-;;;;;;;;;:::i;7658:1032::-;;;;;;;;;:::i;4445:33:1:-;;;:::i;4354:25::-;;;:::i;15094:786:0:-;;;;;;;;;:::i;5523:95::-;;;:::i;19221:152::-;;;;;;;;;:::i;:::-;;;;;;;;24169:410;;;;;;;;;:::i;26890:655::-;;;:::i;8288:59:1:-;;;;;;;;;:::i;3306:20::-;;;:::i;24867:471:0:-;;;;;;;;;:::i;4272:29:1:-;;;:::i;16608:696:0:-;;;;;;;;;:::i;4650:42:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4650:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4057:24::-;;;;:::o;4715:52:0:-;;;;;;;;;;;;;;-1:-1:-1;;;4715:52:0;;;;:::o;12047:2916::-;12290:4;12372:17;;12393:1;12372:22;;12364:84;;;;-1:-1:-1;;;12364:84:0;;;;;;;;;;;;;;;;;12558:15;:36;12580:12;12574:19;;;;;;;;12558:36;;;;;;;;;;;;;-1:-1:-1;12558:36:0;:54;;;12479:8;;-1:-1:-1;;;;;12479:8:0;:22;12502:10;12514:23;12521:12;12479:8;12514:6;:23::i;:::-;12479:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12479:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12479:59:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12479:59:0;;;;;;;;;-1:-1:-1;;;;;12479:133:0;;;12458:243;;;;-1:-1:-1;;;12458:243:0;;;;;;;;;12750:6;:13;12732:7;:14;:31;:86;;;;;12801:10;:17;12783:7;:14;:35;12732:86;:140;;;;;12856:9;:16;12838:7;:14;:34;12732:140;12711:255;;;;-1:-1:-1;;;12711:255:0;;;;;;;;;12984:14;;12976:76;;;;-1:-1:-1;;;12976:76:0;;;;;;;;;13088:21;;13070:7;:14;:39;;13062:92;;;;-1:-1:-1;;;13062:92:0;;;;;;;;;13207:10;13165:21;13189:29;;;:17;:29;;;;;;13232:21;;13228:548;;13269:42;13314:23;13320:16;13314:5;:23::i;:::-;13269:68;-1:-1:-1;13408:20:0;13376:28;:52;;;;;;;;;;13351:199;;;;-1:-1:-1;;;13351:199:0;;;;;;;;;13621:21;13589:28;:53;;;;;;;;;;13564:201;;;;-1:-1:-1;;;13564:201:0;;;;;;;;;13228:548;;13786:15;13804:70;13811:12;13825:15;:36;13847:12;13841:19;;;;;;;;13825:36;;;;;;;;;;;;;:48;;;13804:6;:70::i;:::-;13786:88;;13884:13;13900:69;13907:10;13919:15;:36;13941:12;13935:19;;;;;;;;13919:36;;;;;;;;;;;;;:49;;;13900:6;:69::i;:::-;13980:13;:15;;;;;;13884:85;-1:-1:-1;14005:27:0;;:::i;:::-;14035:489;;;;;;;;14062:13;;14035:489;;;;14099:10;-1:-1:-1;;;;;14035:489:0;;;;;14128:1;14035:489;;;;14152:7;14035:489;;;;14181:6;14035:489;;;;14213:10;14035:489;;;;14248:9;14035:489;;;;14283:10;14035:489;;;;14317:8;14035:489;;;;14349:1;14035:489;;;;14378:1;14035:489;;;;14407:1;14035:489;;;;14432:5;14035:489;;;;;;14461:5;14035:489;;;;;;14500:12;14494:19;;;;;;;;14035:489;;;;14545:14;;14535:25;;;;:9;:25;;;;;;;;;:39;;;;;;;;;;;;;-1:-1:-1;;;;;;14535:39:0;-1:-1:-1;;;;;14535:39:0;;;;;;;;;;;;;;;;;;;;;;;14545:14;;-1:-1:-1;14545:14:0;;14535:39;;;;;;;;;:::i;:::-;-1:-1:-1;14535:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14535:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14535:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14535:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14535:39:0;;;;;;;;;;-1:-1:-1;;14535:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14626:14;;14602:20;;;;;-1:-1:-1;;;;;14584:39:0;-1:-1:-1;14584:39:0;;;;;;;;;;:56;14685:14;;14656:269;;14713:10;14737:7;14758:6;14778:10;14802:9;14825:10;14849:8;14871:11;14902:12;14896:19;;;;;;;;14656:269;;;;;;;;;;;;;;;;;;;;;;;;14942:14;;-1:-1:-1;;;;12047:2916:0;;;;;;;;;:::o;4753:49:1:-;;;;;;;;;;;;;:::o;4543:33::-;;;-1:-1:-1;;;;;4543:33:1;;:::o;8981:2230:0:-;9090:5;;-1:-1:-1;;;;;9090:5:0;9076:10;:19;9068:77;;;;-1:-1:-1;;;9068:77:0;;;;;;;;;9176:16;:32;:36;;;;:92;;-1:-1:-1;9232:32:0;;:36;;9176:92;:147;;;;-1:-1:-1;9288:31:0;;:35;;9176:147;:202;;;;-1:-1:-1;9343:31:0;;:35;;9176:202;9155:320;;;;-1:-1:-1;;;9155:320:0;;;;;;;;;9505:23;;9572:25;:23;:25::i;:::-;9559:38;;:9;:38;9538:150;;;;-1:-1:-1;;;9538:150:0;;;;;;;;;9703:9;9698:1507;9718:9;9714:1;:13;9698:1507;;;9809:16;:32;;;9773:16;9790:1;9773:19;;;;;;;;;;;;;;:32;;;:68;;9748:187;;;;-1:-1:-1;;;9748:187:0;;;;;;;;;10010:16;:32;;;9974:16;9991:1;9974:19;;;;;;;;;;;;;;:32;;;:68;;9949:187;;;;-1:-1:-1;;;9949:187:0;;;;;;;;;10210:16;:31;;;10175:16;10192:1;10175:19;;;;;;;;;;;;;;:31;;;:66;;10150:184;;;;-1:-1:-1;;;10150:184:0;;;;;;;;;10408:16;:31;;;10373:16;10390:1;10373:19;;;;;;;;;;;;;;:31;;;:66;;10348:184;;;;-1:-1:-1;;;10348:184:0;;;;;;;;;4875:9;10571:16;10588:1;10571:19;;;;;;;;;;;;;;:37;;;:63;;10546:187;;;;-1:-1:-1;;;10546:187:0;;;;;;;;;5007:9;10772:16;10789:1;10772:19;;;;;;;;;;;;;;:37;;;:63;;10747:187;;;;-1:-1:-1;;;10747:187:0;;;;;;;;;10970:16;10987:1;10970:19;;;;;;;;;;;;;;;;;;;10949:18;;;;:15;:18;;;;;;;:40;;;;;;;;;;;;;;;;;;;11044:19;;11008:186;;11044:16;;10965:1;;11044:19;;;;;;;;;;;;:32;;;11094:16;11111:1;11094:19;;;;;;;;;;;;;;:31;;;11143:16;11160:1;11143:19;;;;;;;;;;;;;;:37;;;11008:186;;;;;;;;;;;;;;;;;9729:3;;9698:1507;;;;8981:2230;;:::o;25488:387::-;25593:5;;-1:-1:-1;;;;;25593:5:0;25579:10;:19;25571:84;;;;-1:-1:-1;;;25571:84:0;;;;;;;;;25697:21;;;25728:46;;;;25790:78;;;;;;25697:21;;25752:22;;25790:78;;;;;;;;;;25488:387;;:::o;5306:130::-;5356:80;;;;;;;;;;;;;;5306:130;:::o;5169:44::-;5204:9;5169:44;:::o;4961:55::-;5007:9;4961:55;:::o;3389:27:1:-;;;-1:-1:-1;;;;;3389:27:1;;:::o;18684:328:0:-;18782:24;18808:20;18830:26;18858:24;18898:18;18919:9;:21;18929:10;18919:21;;;;;;;;;;;18898:42;;18958:1;:9;;18969:1;:8;;18979:1;:12;;18993:1;:11;;18950:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18950:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18950:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18950:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18684:328;;;;;:::o;8962:40:1:-;;;;;;;;;;:::o;8150:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3952:23::-;;;;:::o;21973:702:0:-;22078:23;5356:80;;;;;;;;;;;;;;;;22171:4;;;;;;;;;-1:-1:-1;;;22171:4:0;;;;;;;;22155:22;22179:20;:18;:20::i;:::-;22209:4;22127:88;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22127:88:0;;;22104:121;;;;;;22078:147;;22235:18;5565:53;;;;;;;;;;;;;;;22266:48;;22294:10;;22306:7;;22266:48;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22266:48:0;;;22256:59;;;;;;22235:80;;22325:14;22381:15;22398:10;22352:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22352:57:0;;;22342:68;;;;;;22325:85;;22420:17;22440:26;22450:6;22458:1;22461;22464;22440:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22440:26:0;;-1:-1:-1;;22440:26:0;;;-1:-1:-1;;;;;;;22484:23:0;;22476:83;;;;-1:-1:-1;;;22476:83:0;;;;;;;;;22583:9;-1:-1:-1;;;;;22574:94:0;;22594:10;22606:7;22615:48;22632:9;22643:10;22655:7;22615:16;:48::i;:::-;22574:94;;;;;;;;;;;;;;;;;21973:702;;;;;;;;;:::o;19517:1134::-;19570:13;19633:10;19616:13;;:27;;:61;;;;;19660:17;;19647:10;:30;19616:61;19595:149;;;;-1:-1:-1;;;19595:149:0;;;;;;;;;19754:25;19782:21;;;:9;:21;;;;;19817:17;;;;;;19813:832;;;19857:22;19850:29;;;;;19813:832;19916:8;:19;;;19900:12;:35;19896:749;;19958:21;19951:28;;;;;19896:749;20016:8;:17;;;20000:12;:33;19996:649;;20056:20;20049:27;;;;;19996:649;20118:8;:21;;;20097:8;:17;;;:42;;:77;;;;5204:9;20143:8;:17;;;:31;20097:77;20093:552;;;20197:22;20190:29;;;;;20093:552;20240:12;;;;20236:409;;20280:23;20273:30;;;;;20236:409;20324:17;;;;;;;;;20320:325;;;20364:22;20357:29;;;;;20320:325;20446:12;;;;20484:21;;;;;;20460:47;;;;:17;:47;;;;;;;;;;:62;;-1:-1:-1;;;20460:62:0;;;;20439:84;;20446:12;-1:-1:-1;;;;;20460:47:0;;;;:60;;:62;;;;;;;;;;;:47;:62;;;5:2:-1;;;;30:1;27;20:12;5:2;20460:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20460:62:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20460:62:0;;;;;;;;;20439:6;:84::i;:::-;20420:15;:103;20403:242;;20555:21;20548:28;;;;;20403:242;20614:20;20607:27;;;19517:1134;;;;:::o;17505:985::-;17586:22;17565:17;17571:10;17565:5;:17::i;:::-;:43;;;;;;;;;;17557:110;;;;-1:-1:-1;;;17557:110:0;;;;;;;;;17678:25;17706:21;;;:9;:21;;;;;17772:8;;-1:-1:-1;;;;;17772:8:0;17758:10;:22;;:73;;-1:-1:-1;17814:17:0;;;;-1:-1:-1;;;;;17814:17:0;17800:10;:31;17758:73;:234;;;-1:-1:-1;17936:15:0;17952:21;;;;;;17936:38;;;;;;;;;;;;:56;;;17851:8;;17952:21;17874:17;;;;-1:-1:-1;;;;;17851:8:0;;;;:22;;17874:17;;;17893:23;;17900:12;;17893:6;:23::i;:::-;17851:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17851:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17851:66:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17851:66:0;;;;;;;;;-1:-1:-1;;;;;17851:141:0;;17758:234;17737:328;;;;-1:-1:-1;;;17737:328:0;;;;;;;;;18076:17;;;:24;;-1:-1:-1;;18076:24:0;18096:4;18076:24;;;:17;18110:330;18131:16;;;:23;18127:27;;18110:330;;;18193:21;;;;;;18175:40;;;;:17;:40;;;;;;18251:16;;;:19;;-1:-1:-1;;;;;18175:40:0;;;;:58;;18251:16;18268:1;;18251:19;;;;;;;;;;;;;;;;18288:15;;;:18;;-1:-1:-1;;;;;18251:19:0;;;;18304:1;;18288:18;;;;;;;;;;;;;;18324:8;:19;;18344:1;18324:22;;;;;;;;;;;;;;;18364:8;:18;;18383:1;18364:21;;;;;;;;;;;;;;;18403:8;:12;;;18175:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18175:254:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;18156:3:0;;;;;-1:-1:-1;18110:330:0;;-1:-1:-1;18110:330:0;;;18455:28;18472:10;18455:28;;;;;;;7232:23:1;;;-1:-1:-1;;;;;7232:23:1;;:::o;5913:1540:0:-;6206:1;6173:20;;:17;:20;;;;-1:-1:-1;;;;;6173:20:0;6165:43;6157:106;;;;-1:-1:-1;;;6157:106:0;;;;;;;;;6295:5;;-1:-1:-1;;;;;6295:5:0;6281:10;:19;6273:69;;;;-1:-1:-1;;;6273:69:0;;;;;;;;;-1:-1:-1;;;;;6360:23:0;;6352:88;;;;-1:-1:-1;;;6352:88:0;;;;;;;;;-1:-1:-1;;;;;6458:23:0;;6450:79;;;;-1:-1:-1;;;6450:79:0;;;;;;;;;6580:25;:23;:25::i;:::-;6560:45;;:9;:16;:45;6539:178;;;;-1:-1:-1;;;6539:178:0;;;;;;;;;6775:25;:23;:25::i;:::-;6748:52;;:16;:23;:52;6727:192;;;;-1:-1:-1;;;6727:192:0;;;;;;;;;6930:8;:39;;-1:-1:-1;;;;;6930:39:0;;;-1:-1:-1;;;;;;6930:39:0;;;;;;;7003:2;6979:21;:26;7015:8;:20;;;;;;;;;;;;;;;7098:38;7118:17;7098:19;:38::i;:::-;7146:36;7165:16;7146:18;:36::i;:::-;7213:16;;7193:17;7239:208;7259:9;7255:1;:13;7239:208;;;7330:1;-1:-1:-1;;;;;7297:35:0;7305:9;7315:1;7305:12;;;;;;;;;;;;;;-1:-1:-1;;;;;7297:35:0;;;7289:98;;;;-1:-1:-1;;;7289:98:0;;;;;;;;;7424:9;7434:1;7424:12;;;;;;;;;;;;;;;;;;;7401:20;;;;:17;:20;;;;;;;:35;;-1:-1:-1;;;;;;7401:35:0;-1:-1:-1;;;;;7401:35:0;;;;;;;;;-1:-1:-1;7270:3:0;7239:208;;;;5913:1540;;;;;;:::o;20856:177::-;20939:10;20930:96;20951:10;20963:7;20972:49;20939:10;20951;20963:7;20972:16;:49::i;:::-;20930:96;;;;;;;;;;;;;;;;;20856:177;;:::o;3465:29:1:-;;;-1:-1:-1;;;;;3465:29:1;;:::o;4829:55:0:-;4875:9;4829:55;:::o;21316:215::-;21433:10;21424:100;21445:10;21457:7;21466:49;21433:10;21445;21457:7;21466:16;:49::i;:::-;21517:6;;21424:100;;;;;;;;;;;;;;;;;;;21316:215;;;;:::o;7129:33:1:-;;;;:::o;4186:29::-;;;;:::o;26189:521:0:-;26313:5;;-1:-1:-1;;;;;26313:5:0;26299:10;:19;26291:74;;;;-1:-1:-1;;;26291:74:0;;;;;;;;;26462:12;;;-1:-1:-1;;;;;26542:30:0;;;-1:-1:-1;;;;;;26542:30:0;;;;;;26654:49;;26462:12;;;26654:49;;;;26462:12;;26557:15;;26654:49;;7658:1032;7771:5;;-1:-1:-1;;;;;7771:5:0;7757:10;:19;7749:78;;;;-1:-1:-1;;;7749:78:0;;;;;;;;;7858:35;;:39;;;;:97;;;7954:1;7917:19;:34;;;:38;7858:97;:188;;;;;8012:19;:34;;;7975:19;:34;;;:71;7858:188;:281;;;;-1:-1:-1;8104:35:0;;;;8066;;:73;7858:281;7837:378;;;;-1:-1:-1;;;7837:378:0;;;;;;;;;8263:16;:32;8309:35;;8358:32;;8404:35;;;;8453:31;;8498:34;;;;;8546:31;;8591:34;;;;8230:405;;;;;;8263:32;;8309:35;;8358:32;;8404:35;;8453:31;;8498:34;8546:31;8230:405;;;;;;;;;;8645:38;;:16;:38;;;;;;;;;;;;;;;;;;7658:1032::o;4445:33:1:-;;;-1:-1:-1;;;;;4445:33:1;;:::o;4354:25::-;;;;:::o;15094:786:0:-;15187:23;15166:17;15172:10;15166:5;:17::i;:::-;:44;;;;;;;;;15145:159;;;;-1:-1:-1;;;15145:159:0;;;;;;;;;15314:25;15342:21;;;:9;:21;;;;;;;;15432;;;;;;15408:47;;:17;:47;;;;;;:55;;-1:-1:-1;;;15408:55:0;;;;15342:21;;15314:25;15384:80;;15391:15;;-1:-1:-1;;;;;15408:47:0;;;;:53;;:55;;;;;15342:21;;15408:55;;;;;;:47;:55;;;5:2:-1;;;;30:1;27;20:12;15384:80:0;15373:91;;15479:6;15474:326;15491:16;;;:23;15487:27;;15474:326;;;15535:254;15574:8;:16;;15591:1;15574:19;;;;;;;;;;;;;;;;;;15611:15;;;:18;;-1:-1:-1;;;;;15574:19:0;;;;15627:1;;15611:18;;;;;;;;;;;;;;15647:8;:19;;15667:1;15647:22;;;;;;;;;;;;;;;;;;15535:254;;;;;;;-1:-1:-1;;15535:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15647:22;15535:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15687:8;:18;;15706:1;15687:21;;;;;;;;;;;;;;;;;;15535:254;;;;;;;-1:-1:-1;;15535:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15687:21;15535:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;15753:21:0;;;;15726:3;;-1:-1:-1;15753:21:0;;15535;:254::i;:::-;15516:3;;15474:326;;;-1:-1:-1;15809:12:0;;;:18;;;15842:31;;;;;;15857:10;;15824:3;;15842:31;;;;;;;;;;15094:786;;;:::o;5523:95::-;5565:53;;;;;;19221:152;19296:14;;:::i;:::-;-1:-1:-1;19329:21:0;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;19329:37:0;;;;:30;;:37;;;;;;19322:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19322:44:0;;;;;;;;19221:152;;;;;:::o;24169:410::-;24253:8;;-1:-1:-1;;;;;24253:8:0;24239:10;:22;;:45;;-1:-1:-1;24279:5:0;;-1:-1:-1;;;;;24279:5:0;24265:10;:19;24239:45;24231:109;;;;-1:-1:-1;;;24231:109:0;;;;;;;;;-1:-1:-1;;;;;24358:25:0;;24350:97;;;;-1:-1:-1;;;24350:97:0;;;;;;;;;24479:8;;;-1:-1:-1;;;;;24497:22:0;;;-1:-1:-1;;;;;;24497:22:0;;;;;;24535:37;;24479:8;;;24535:37;;;;24479:8;;24508:11;;24535:37;;26890:655;27040:12;;-1:-1:-1;;;;;27040:12:0;27026:10;:26;:54;;;;-1:-1:-1;27056:10:0;:24;;27026:54;27005:147;;;;-1:-1:-1;;;27005:147:0;;;;;;;;;27215:16;27234:5;;;27275:12;;-1:-1:-1;;;;;27275:12:0;;;-1:-1:-1;;;;;;27345:20:0;;;;;;;;;27411:25;;;;;;27452;;27234:5;;;;27275:12;;27452:25;;;;27234:5;;27471;;;27452:25;;;;;;;;;;27525:12;;27492:46;;;;;;27508:15;;-1:-1:-1;;;;;27525:12:0;;27492:46;;8288:59:1;;;;;;;;;;;;-1:-1:-1;;;;;8288:59:1;;:::o;3306:20::-;;;-1:-1:-1;;;;;3306:20:1;;:::o;24867:471:0:-;24950:5;;-1:-1:-1;;;;;24950:5:0;24936:10;:19;24928:68;;;;-1:-1:-1;;;24928:68:0;;;;;;;;;25014:17;;:22;25006:83;;;;-1:-1:-1;;;25006:83:0;;;;;;;;;25138:13;-1:-1:-1;;;;;25115:51:0;;:53;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25115:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25115:53:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25115:53:0;;;;;;;;;25099:13;:69;;;25178:17;:33;-1:-1:-1;25221:111:0;25241:25;:23;:25::i;:::-;25237:29;;:1;:29;25221:111;;;25287:20;;;;:17;:20;;;;;;;:34;;-1:-1:-1;;;25287:34:0;;;;-1:-1:-1;;;;;25287:20:0;;;;:32;;:34;;;;;;;;;;;:20;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;25287:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25287:34:0;;;;25268:3;;;;;25221:111;;;;24867:471;:::o;4272:29:1:-;;;;:::o;16608:696:0:-;16703:20;16682:17;16688:10;16682:5;:17::i;:::-;:41;;;;;;;;;16661:157;;;;-1:-1:-1;;;16661:157:0;;;;;;;;;16828:25;16856:21;;;:9;:21;;;;;16887:17;;;:24;;-1:-1:-1;;16887:24:0;;;;;16856:21;16921:334;16938:16;;;:23;16934:27;;16921:334;;;17006:21;;;;;;16982:47;;;;:17;:47;;;;;;17066:16;;;:19;;-1:-1:-1;;;;;16982:47:0;;;;:66;;17066:16;17083:1;;17066:19;;;;;;;;;;;;;;;;17103:15;;;:18;;-1:-1:-1;;;;;17066:19:0;;;;17119:1;;17103:18;;;;;;;;;;;;;;17139:8;:19;;17159:1;17139:22;;;;;;;;;;;;;;;17179:8;:18;;17198:1;17179:21;;;;;;;;;;;;;;;17218:8;:12;;;16982:262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16982:262:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16982:262:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;16982:262:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;16982:262:0;;;;;;;;;-1:-1:-1;16963:3:0;;16921:334;;;;17269:28;17286:10;17269:28;;;;;;;27719:146;27780:4;27809:1;27804;:6;;27796:40;;;;-1:-1:-1;;;27796:40:0;;;;;;;;;-1:-1:-1;27853:5:0;;;27719:146::o;27551:162::-;27612:4;27637:5;;;27660:6;;;;27652:36;;;;-1:-1:-1;;;27652:36:0;;;;;;;;;27705:1;27551:162;-1:-1:-1;;;27551:162:0:o;28051:121::-;28133:32;28051:121;;:::o;27871:174::-;27996:9;27871:174;:::o;22997:1044::-;23088:6;23135:20;23114:17;23120:10;23114:5;:17::i;:::-;:41;;;;;;;;;23106:103;;;;-1:-1:-1;;;23106:103:0;;;;;;;;;23238:1;23227:7;:12;;;;23219:75;;;;-1:-1:-1;;;23219:75:0;;;;;;;;;23304:25;23332:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;23389:24:0;;;;:17;;;:24;;;;;;23431:16;;;;:25;23423:90;;;;-1:-1:-1;;;23423:90:0;;;;;;;;;23538:8;;23568:19;;;;23538:50;;-1:-1:-1;;;23538:50:0;;23523:12;;-1:-1:-1;;;;;23538:8:0;;:22;;:50;;23561:5;;23538:50;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23538:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23538:50:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23538:50:0;;;;;;;;;23523:65;-1:-1:-1;23603:12:0;;;23599:313;;23655:36;23662:8;:21;;;23685:5;-1:-1:-1;;;;;23655:36:0;:6;:36::i;:::-;23631:21;;;:60;23599:313;;;23712:7;:12;;23723:1;23712:12;23708:204;;;23760:32;23767:8;:17;;;23786:5;-1:-1:-1;;;;;23760:32:0;:6;:32::i;:::-;23740:17;;;:52;23708:204;;;23813:7;:12;;23824:1;23813:12;23809:103;;;23865:36;23872:8;:21;;;23895:5;-1:-1:-1;;;;;23865:36:0;:6;:36::i;:::-;23841:21;;;:60;23809:103;23922:23;;23941:4;-1:-1:-1;;23922:23:0;;;;-1:-1:-1;;23955:25:0;23922:23;;23955:25;;;;-1:-1:-1;;23990:21:0;;-1:-1:-1;;;;;23990:21:0;;;;;;;;-1:-1:-1;;22997:1044:0;;;;;:::o;15886:581::-;16114:31;;;;;;;:17;:31;;;;;;;;;;16192:47;;-1:-1:-1;;;;;16114:31:0;;;;:50;;16192:47;;16203:6;;16211:5;;16218:9;;16229:4;;16235:3;;16192:47;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16192:47:0;;;16182:58;;;;;;16114:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16114:140:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16114:140:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16114:140:0;;;;;;;;;16113:141;16092:273;;;;-1:-1:-1;;;16092:273:0;;;;;;;;;16375:31;;;;;;;:17;:31;;;;;;;;:85;;-1:-1:-1;;;16375:85:0;;-1:-1:-1;;;;;16375:31:0;;;;:48;;:85;;16424:6;;16432:5;;16439:9;;16450:4;;16456:3;;16375:85;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16375:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16375:85:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16375:85:0;;;;;;;;4581:23593;;;;;;;;;;;;;;;-1:-1:-1;;;;;4581:23593:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4581:23593:0;-1:-1:-1;;;;;4581:23593:0;;;;;;;;;;;-1:-1:-1;4581:23593:0;;;;;;;-1:-1:-1;4581:23593:0;;;-1:-1:-1;4581:23593:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4581:23593:0;;;-1:-1:-1;4581:23593:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;4581:23593:0;;;-1:-1:-1;4581:23593:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;4581:23593:0;;;-1:-1:-1;4581:23593:0;:::i;:::-;;;;;;;;;-1:-1:-1;4581:23593:0;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;4581:23593:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;295:1;292;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;;;354:80;;;345:89;;451:5;476:6;469:5;462:21;506:4;498:6;494:17;484:27;;528:4;523:3;519:14;512:21;;581:6;628:3;620:4;612:6;608:17;603:3;599:27;596:36;593:2;;;645:1;642;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;738:3;760:37;793:3;781:10;760:37;;;748:50;;-1:-1;821:4;812:14;;;;840;;;;;702:1;695:9;655:206;;;659:14;237:630;;;;;;;;891:693;;1013:3;1006:4;998:6;994:17;990:27;980:2;;1031:1;1028;1021:12;980:2;1068:6;1055:20;1090:85;1105:69;1167:6;1105:69;;1090:85;1203:21;;;1247:4;1235:17;;;;1081:94;;-1:-1;1260:14;;1235:17;1355:1;1340:238;1365:6;1362:1;1359:13;1340:238;;;1448:3;1435:17;1427:6;1423:30;1472:42;1510:3;1498:10;1472:42;;;1460:55;;-1:-1;1538:4;1529:14;;;;1557;;;;;1387:1;1380:9;1340:238;;1629:785;;1772:3;1765:4;1757:6;1753:17;1749:27;1739:2;;1790:1;1787;1780:12;1739:2;1827:6;1814:20;1849:106;1864:90;1947:6;1864:90;;1849:106;1840:115;;1972:5;1997:6;1990:5;1983:21;2027:4;2019:6;2015:17;2005:27;;2049:4;2044:3;2040:14;2033:21;;2102:6;2149:3;2141:4;2133:6;2129:17;2124:3;2120:27;2117:36;2114:2;;;2166:1;2163;2156:12;2114:2;2191:1;2176:232;2201:6;2198:1;2195:13;2176:232;;;2259:3;2281:63;2340:3;2328:10;2281:63;;;2269:76;;-1:-1;2368:4;2359:14;;;;2387;;;;;2223:1;2216:9;2176:232;;2439:696;;2562:3;2555:4;2547:6;2543:17;2539:27;2529:2;;2580:1;2577;2570:12;2529:2;2617:6;2604:20;2639:86;2654:70;2717:6;2654:70;;2639:86;2753:21;;;2797:4;2785:17;;;;2630:95;;-1:-1;2810:14;;2785:17;2905:1;2890:239;2915:6;2912:1;2909:13;2890:239;;;2998:3;2985:17;2977:6;2973:30;3022:43;3061:3;3049:10;3022:43;;;3010:56;;-1:-1;3089:4;3080:14;;;;3108;;;;;2937:1;2930:9;2890:239;;3206:791;;3351:3;3344:4;3336:6;3332:17;3328:27;3318:2;;3369:1;3366;3359:12;3318:2;3406:6;3393:20;3428:108;3443:92;3528:6;3443:92;;3428:108;3419:117;;3553:5;3578:6;3571:5;3564:21;3608:4;3600:6;3596:17;3586:27;;3630:4;3625:3;3621:14;3614:21;;3683:6;3730:3;3722:4;3714:6;3710:17;3705:3;3701:27;3698:36;3695:2;;;3747:1;3744;3737:12;3695:2;3772:1;3757:234;3782:6;3779:1;3776:13;3757:234;;;3840:3;3862:65;3923:3;3911:10;3862:65;;;3850:78;;-1:-1;3951:4;3942:14;;;;3979:4;3970:14;;;;;3804:1;3797:9;3757:234;;4023:707;;4140:3;4133:4;4125:6;4121:17;4117:27;4107:2;;4158:1;4155;4148:12;4107:2;4195:6;4182:20;4217:80;4232:64;4289:6;4232:64;;4217:80;4208:89;;4314:5;4339:6;4332:5;4325:21;4369:4;4361:6;4357:17;4347:27;;4391:4;4386:3;4382:14;4375:21;;4444:6;4491:3;4483:4;4475:6;4471:17;4466:3;4462:27;4459:36;4456:2;;;4508:1;4505;4498:12;4456:2;4533:1;4518:206;4543:6;4540:1;4537:13;4518:206;;;4601:3;4623:37;4656:3;4644:10;4623:37;;;4611:50;;-1:-1;4684:4;4675:14;;;;4703;;;;;4565:1;4558:9;4518:206;;4738:128;4813:13;;4831:30;4813:13;4831:30;;4873:130;4940:20;;4965:33;4940:20;4965:33;;5010:134;5088:13;;5106:33;5088:13;5106:33;;5152:432;;5249:3;5242:4;5234:6;5230:17;5226:27;5216:2;;5267:1;5264;5257:12;5216:2;5304:6;5291:20;5326:60;5341:44;5378:6;5341:44;;5326:60;5317:69;;5406:6;5399:5;5392:21;5442:4;5434:6;5430:17;5475:4;5468:5;5464:16;5510:3;5501:6;5496:3;5492:16;5489:25;5486:2;;;5527:1;5524;5517:12;5486:2;5537:41;5571:6;5566:3;5561;5537:41;;;5209:375;;;;;;;;5593:442;;5705:3;5698:4;5690:6;5686:17;5682:27;5672:2;;5723:1;5720;5713:12;5672:2;5753:6;5747:13;5775:64;5790:48;5831:6;5790:48;;5775:64;5766:73;;5859:6;5852:5;5845:21;5895:4;5887:6;5883:17;5928:4;5921:5;5917:16;5963:3;5954:6;5949:3;5945:16;5942:25;5939:2;;;5980:1;5977;5970:12;5939:2;5990:39;6022:6;6017:3;6012;5990:39;;6043:182;6136:20;;6161:59;6136:20;6161:59;;6232:164;6316:20;;6341:50;6316:20;6341:50;;6418:337;;;6533:3;6526:4;6518:6;6514:17;6510:27;6500:2;;6551:1;6548;6541:12;6500:2;-1:-1;6571:20;;-1:-1;;;;;6600:30;;6597:2;;;6643:1;6640;6633:12;6597:2;6677:4;6669:6;6665:17;6653:29;;6728:3;6720:4;6712:6;6708:17;6698:8;6694:32;6691:41;6688:2;;;6745:1;6742;6735:12;6688:2;6493:262;;;;;;7716:642;;7833:4;7821:9;7816:3;7812:19;7808:30;7805:2;;;7851:1;7848;7841:12;7805:2;7869:20;7884:4;7869:20;;;7860:29;-1:-1;7946:1;7978:49;8023:3;8003:9;7978:49;;;7953:75;;-1:-1;8097:2;8130:49;8175:3;8151:22;;;8130:49;;;8123:4;8116:5;8112:16;8105:75;8049:142;8254:2;8287:49;8332:3;8323:6;8312:9;8308:22;8287:49;;;8280:4;8273:5;8269:16;8262:75;8201:147;7799:559;;;;;8426:806;;8549:4;8537:9;8532:3;8528:19;8524:30;8521:2;;;8567:1;8564;8557:12;8521:2;8585:20;8600:4;8585:20;;;8576:29;-1:-1;8666:1;8698:49;8743:3;8723:9;8698:49;;;8673:75;;-1:-1;8820:2;8853:49;8898:3;8874:22;;;8853:49;;;8846:4;8839:5;8835:16;8828:75;8769:145;8974:2;9007:49;9052:3;9043:6;9032:9;9028:22;9007:49;;;9000:4;8993:5;8989:16;8982:75;8924:144;9128:2;9161:49;9206:3;9197:6;9186:9;9182:22;9161:49;;;9154:4;9147:5;9143:16;9136:75;9078:144;8515:717;;;;;9517:126;9582:20;;9607:31;9582:20;9607:31;;9650:132;9727:13;;9745:32;9727:13;9745:32;;9789:241;;9893:2;9881:9;9872:7;9868:23;9864:32;9861:2;;;9909:1;9906;9899:12;9861:2;9944:1;9961:53;10006:7;9986:9;9961:53;;;9951:63;9855:175;-1:-1;;;;9855:175;10037:1193;;;;;;10347:3;10335:9;10326:7;10322:23;10318:33;10315:2;;;10364:1;10361;10354:12;10315:2;10399:1;10416:53;10461:7;10441:9;10416:53;;;10406:63;;10378:97;10506:2;10524:87;10603:7;10594:6;10583:9;10579:22;10524:87;;;10514:97;;10485:132;10676:3;10665:9;10661:19;10648:33;-1:-1;;;;;10693:6;10690:30;10687:2;;;10733:1;10730;10723:12;10687:2;10753:106;10851:7;10842:6;10831:9;10827:22;10753:106;;;10743:116;;10627:238;10924:3;10913:9;10909:19;10896:33;-1:-1;;;;;10941:6;10938:30;10935:2;;;10981:1;10978;10971:12;10935:2;11001:104;11097:7;11088:6;11077:9;11073:22;11001:104;;;10991:114;;10875:236;11142:3;11161:53;11206:7;11197:6;11186:9;11182:22;11161:53;;;11151:63;;11121:99;10309:921;;;;;;;;;11237:1575;;;;;;;11564:3;11552:9;11543:7;11539:23;11535:33;11532:2;;;11581:1;11578;11571:12;11532:2;11616:31;;-1:-1;;;;;11656:30;;11653:2;;;11699:1;11696;11689:12;11653:2;11719:78;11789:7;11780:6;11769:9;11765:22;11719:78;;;11709:88;;11595:208;11862:2;11851:9;11847:18;11834:32;-1:-1;;;;;11878:6;11875:30;11872:2;;;11918:1;11915;11908:12;11872:2;11938:78;12008:7;11999:6;11988:9;11984:22;11938:78;;;11928:88;;11813:209;12081:2;12070:9;12066:18;12053:32;-1:-1;;;;;12097:6;12094:30;12091:2;;;12137:1;12134;12127:12;12091:2;12157:84;12233:7;12224:6;12213:9;12209:22;12157:84;;;12147:94;;12032:215;12306:2;12295:9;12291:18;12278:32;-1:-1;;;;;12322:6;12319:30;12316:2;;;12362:1;12359;12352:12;12316:2;12382:83;12457:7;12448:6;12437:9;12433:22;12382:83;;;12372:93;;12257:214;12530:3;12519:9;12515:19;12502:33;-1:-1;;;;;12547:6;12544:30;12541:2;;;12587:1;12584;12577:12;12541:2;12607:63;12662:7;12653:6;12642:9;12638:22;12607:63;;;12597:73;;12481:195;12707:3;12726:70;12788:7;12779:6;12768:9;12764:22;12726:70;;;12716:80;;12686:116;11526:1286;;;;;;;;;12819:433;;12976:2;12964:9;12955:7;12951:23;12947:32;12944:2;;;12992:1;12989;12982:12;12944:2;13027:31;;-1:-1;;;;;13067:30;;13064:2;;;13110:1;13107;13100:12;13064:2;13130:106;13228:7;13219:6;13208:9;13204:22;13130:106;;13259:257;;13371:2;13359:9;13350:7;13346:23;13342:32;13339:2;;;13387:1;13384;13377:12;13339:2;13422:1;13439:61;13492:7;13472:9;13439:61;;13523:263;;13638:2;13626:9;13617:7;13613:23;13609:32;13606:2;;;13654:1;13651;13644:12;13606:2;13689:1;13706:64;13762:7;13742:9;13706:64;;13793:360;;13917:2;13905:9;13896:7;13892:23;13888:32;13885:2;;;13933:1;13930;13923:12;13885:2;13968:24;;-1:-1;;;;;14001:30;;13998:2;;;14044:1;14041;14034:12;13998:2;14064:73;14129:7;14120:6;14109:9;14105:22;14064:73;;14160:310;;14298:3;14286:9;14277:7;14273:23;14269:33;14266:2;;;14315:1;14312;14305:12;14266:2;14350:1;14367:87;14446:7;14426:9;14367:87;;14477:241;;14581:2;14569:9;14560:7;14556:23;14552:32;14549:2;;;14597:1;14594;14587:12;14549:2;14632:1;14649:53;14694:7;14674:9;14649:53;;14995:366;;;15116:2;15104:9;15095:7;15091:23;15087:32;15084:2;;;15132:1;15129;15122:12;15084:2;15167:1;15184:53;15229:7;15209:9;15184:53;;;15174:63;;15146:97;15274:2;15292:53;15337:7;15328:6;15317:9;15313:22;15292:53;;;15282:63;;15253:98;15078:283;;;;;;15368:362;;;15487:2;15475:9;15466:7;15462:23;15458:32;15455:2;;;15503:1;15500;15493:12;15455:2;15538:1;15555:53;15600:7;15580:9;15555:53;;;15545:63;;15517:97;15645:2;15663:51;15706:7;15697:6;15686:9;15682:22;15663:51;;15737:613;;;;;15893:2;15881:9;15872:7;15868:23;15864:32;15861:2;;;15909:1;15906;15899:12;15861:2;15944:1;15961:53;16006:7;15986:9;15961:53;;;15951:63;;15923:97;16051:2;16069:51;16112:7;16103:6;16092:9;16088:22;16069:51;;;16059:61;;16030:96;16185:2;16174:9;16170:18;16157:32;-1:-1;;;;;16201:6;16198:30;16195:2;;;16241:1;16238;16231:12;16195:2;16269:65;16326:7;16317:6;16306:9;16302:22;16269:65;;;15855:495;;;;-1:-1;16259:75;-1:-1;;;;15855:495;16357:735;;;;;;16525:3;16513:9;16504:7;16500:23;16496:33;16493:2;;;16542:1;16539;16532:12;16493:2;16577:1;16594:53;16639:7;16619:9;16594:53;;;16584:63;;16556:97;16684:2;16702:51;16745:7;16736:6;16725:9;16721:22;16702:51;;;16692:61;;16663:96;16790:2;16808:51;16851:7;16842:6;16831:9;16827:22;16808:51;;;16798:61;;16769:96;16896:2;16914:53;16959:7;16950:6;16939:9;16935:22;16914:53;;;16904:63;;16875:98;17004:3;17023:53;17068:7;17059:6;17048:9;17044:22;17023:53;;17099:261;;17213:2;17201:9;17192:7;17188:23;17184:32;17181:2;;;17229:1;17226;17219:12;17181:2;17264:1;17281:63;17336:7;17316:9;17281:63;;17368:173;;17455:46;17497:3;17489:6;17455:46;;;-1:-1;;17530:4;17521:14;;17448:93;17550:177;;17661:60;17717:3;17709:6;17661:60;;17926:173;;18013:46;18055:3;18047:6;18013:46;;18107:142;18198:45;18237:5;18198:45;;;18193:3;18186:58;18180:69;;;18256:103;18329:24;18347:5;18329:24;;18517:690;;18662:54;18710:5;18662:54;;;18729:86;18808:6;18803:3;18729:86;;;18722:93;;18836:56;18886:5;18836:56;;;18912:7;18940:1;18925:260;18950:6;18947:1;18944:13;18925:260;;;19017:6;19011:13;19038:63;19097:3;19082:13;19038:63;;;19031:70;;19118:60;19171:6;19118:60;;;19108:70;-1:-1;;18972:1;18965:9;18925:260;;;-1:-1;19198:3;;18641:566;-1:-1;;;;;18641:566;19242:888;;19397:59;19450:5;19397:59;;;19469:91;19553:6;19548:3;19469:91;;;19462:98;;19583:3;19625:4;19617:6;19613:17;19608:3;19604:27;19652:61;19707:5;19652:61;;;19733:7;19761:1;19746:345;19771:6;19768:1;19765:13;19746:345;;;19833:9;19827:4;19823:20;19818:3;19811:33;19878:6;19872:13;19900:74;19969:4;19954:13;19900:74;;;19892:82;;19991:65;20049:6;19991:65;;;20079:4;20070:14;;;;;19981:75;-1:-1;;19793:1;19786:9;19746:345;;;-1:-1;20104:4;;19376:754;-1:-1;;;;;;;19376:754;20167:896;;20324:60;20378:5;20324:60;;;20397:92;20482:6;20477:3;20397:92;;;20390:99;;20512:3;20554:4;20546:6;20542:17;20537:3;20533:27;20581:62;20637:5;20581:62;;;20663:7;20691:1;20676:348;20701:6;20698:1;20695:13;20676:348;;;20763:9;20757:4;20753:20;20748:3;20741:33;20808:6;20802:13;20830:76;20901:4;20886:13;20830:76;;;20822:84;;20923:66;20982:6;20923:66;;;21012:4;21003:14;;;;;20913:76;-1:-1;;20723:1;20716:9;20676:348;;21102:690;;21247:54;21295:5;21247:54;;;21314:86;21393:6;21388:3;21314:86;;;21307:93;;21421:56;21471:5;21421:56;;;21497:7;21525:1;21510:260;21535:6;21532:1;21529:13;21510:260;;;21602:6;21596:13;21623:63;21682:3;21667:13;21623:63;;;21616:70;;21703:60;21756:6;21703:60;;;21693:70;-1:-1;;21557:1;21550:9;21510:260;;21800:94;21867:21;21882:5;21867:21;;22012:113;22095:24;22113:5;22095:24;;22132:152;22233:45;22253:24;22271:5;22253:24;;;22233:45;;22291:343;;22401:38;22433:5;22401:38;;;22451:70;22514:6;22509:3;22451:70;;;22444:77;;22526:52;22571:6;22566:3;22559:4;22552:5;22548:16;22526:52;;;22599:29;22621:6;22599:29;;;22590:39;;;;22381:253;-1:-1;;;22381:253;22986:818;;23103:5;23097:12;23137:1;23126:9;23122:17;23150:1;23145:247;;;;23403:1;23398:400;;;;23115:683;;23145:247;23223:4;23219:1;23208:9;23204:17;23200:28;23242:70;23305:6;23300:3;23242:70;;;-1:-1;;23331:25;;23319:38;;23235:77;-1:-1;;23380:4;23371:14;;;-1:-1;23145:247;;23398:400;23467:1;23456:9;23452:17;23483:70;23546:6;23541:3;23483:70;;;23476:77;;23575:37;23606:5;23575:37;;;23628:1;23636:130;23650:6;23647:1;23644:13;23636:130;;;23709:14;;23696:11;;;23689:35;23756:1;23743:15;;;;23672:4;23665:12;23636:130;;;23780:11;;;-1:-1;;;23115:683;;23073:731;;;;;;23812:178;23921:63;23978:5;23921:63;;24182:158;24281:53;24328:5;24281:53;;24372:300;;24488:71;24552:6;24547:3;24488:71;;;24481:78;;24571:43;24607:6;24602:3;24595:5;24571:43;;;24636:29;24658:6;24636:29;;26563:439;;26723:67;26787:2;26782:3;26723:67;;;-1:-1;;;;;;;;;;;26803:55;;26892:34;26887:2;26878:12;;26871:56;-1:-1;;;26956:2;26947:12;;26940:25;26993:2;26984:12;;26709:293;-1:-1;;26709:293;27011:439;;27171:67;27235:2;27230:3;27171:67;;;-1:-1;;;;;;;;;;;27251:55;;27340:34;27335:2;27326:12;;27319:56;-1:-1;;;27404:2;27395:12;;27388:25;27441:2;27432:12;;27157:293;-1:-1;;27157:293;27459:387;;27619:67;27683:2;27678:3;27619:67;;;27719:34;27699:55;;-1:-1;;;27783:2;27774:12;;27767:42;27837:2;27828:12;;27605:241;-1:-1;;27605:241;27855:445;;28015:67;28079:2;28074:3;28015:67;;;-1:-1;;;;;;;;;;;28095:55;;28184:34;28179:2;28170:12;;28163:56;-1:-1;;;28248:2;28239:12;;28232:31;28291:2;28282:12;;28001:299;-1:-1;;28001:299;28309:413;;28487:85;28569:2;28564:3;28487:85;;;28605:34;28585:55;;-1:-1;;;28669:2;28660:12;;28653:32;28713:2;28704:12;;28473:249;-1:-1;;28473:249;28731:379;;28891:67;28955:2;28950:3;28891:67;;;28991:34;28971:55;;-1:-1;;;29055:2;29046:12;;29039:34;29101:2;29092:12;;28877:233;-1:-1;;28877:233;29119:459;;29279:67;29343:2;29338:3;29279:67;;;29379:34;29359:55;;29448:34;29443:2;29434:12;;29427:56;-1:-1;;;29512:2;29503:12;;29496:45;29569:2;29560:12;;29265:313;-1:-1;;29265:313;29587:397;;29747:67;29811:2;29806:3;29747:67;;;-1:-1;;;;;;;;;;;29827:55;;29916:30;29911:2;29902:12;;29895:52;29975:2;29966:12;;29733:251;-1:-1;;29733:251;29993:460;;30153:67;30217:2;30212:3;30153:67;;;30253:34;30233:55;;30322:34;30317:2;30308:12;;30301:56;-1:-1;;;30386:2;30377:12;;30370:46;30444:2;30435:12;;30139:314;-1:-1;;30139:314;30462:386;;30622:67;30686:2;30681:3;30622:67;;;30722:34;30702:55;;-1:-1;;;30786:2;30777:12;;30770:41;30839:2;30830:12;;30608:240;-1:-1;;30608:240;30857:398;;31035:84;31117:1;31112:3;31035:84;;;-1:-1;;;31132:87;;31247:1;31238:11;;31021:234;-1:-1;;31021:234;31264:386;;31424:67;31488:2;31483:3;31424:67;;;31524:34;31504:55;;-1:-1;;;31588:2;31579:12;;31572:41;31641:2;31632:12;;31410:240;-1:-1;;31410:240;31659:389;;31819:67;31883:2;31878:3;31819:67;;;31919:34;31899:55;;-1:-1;;;31983:2;31974:12;;31967:44;32039:2;32030:12;;31805:243;-1:-1;;31805:243;32057:389;;32217:67;32281:2;32276:3;32217:67;;;32317:34;32297:55;;-1:-1;;;32381:2;32372:12;;32365:44;32437:2;32428:12;;32203:243;-1:-1;;32203:243;32455:443;;32615:67;32679:2;32674:3;32615:67;;;32715:34;32695:55;;32784:34;32779:2;32770:12;;32763:56;-1:-1;;;32848:2;32839:12;;32832:29;32889:2;32880:12;;32601:297;-1:-1;;32601:297;32907:384;;33067:67;33131:2;33126:3;33067:67;;;33167:34;33147:55;;-1:-1;;;33231:2;33222:12;;33215:39;33282:2;33273:12;;33053:238;-1:-1;;33053:238;33300:382;;33460:67;33524:2;33519:3;33460:67;;;-1:-1;;;;;;;;;;;33540:55;;-1:-1;;;33624:2;33615:12;;33608:37;33673:2;33664:12;;33446:236;-1:-1;;33446:236;33691:442;;33851:67;33915:2;33910:3;33851:67;;;33951:34;33931:55;;34020:34;34015:2;34006:12;;33999:56;-1:-1;;;34084:2;34075:12;;34068:28;34124:2;34115:12;;33837:296;-1:-1;;33837:296;34142:374;;34302:67;34366:2;34361:3;34302:67;;;34402:34;34382:55;;-1:-1;;;34466:2;34457:12;;34450:29;34507:2;34498:12;;34288:228;-1:-1;;34288:228;34525:387;;34685:67;34749:2;34744:3;34685:67;;;34785:34;34765:55;;-1:-1;;;34849:2;34840:12;;34833:42;34903:2;34894:12;;34671:241;-1:-1;;34671:241;34921:442;;35081:67;35145:2;35140:3;35081:67;;;35181:34;35161:55;;35250:34;35245:2;35236:12;;35229:56;-1:-1;;;35314:2;35305:12;;35298:28;35354:2;35345:12;;35067:296;-1:-1;;35067:296;35372:317;;35532:67;35596:2;35591:3;35532:67;;;-1:-1;;;35612:40;;35680:2;35671:12;;35518:171;-1:-1;;35518:171;35698:477;;35876:85;35958:2;35953:3;35876:85;;;35994:34;35974:55;;36063:34;36058:2;36049:12;;36042:56;-1:-1;;;36127:2;36118:12;;36111:27;36166:2;36157:12;;35862:313;-1:-1;;35862:313;36184:383;;36344:67;36408:2;36403:3;36344:67;;;36444:34;36424:55;;-1:-1;;;36508:2;36499:12;;36492:38;36558:2;36549:12;;36330:237;-1:-1;;36330:237;36576:385;;36736:67;36800:2;36795:3;36736:67;;;36836:34;36816:55;;-1:-1;;;36900:2;36891:12;;36884:40;36952:2;36943:12;;36722:239;-1:-1;;36722:239;36970:381;;37130:67;37194:2;37189:3;37130:67;;;37230:34;37210:55;;-1:-1;;;37294:2;37285:12;;37278:36;37342:2;37333:12;;37116:235;-1:-1;;37116:235;37360:396;;37520:67;37584:2;37579:3;37520:67;;;-1:-1;;;;;;;;;;;37600:55;;37689:29;37684:2;37675:12;;37668:51;37747:2;37738:12;;37506:250;-1:-1;;37506:250;37765:383;;37925:67;37989:2;37984:3;37925:67;;;38025:34;38005:55;;-1:-1;;;38089:2;38080:12;;38073:38;38139:2;38130:12;;37911:237;-1:-1;;37911:237;38157:396;;38317:67;38381:2;38376:3;38317:67;;;-1:-1;;;;;;;;;;;38397:55;;38486:29;38481:2;38472:12;;38465:51;38544:2;38535:12;;38303:250;-1:-1;;38303:250;38562:384;;38722:67;38786:2;38781:3;38722:67;;;38822:34;38802:55;;-1:-1;;;38886:2;38877:12;;38870:39;38937:2;38928:12;;38708:238;-1:-1;;38708:238;38955:380;;39115:67;39179:2;39174:3;39115:67;;;39215:34;39195:55;;-1:-1;;;39279:2;39270:12;;39263:35;39326:2;39317:12;;39101:234;-1:-1;;39101:234;39344:377;;39504:67;39568:2;39563:3;39504:67;;;39604:34;39584:55;;-1:-1;;;39668:2;39659:12;;39652:32;39712:2;39703:12;;39490:231;-1:-1;;39490:231;39730:463;;39890:67;39954:2;39949:3;39890:67;;;39990:34;39970:55;;40059:34;40054:2;40045:12;;40038:56;40128:27;40123:2;40114:12;;40107:49;40184:2;40175:12;;39876:317;-1:-1;;39876:317;40202:389;;40362:67;40426:2;40421:3;40362:67;;;40462:34;40442:55;;-1:-1;;;40526:2;40517:12;;40510:44;40582:2;40573:12;;40348:243;-1:-1;;40348:243;40600:387;;40760:67;40824:2;40819:3;40760:67;;;40860:34;40840:55;;-1:-1;;;40924:2;40915:12;;40908:42;40978:2;40969:12;;40746:241;-1:-1;;40746:241;40996:462;;41156:67;41220:2;41215:3;41156:67;;;41256:34;41236:55;;41325:34;41320:2;41311:12;;41304:56;41394:26;41389:2;41380:12;;41373:48;41449:2;41440:12;;41142:316;-1:-1;;41142:316;41467:262;;41627:66;41691:1;41686:3;41627:66;;41738:373;;41898:67;41962:2;41957:3;41898:67;;;41998:34;41978:55;;-1:-1;;;42062:2;42053:12;;42046:28;42102:2;42093:12;;41884:227;-1:-1;;41884:227;42120:400;;42280:67;42344:2;42339:3;42280:67;;;42380:34;42360:55;;42449:33;42444:2;42435:12;;42428:55;42511:2;42502:12;;42266:254;-1:-1;;42266:254;42529:387;;42689:67;42753:2;42748:3;42689:67;;;42789:34;42769:55;;-1:-1;;;42853:2;42844:12;;42837:42;42907:2;42898:12;;42675:241;-1:-1;;42675:241;42925:391;;43085:67;43149:2;43144:3;43085:67;;;43185:34;43165:55;;-1:-1;;;43249:2;43240:12;;43233:46;43307:2;43298:12;;43071:245;-1:-1;;43071:245;43325:378;;43485:67;43549:2;43544:3;43485:67;;;43585:34;43565:55;;-1:-1;;;43649:2;43640:12;;43633:33;43694:2;43685:12;;43471:232;-1:-1;;43471:232;43712:439;;43872:67;43936:2;43931:3;43872:67;;;-1:-1;;;;;;;;;;;43952:55;;44041:34;44036:2;44027:12;;44020:56;-1:-1;;;44105:2;44096:12;;44089:25;44142:2;44133:12;;43858:293;-1:-1;;43858:293;44160:467;;44320:67;44384:2;44379:3;44320:67;;;44420:34;44400:55;;44489:34;44484:2;44475:12;;44468:56;44558:31;44553:2;44544:12;;44537:53;44618:2;44609:12;;44306:321;-1:-1;;44306:321;44636:396;;44796:67;44860:2;44855:3;44796:67;;;44896:34;44876:55;;44965:29;44960:2;44951:12;;44944:51;45023:2;45014:12;;44782:250;-1:-1;;44782:250;45041:388;;45201:67;45265:2;45260:3;45201:67;;;45301:34;45281:55;;-1:-1;;;45365:2;45356:12;;45349:43;45420:2;45411:12;;45187:242;-1:-1;;45187:242;45438:321;;45598:67;45662:2;45657:3;45598:67;;;-1:-1;;;45678:44;;45750:2;45741:12;;45584:175;-1:-1;;45584:175;45768:397;;45928:67;45992:2;45987:3;45928:67;;;-1:-1;;;;;;;;;;;46008:55;;46097:30;46092:2;46083:12;;46076:52;46156:2;46147:12;;45914:251;-1:-1;;45914:251;46274:626;46487:23;;46417:4;46408:14;;;46516:57;46412:3;46487:23;46516:57;;;46437:142;46655:4;46648:5;46644:16;46638:23;46667:59;46720:4;46715:3;46711:14;46697:12;46667:59;;;46589:143;46806:4;46799:5;46795:16;46789:23;46818:61;46873:4;46868:3;46864:14;46850:12;46818:61;;;46742:143;46390:510;;;;47137:97;47206:22;47222:5;47206:22;;47355:124;47437:36;47467:5;47437:36;;47486:100;47557:23;47574:5;47557:23;;47593:372;;47792:148;47936:3;47792:148;;47972:650;;48227:148;48371:3;48227:148;;;48220:155;;48386:75;48457:3;48448:6;48386:75;;;48483:2;48478:3;48474:12;48467:19;;48497:75;48568:3;48559:6;48497:75;;;-1:-1;48594:2;48585:12;;48208:414;-1:-1;;48208:414;48629:372;;48828:148;48972:3;48828:148;;49008:213;49126:2;49111:18;;49140:71;49115:9;49184:6;49140:71;;49228:340;49382:2;49367:18;;49396:79;49371:9;49448:6;49396:79;;;49486:72;49554:2;49543:9;49539:18;49530:6;49486:72;;49575:324;49721:2;49706:18;;49735:71;49710:9;49779:6;49735:71;;;49817:72;49885:2;49874:9;49870:18;49861:6;49817:72;;49906:324;50052:2;50037:18;;50066:71;50041:9;50110:6;50066:71;;50237:831;50505:3;50490:19;;50520:71;50494:9;50564:6;50520:71;;;50602:72;50670:2;50659:9;50655:18;50646:6;50602:72;;;50722:9;50716:4;50712:20;50707:2;50696:9;50692:18;50685:48;50747:78;50820:4;50811:6;50747:78;;;50739:86;;50873:9;50867:4;50863:20;50858:2;50847:9;50843:18;50836:48;50898:76;50969:4;50960:6;50898:76;;;50890:84;;50985:73;51053:3;51042:9;51038:19;51029:6;50985:73;;51075:819;51337:3;51322:19;;51352:71;51326:9;51396:6;51352:71;;;51434:72;51502:2;51491:9;51487:18;51478:6;51434:72;;;51554:9;51548:4;51544:20;51539:2;51528:9;51524:18;51517:48;51579:75;51649:4;51640:6;51579:75;;;51571:83;;51702:9;51696:4;51692:20;51687:2;51676:9;51672:18;51665:48;51727:73;51795:4;51786:6;51727:73;;51901:1183;52325:3;52340:47;;;52310:19;;52401:108;52310:19;52495:6;52401:108;;;52393:116;;52557:9;52551:4;52547:20;52542:2;52531:9;52527:18;52520:48;52582:108;52685:4;52676:6;52582:108;;;52574:116;;52738:9;52732:4;52728:20;52723:2;52712:9;52708:18;52701:48;52763:120;52878:4;52869:6;52763:120;;;52755:128;;52931:9;52925:4;52921:20;52916:2;52905:9;52901:18;52894:48;52956:118;53069:4;53060:6;52956:118;;53091:213;53209:2;53194:18;;53223:71;53198:9;53267:6;53223:71;;53311:547;53513:3;53498:19;;53528:71;53502:9;53572:6;53528:71;;;53610:72;53678:2;53667:9;53663:18;53654:6;53610:72;;;53693;53761:2;53750:9;53746:18;53737:6;53693:72;;;53776;53844:2;53833:9;53829:18;53820:6;53776:72;;;53484:374;;;;;;;;53865:427;54035:2;54020:18;;54049:71;54024:9;54093:6;54049:71;;;54131:72;54199:2;54188:9;54184:18;54175:6;54131:72;;;54214:68;54278:2;54267:9;54263:18;54254:6;54214:68;;54299:539;54497:3;54482:19;;54512:71;54486:9;54556:6;54512:71;;;54594:68;54658:2;54647:9;54643:18;54634:6;54594:68;;;54673:72;54741:2;54730:9;54726:18;54717:6;54673:72;;;54756;54824:2;54813:9;54809:18;54800:6;54756:72;;54845:265;54989:2;54974:18;;55003:97;54978:9;55073:6;55003:97;;55389:245;55523:2;55508:18;;55537:87;55512:9;55597:6;55537:87;;55641:293;55775:2;55789:47;;;55760:18;;55850:74;55760:18;55910:6;55850:74;;55941:407;56132:2;56146:47;;;56117:18;;56207:131;56117:18;56207:131;;56355:407;56546:2;56560:47;;;56531:18;;56621:131;56531:18;56621:131;;56769:407;56960:2;56974:47;;;56945:18;;57035:131;56945:18;57035:131;;57183:407;57374:2;57388:47;;;57359:18;;57449:131;57359:18;57449:131;;57597:407;57788:2;57802:47;;;57773:18;;57863:131;57773:18;57863:131;;58011:407;58202:2;58216:47;;;58187:18;;58277:131;58187:18;58277:131;;58425:407;58616:2;58630:47;;;58601:18;;58691:131;58601:18;58691:131;;58839:407;59030:2;59044:47;;;59015:18;;59105:131;59015:18;59105:131;;59253:407;59444:2;59458:47;;;59429:18;;59519:131;59429:18;59519:131;;59667:407;59858:2;59872:47;;;59843:18;;59933:131;59843:18;59933:131;;60081:407;60272:2;60286:47;;;60257:18;;60347:131;60257:18;60347:131;;60495:407;60686:2;60700:47;;;60671:18;;60761:131;60671:18;60761:131;;60909:407;61100:2;61114:47;;;61085:18;;61175:131;61085:18;61175:131;;61323:407;61514:2;61528:47;;;61499:18;;61589:131;61499:18;61589:131;;61737:407;61928:2;61942:47;;;61913:18;;62003:131;61913:18;62003:131;;62151:407;62342:2;62356:47;;;62327:18;;62417:131;62327:18;62417:131;;62565:407;62756:2;62770:47;;;62741:18;;62831:131;62741:18;62831:131;;62979:407;63170:2;63184:47;;;63155:18;;63245:131;63155:18;63245:131;;63393:407;63584:2;63598:47;;;63569:18;;63659:131;63569:18;63659:131;;63807:407;63998:2;64012:47;;;63983:18;;64073:131;63983:18;64073:131;;64221:407;64412:2;64426:47;;;64397:18;;64487:131;64397:18;64487:131;;64635:407;64826:2;64840:47;;;64811:18;;64901:131;64811:18;64901:131;;65049:407;65240:2;65254:47;;;65225:18;;65315:131;65225:18;65315:131;;65463:407;65654:2;65668:47;;;65639:18;;65729:131;65639:18;65729:131;;65877:407;66068:2;66082:47;;;66053:18;;66143:131;66053:18;66143:131;;66291:407;66482:2;66496:47;;;66467:18;;66557:131;66467:18;66557:131;;66705:407;66896:2;66910:47;;;66881:18;;66971:131;66881:18;66971:131;;67119:407;67310:2;67324:47;;;67295:18;;67385:131;67295:18;67385:131;;67533:407;67724:2;67738:47;;;67709:18;;67799:131;67709:18;67799:131;;67947:407;68138:2;68152:47;;;68123:18;;68213:131;68123:18;68213:131;;68361:407;68552:2;68566:47;;;68537:18;;68627:131;68537:18;68627:131;;68775:407;68966:2;68980:47;;;68951:18;;69041:131;68951:18;69041:131;;69189:407;69380:2;69394:47;;;69365:18;;69455:131;69365:18;69455:131;;69603:407;69794:2;69808:47;;;69779:18;;69869:131;69779:18;69869:131;;70017:407;70208:2;70222:47;;;70193:18;;70283:131;70193:18;70283:131;;70431:407;70622:2;70636:47;;;70607:18;;70697:131;70607:18;70697:131;;70845:407;71036:2;71050:47;;;71021:18;;71111:131;71021:18;71111:131;;71259:407;71450:2;71464:47;;;71435:18;;71525:131;71435:18;71525:131;;71673:407;71864:2;71878:47;;;71849:18;;71939:131;71849:18;71939:131;;72087:407;72278:2;72292:47;;;72263:18;;72353:131;72263:18;72353:131;;72501:407;72692:2;72706:47;;;72677:18;;72767:131;72677:18;72767:131;;72915:407;73106:2;73120:47;;;73091:18;;73181:131;73091:18;73181:131;;73329:407;73520:2;73534:47;;;73505:18;;73595:131;73505:18;73595:131;;73743:407;73934:2;73948:47;;;73919:18;;74009:131;73919:18;74009:131;;74157:313;74325:2;74310:18;;74339:121;74314:9;74433:6;74339:121;;74697:1951;75313:3;75298:19;;75328:71;75302:9;75372:6;75328:71;;;75410:80;75486:2;75475:9;75471:18;75462:6;75410:80;;;75538:9;75532:4;75528:20;75523:2;75512:9;75508:18;75501:48;75563:108;75666:4;75657:6;75563:108;;;75555:116;;75719:9;75713:4;75709:20;75704:2;75693:9;75689:18;75682:48;75744:108;75847:4;75838:6;75744:108;;;75736:116;;75901:9;75895:4;75891:20;75885:3;75874:9;75870:19;75863:49;75926:120;76041:4;76032:6;75926:120;;;75918:128;;76095:9;76089:4;76085:20;76079:3;76068:9;76064:19;76057:49;76120:118;76233:4;76224:6;76120:118;;;76112:126;;76249:73;76317:3;76306:9;76302:19;76293:6;76249:73;;;76333;76401:3;76390:9;76386:19;76377:6;76333:73;;;76455:9;76449:4;76445:20;76439:3;76428:9;76424:19;76417:49;76480:78;76553:4;76544:6;76480:78;;;76472:86;;76569:69;76633:3;76622:9;76618:19;76609:6;76569:69;;;75284:1364;;;;;;;;;;;;;;76655:1301;77038:3;77023:19;;77053:71;77027:9;77097:6;77053:71;;;77135:72;77203:2;77192:9;77188:18;77179:6;77135:72;;;77218;77286:2;77275:9;77271:18;77262:6;77218:72;;;77301;77369:2;77358:9;77354:18;77345:6;77301:72;;;77384:73;77452:3;77441:9;77437:19;77428:6;77384:73;;;77468;77536:3;77525:9;77521:19;77512:6;77468:73;;;77552;77620:3;77609:9;77605:19;77596:6;77552:73;;;77636;77704:3;77693:9;77689:19;77680:6;77636:73;;;77720:67;77782:3;77771:9;77767:19;77758:6;77720:67;;;77798;77860:3;77849:9;77845:19;77836:6;77798:67;;;77876:70;77941:3;77930:9;77926:19;77916:7;77876:70;;;77009:947;;;;;;;;;;;;;;;77963:324;78109:2;78094:18;;78123:71;78098:9;78167:6;78123:71;;78294:435;78468:2;78453:18;;78482:71;78457:9;78526:6;78482:71;;;78564:72;78632:2;78621:9;78617:18;78608:6;78564:72;;;78647;78715:2;78704:9;78700:18;78691:6;78647:72;;78736:547;78938:3;78923:19;;78953:71;78927:9;78997:6;78953:71;;;79035:72;79103:2;79092:9;79088:18;79079:6;79035:72;;79290:995;79604:3;79589:19;;79619:71;79593:9;79663:6;79619:71;;;79701:72;79769:2;79758:9;79754:18;79745:6;79701:72;;;79784;79852:2;79841:9;79837:18;79828:6;79784:72;;;79867;79935:2;79924:9;79920:18;79911:6;79867:72;;;79950:73;80018:3;80007:9;80003:19;79994:6;79950:73;;;80034;80102:3;80091:9;80087:19;80078:6;80034:73;;;80118;80186:3;80175:9;80171:19;80162:6;80118:73;;;80202;80270:3;80259:9;80255:19;80246:6;80202:73;;;79575:710;;;;;;;;;;;;80292:645;80519:3;80504:19;;80534:71;80508:9;80578:6;80534:71;;;80616:68;80680:2;80669:9;80665:18;80656:6;80616:68;;;80695:71;80762:2;80751:9;80747:18;80738:6;80695:71;;;80814:9;80808:4;80804:20;80799:2;80788:9;80784:18;80777:48;80839:88;80922:4;80913:6;80905;80839:88;;;80831:96;80490:447;-1:-1;;;;;;;80490:447;80944:731;81214:3;81199:19;;81229:71;81203:9;81273:6;81229:71;;;81311:68;81375:2;81364:9;81360:18;81351:6;81311:68;;;81390:71;81457:2;81446:9;81442:18;81433:6;81390:71;;;81509:9;81503:4;81499:20;81494:2;81483:9;81479:18;81472:48;81534:131;81660:4;81534:131;;81682:256;81744:2;81738:9;81770:17;;;-1:-1;;;;;81830:34;;81866:22;;;81827:62;81824:2;;;81902:1;81899;81892:12;81824:2;81918;81911:22;81722:216;;-1:-1;81722:216;81945:304;;-1:-1;;;;;82096:6;82093:30;82090:2;;;82136:1;82133;82126:12;82090:2;-1:-1;82171:4;82159:17;;;82224:15;;82027:222;83876:317;;-1:-1;;;;;84007:6;84004:30;84001:2;;;84047:1;84044;84037:12;84001:2;-1:-1;84178:4;84114;84091:17;;;;-1:-1;;84087:33;84168:15;;83938:255;85182:151;85306:4;85297:14;;85254:79;85825:157;;85919:14;;;85961:4;85948:18;;;85878:104;86154:137;86257:12;;86228:63;87719:178;87837:19;;;87886:4;87877:14;;87830:67;89297:91;;89359:24;89377:5;89359:24;;89395:85;89461:13;89454:21;;89437:43;89566:117;;89654:24;89672:5;89654:24;;89690:142;89770:5;89776:51;89770:5;89776:51;;89839:121;-1:-1;;;;;89901:54;;89884:76;90046:81;90117:4;90106:16;;90089:38;90134:104;-1:-1;;;;;90195:38;;90178:60;90245:129;;90332:37;90363:5;90332:37;;91023:142;;91118:42;91154:5;91118:42;;91415:106;;91493:23;91510:5;91493:23;;91529:145;91610:6;91605:3;91600;91587:30;-1:-1;91666:1;91648:16;;91641:27;91580:94;91683:268;91748:1;91755:101;91769:6;91766:1;91763:13;91755:101;;;91836:11;;;91830:18;91817:11;;;91810:39;91791:2;91784:10;91755:101;;;91871:6;91868:1;91865:13;91862:2;;;-1:-1;;91936:1;91918:16;;91911:27;91732:219;92040:97;92128:2;92108:14;-1:-1;;92104:28;;92088:49;92145:109;92232:1;92225:5;92222:12;92212:2;;92238:9;92261:117;92330:24;92348:5;92330:24;;;92323:5;92320:35;92310:2;;92369:1;92366;92359:12;92385:111;92451:21;92466:5;92451:21;;92503:117;92572:24;92590:5;92572:24;;92627:169;92722:50;92766:5;92722:50;;92803:111;92889:1;92882:5;92879:12;92869:2;;92905:1;92902;92895:12;93045:113;93112:22;93128:5;93112:22;;93165:115;93233:23;93250:5;93233:23;"},"gasEstimates":{"creation":{"codeDepositCost":"4071200","executionCost":"4665","totalCost":"4075865"},"external":{"BALLOT_TYPEHASH()":"infinite","DOMAIN_TYPEHASH()":"infinite","MAX_PROPOSAL_THRESHOLD()":"345","MIN_PROPOSAL_THRESHOLD()":"411","_acceptAdmin()":"infinite","_initiate(address)":"infinite","_setGuardian(address)":"infinite","_setPendingAdmin(address)":"infinite","_setProposalMaxOperations(uint256)":"infinite","admin()":"infinite","cancel(uint256)":"infinite","castVote(uint256,uint8)":"infinite","castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)":"infinite","castVoteWithReason(uint256,uint8,string)":"infinite","execute(uint256)":"infinite","getActions(uint256)":"infinite","getReceipt(uint256,address)":"infinite","guardian()":"infinite","implementation()":"infinite","initialProposalId()":"1231","initialize(address,(uint256,uint256,uint256,uint256),(uint256,uint256,uint256)[],address[],address)":"infinite","latestProposalIds(address)":"infinite","name()":"infinite","pendingAdmin()":"infinite","proposalConfigs(uint256)":"infinite","proposalCount()":"1144","proposalMaxOperations()":"1144","proposalThreshold()":"1166","proposalTimelocks(uint256)":"infinite","proposals(uint256)":"infinite","propose(address[],uint256[],string[],bytes[],string,uint8)":"infinite","queue(uint256)":"infinite","quorumVotes()":"433","setProposalConfigs((uint256,uint256,uint256)[])":"infinite","setValidationParams((uint256,uint256,uint256,uint256))":"infinite","state(uint256)":"infinite","timelock()":"infinite","validationParams()":"infinite","votingDelay()":"1144","votingPeriod()":"1168","xvsVault()":"infinite"},"internal":{"add256(uint256,uint256)":"infinite","castVoteInternal(address,uint256,uint8)":"infinite","getChainIdInternal()":"14","getGovernanceRouteCount()":"16","queueOrRevertInternal(address,uint256,string memory,bytes memory,uint256,uint8)":"infinite","sub256(uint256,uint256)":"infinite"}},"methodIdentifiers":{"BALLOT_TYPEHASH()":"deaaa7cc","DOMAIN_TYPEHASH()":"20606b70","MAX_PROPOSAL_THRESHOLD()":"25fd935a","MIN_PROPOSAL_THRESHOLD()":"791f5d23","_acceptAdmin()":"e9c714f2","_initiate(address)":"f9d28b80","_setGuardian(address)":"e38e8c0f","_setPendingAdmin(address)":"b71d1a0c","_setProposalMaxOperations(uint256)":"1ebcfefd","admin()":"f851a440","cancel(uint256)":"40e58ee5","castVote(uint256,uint8)":"56781388","castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)":"3bccf4fd","castVoteWithReason(uint256,uint8,string)":"7b3c71d3","execute(uint256)":"fe0d94c1","getActions(uint256)":"328dd982","getReceipt(uint256,address)":"e23a9a52","guardian()":"452a9320","implementation()":"5c60da1b","initialProposalId()":"fc4eee42","initialize(address,(uint256,uint256,uint256,uint256),(uint256,uint256,uint256)[],address[],address)":"46416f92","latestProposalIds(address)":"17977c61","name()":"06fdde03","pendingAdmin()":"26782247","proposalConfigs(uint256)":"35a87de2","proposalCount()":"da35c664","proposalMaxOperations()":"7bdbe4d0","proposalThreshold()":"b58131b0","proposalTimelocks(uint256)":"ee9799ee","proposals(uint256)":"013cf08b","propose(address[],uint256[],string[],bytes[],string,uint8)":"164a1ab1","queue(uint256)":"ddf0b009","quorumVotes()":"24bc1a64","setProposalConfigs((uint256,uint256,uint256)[])":"1e75adf2","setValidationParams((uint256,uint256,uint256,uint256))":"bb08c321","state(uint256)":"3e4f49e6","timelock()":"d33219b4","validationParams()":"34cf3909","votingDelay()":"3932abb1","votingPeriod()":"02a251a3","xvsVault()":"1b9ce575"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"NewAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldGuardian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newGuardian\",\"type\":\"address\"}],\"name\":\"NewGuardian\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"NewImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldPendingAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"NewPendingAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ProposalCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"signatures\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"name\":\"ProposalCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ProposalExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxOperations\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMaxOperations\",\"type\":\"uint256\"}],\"name\":\"ProposalMaxOperationsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"ProposalQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldProposalThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newProposalThreshold\",\"type\":\"uint256\"}],\"name\":\"ProposalThresholdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalThreshold\",\"type\":\"uint256\"}],\"name\":\"SetProposalConfigs\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMinVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMinVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldmaxVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldminVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newminVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldmaxVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxVotingDelay\",\"type\":\"uint256\"}],\"name\":\"SetValidationParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votes\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVotingDelay\",\"type\":\"uint256\"}],\"name\":\"VotingDelaySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVotingPeriod\",\"type\":\"uint256\"}],\"name\":\"VotingPeriodSet\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"BALLOT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOMAIN_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_PROPOSAL_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MIN_PROPOSAL_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"_acceptAdmin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"governorAlpha\",\"type\":\"address\"}],\"name\":\"_initiate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGuardian\",\"type\":\"address\"}],\"name\":\"_setGuardian\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"_setPendingAdmin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalMaxOperations_\",\"type\":\"uint256\"}],\"name\":\"_setProposalMaxOperations\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"cancel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"}],\"name\":\"castVote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"castVoteBySig\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"castVoteWithReason\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"getActions\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"signatures\",\"type\":\"string[]\"},{\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"getReceipt\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"hasVoted\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"internalType\":\"uint96\",\"name\":\"votes\",\"type\":\"uint96\"}],\"internalType\":\"struct GovernorBravoDelegateStorageV1.Receipt\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialProposalId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"xvsVault_\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minVotingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxVotingDelay\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorBravoDelegateStorageV3.ValidationParams\",\"name\":\"validationParams_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalThreshold\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorBravoDelegateStorageV2.ProposalConfig[]\",\"name\":\"proposalConfigs_\",\"type\":\"tuple[]\"},{\"internalType\":\"contract TimelockInterface[]\",\"name\":\"timelocks\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"guardian_\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"latestProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalConfigs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalThreshold\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalMaxOperations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalTimelocks\",\"outputs\":[{\"internalType\":\"contract TimelockInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"abstainVotes\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canceled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"executed\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"signatures\",\"type\":\"string[]\"},{\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"enum GovernorBravoDelegateStorageV2.ProposalType\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"name\":\"propose\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"queue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"quorumVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalThreshold\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorBravoDelegateStorageV2.ProposalConfig[]\",\"name\":\"proposalConfigs_\",\"type\":\"tuple[]\"}],\"name\":\"setProposalConfigs\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minVotingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxVotingDelay\",\"type\":\"uint256\"}],\"internalType\":\"struct GovernorBravoDelegateStorageV3.ValidationParams\",\"name\":\"newValidationParams\",\"type\":\"tuple\"}],\"name\":\"setValidationParams\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"}],\"name\":\"state\",\"outputs\":[{\"internalType\":\"enum GovernorBravoDelegateStorageV1.ProposalState\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"timelock\",\"outputs\":[{\"internalType\":\"contract TimelockInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"validationParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minVotingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxVotingDelay\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"xvsVault\",\"outputs\":[{\"internalType\":\"contract XvsVaultInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"_acceptAdmin()\":{\"details\":\"Admin function for pending admin to accept role and update admin\"},\"_initiate(address)\":{\"details\":\"Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\",\"params\":{\"governorAlpha\":\"The address for the Governor to continue the proposal id count from\"}},\"_setGuardian(address)\":{\"params\":{\"newGuardian\":\"the address of the new guardian\"}},\"_setPendingAdmin(address)\":{\"details\":\"Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\",\"params\":{\"newPendingAdmin\":\"New pending admin.\"}},\"_setProposalMaxOperations(uint256)\":{\"details\":\"Admin only.\",\"params\":{\"proposalMaxOperations_\":\"Max proposal operations\"}},\"cancel(uint256)\":{\"params\":{\"proposalId\":\"The id of the proposal to cancel\"}},\"castVote(uint256,uint8)\":{\"params\":{\"proposalId\":\"The id of the proposal to vote on\",\"support\":\"The support value for the vote. 0=against, 1=for, 2=abstain\"}},\"castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)\":{\"details\":\"External function that accepts EIP-712 signatures for voting on proposals.\",\"params\":{\"proposalId\":\"The id of the proposal to vote on\",\"r\":\"part of the ECDSA sig output\",\"s\":\"part of the ECDSA sig output\",\"support\":\"The support value for the vote. 0=against, 1=for, 2=abstain\",\"v\":\"recovery id of ECDSA signature\"}},\"castVoteWithReason(uint256,uint8,string)\":{\"params\":{\"proposalId\":\"The id of the proposal to vote on\",\"reason\":\"The reason given for the vote by the voter\",\"support\":\"The support value for the vote. 0=against, 1=for, 2=abstain\"}},\"execute(uint256)\":{\"params\":{\"proposalId\":\"The id of the proposal to execute\"}},\"getActions(uint256)\":{\"params\":{\"proposalId\":\"the id of the proposal\"},\"return\":\"targets, values, signatures, and calldatas of the proposal actions\"},\"getReceipt(uint256,address)\":{\"params\":{\"proposalId\":\"the id of proposal\",\"voter\":\"The address of the voter\"},\"return\":\"The voting receipt\"},\"initialize(address,(uint256,uint256,uint256,uint256),(uint256,uint256,uint256)[],address[],address)\":{\"params\":{\"proposalConfigs_\":\"Governance configs for each governance route\",\"timelocks\":\"Timelock addresses for each governance route\",\"xvsVault_\":\"The address of the XvsVault\"}},\"propose(address[],uint256[],string[],bytes[],string,uint8)\":{\"details\":\"NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists of duplicate actions, it's recommended to split those actions into separate proposals\",\"params\":{\"calldatas\":\"Calldatas for proposal calls\",\"description\":\"String description of the proposal\",\"proposalType\":\"the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\",\"signatures\":\"Function signatures for proposal calls\",\"targets\":\"Target addresses for proposal calls\",\"values\":\"BNB values for proposal calls\"},\"return\":\"Proposal id of new proposal\"},\"queue(uint256)\":{\"params\":{\"proposalId\":\"The id of the proposal to queue\"}},\"state(uint256)\":{\"params\":{\"proposalId\":\"The id of the proposal\"},\"return\":\"Proposal state\"}},\"title\":\"GovernorBravoDelegate\"},\"userdoc\":{\"methods\":{\"_acceptAdmin()\":{\"notice\":\"Accepts transfer of admin rights. msg.sender must be pendingAdmin\"},\"_initiate(address)\":{\"notice\":\"Initiate the GovernorBravo contract\"},\"_setGuardian(address)\":{\"notice\":\"Sets the new governance guardian\"},\"_setPendingAdmin(address)\":{\"notice\":\"Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\"},\"_setProposalMaxOperations(uint256)\":{\"notice\":\"Set max proposal operations\"},\"cancel(uint256)\":{\"notice\":\"Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\"},\"castVote(uint256,uint8)\":{\"notice\":\"Cast a vote for a proposal\"},\"castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)\":{\"notice\":\"Cast a vote for a proposal by signature\"},\"castVoteWithReason(uint256,uint8,string)\":{\"notice\":\"Cast a vote for a proposal with a reason\"},\"execute(uint256)\":{\"notice\":\"Executes a queued proposal if eta has passed\"},\"getActions(uint256)\":{\"notice\":\"Gets actions of a proposal\"},\"getReceipt(uint256,address)\":{\"notice\":\"Gets the receipt for a voter on a given proposal\"},\"initialize(address,(uint256,uint256,uint256,uint256),(uint256,uint256,uint256)[],address[],address)\":{\"notice\":\"Used to initialize the contract during delegator contructor\"},\"propose(address[],uint256[],string[],bytes[],string,uint8)\":{\"notice\":\"Function used to propose a new proposal. Sender must have delegates above the proposal threshold. targets, values, signatures, and calldatas must be of equal length\"},\"queue(uint256)\":{\"notice\":\"Queues a proposal of state succeeded\"},\"setProposalConfigs((uint256,uint256,uint256)[])\":{\"notice\":\"Sets the configuration for different proposal types** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types** @param proposalConfigs_ Array of proposal configuration structs to update\"},\"setValidationParams((uint256,uint256,uint256,uint256))\":{\"notice\":\"Sets the validation parameters for voting delay and voting period** @param newValidationParams Struct containing new minimum and maximum voting period and delay\"},\"state(uint256)\":{\"notice\":\"Gets the state of a proposal\"}},\"notice\":\"Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control. Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets, which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools. * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals. * ## Details * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token. * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals. - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users. * # Governor Bravo * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to: - Submit new proposal - Vote on a proposal - Cancel a proposal - Queue a proposal for execution with a timelock executor contract. `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are: - A user's voting power must be greater than the `proposalThreshold` to submit a proposal - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also cancel a proposal at anytime before it is queued for execution. * ## Venus Improvement Proposal * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters: * - `NORMAL` - `FASTTRACK` - `CRITICAL` * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are: * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins - `votingPeriod`: The number of blocks where voting will be open - `proposalThreshold`: The number of votes required in order submit a proposal * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the flow of each type of VIP. * ## Voting * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`, weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`. * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function `castVoteBySig`. * ## Delegating * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user to let another user who they trust propose or vote in their place. * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert vote delegation by calling the same function with a value of `0`.\"}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":\"GovernorBravoDelegate\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1695,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"admin","offset":0,"slot":"0","type":"t_address"},{"astId":1697,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"pendingAdmin","offset":0,"slot":"1","type":"t_address"},{"astId":1699,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"implementation","offset":0,"slot":"2","type":"t_address"},{"astId":1704,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"votingDelay","offset":0,"slot":"3","type":"t_uint256"},{"astId":1706,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"votingPeriod","offset":0,"slot":"4","type":"t_uint256"},{"astId":1708,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposalThreshold","offset":0,"slot":"5","type":"t_uint256"},{"astId":1710,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"initialProposalId","offset":0,"slot":"6","type":"t_uint256"},{"astId":1712,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposalCount","offset":0,"slot":"7","type":"t_uint256"},{"astId":1714,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"timelock","offset":0,"slot":"8","type":"t_contract(TimelockInterface)1884"},{"astId":1716,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"xvsVault","offset":0,"slot":"9","type":"t_contract(XvsVaultInterface)1894"},{"astId":1720,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposals","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_struct(Proposal)1763_storage)"},{"astId":1724,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"latestProposalIds","offset":0,"slot":"11","type":"t_mapping(t_address,t_uint256)"},{"astId":1781,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposalMaxOperations","offset":0,"slot":"12","type":"t_uint256"},{"astId":1783,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"guardian","offset":0,"slot":"13","type":"t_address"},{"astId":1801,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposalConfigs","offset":0,"slot":"14","type":"t_mapping(t_uint256,t_struct(ProposalConfig)1797_storage)"},{"astId":1805,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposalTimelocks","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_contract(TimelockInterface)1884)"},{"astId":1819,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"validationParams","offset":0,"slot":"16","type":"t_struct(ValidationParams)1817_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_bytes_storage)dyn_storage":{"base":"t_bytes_storage","encoding":"dynamic_array","label":"bytes[]","numberOfBytes":"32"},"t_array(t_string_storage)dyn_storage":{"base":"t_string_storage","encoding":"dynamic_array","label":"string[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes_storage":{"encoding":"bytes","label":"bytes","numberOfBytes":"32"},"t_contract(TimelockInterface)1884":{"encoding":"inplace","label":"contract TimelockInterface","numberOfBytes":"20"},"t_contract(XvsVaultInterface)1894":{"encoding":"inplace","label":"contract XvsVaultInterface","numberOfBytes":"20"},"t_mapping(t_address,t_struct(Receipt)1770_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct GovernorBravoDelegateStorageV1.Receipt)","numberOfBytes":"32","value":"t_struct(Receipt)1770_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_contract(TimelockInterface)1884)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => contract TimelockInterface)","numberOfBytes":"32","value":"t_contract(TimelockInterface)1884"},"t_mapping(t_uint256,t_struct(Proposal)1763_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal)","numberOfBytes":"32","value":"t_struct(Proposal)1763_storage"},"t_mapping(t_uint256,t_struct(ProposalConfig)1797_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig)","numberOfBytes":"32","value":"t_struct(ProposalConfig)1797_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(Proposal)1763_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV1.Proposal","members":[{"astId":1726,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"id","offset":0,"slot":"0","type":"t_uint256"},{"astId":1728,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposer","offset":0,"slot":"1","type":"t_address"},{"astId":1730,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"eta","offset":0,"slot":"2","type":"t_uint256"},{"astId":1733,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"targets","offset":0,"slot":"3","type":"t_array(t_address)dyn_storage"},{"astId":1736,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"values","offset":0,"slot":"4","type":"t_array(t_uint256)dyn_storage"},{"astId":1739,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"signatures","offset":0,"slot":"5","type":"t_array(t_string_storage)dyn_storage"},{"astId":1742,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"calldatas","offset":0,"slot":"6","type":"t_array(t_bytes_storage)dyn_storage"},{"astId":1744,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"startBlock","offset":0,"slot":"7","type":"t_uint256"},{"astId":1746,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"endBlock","offset":0,"slot":"8","type":"t_uint256"},{"astId":1748,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"forVotes","offset":0,"slot":"9","type":"t_uint256"},{"astId":1750,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"againstVotes","offset":0,"slot":"10","type":"t_uint256"},{"astId":1752,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"abstainVotes","offset":0,"slot":"11","type":"t_uint256"},{"astId":1754,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"canceled","offset":0,"slot":"12","type":"t_bool"},{"astId":1756,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"executed","offset":1,"slot":"12","type":"t_bool"},{"astId":1760,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"receipts","offset":0,"slot":"13","type":"t_mapping(t_address,t_struct(Receipt)1770_storage)"},{"astId":1762,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposalType","offset":0,"slot":"14","type":"t_uint8"}],"numberOfBytes":"480"},"t_struct(ProposalConfig)1797_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV2.ProposalConfig","members":[{"astId":1792,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"votingDelay","offset":0,"slot":"0","type":"t_uint256"},{"astId":1794,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"votingPeriod","offset":0,"slot":"1","type":"t_uint256"},{"astId":1796,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"proposalThreshold","offset":0,"slot":"2","type":"t_uint256"}],"numberOfBytes":"96"},"t_struct(Receipt)1770_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV1.Receipt","members":[{"astId":1765,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"hasVoted","offset":0,"slot":"0","type":"t_bool"},{"astId":1767,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"support","offset":1,"slot":"0","type":"t_uint8"},{"astId":1769,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"votes","offset":2,"slot":"0","type":"t_uint96"}],"numberOfBytes":"32"},"t_struct(ValidationParams)1817_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV3.ValidationParams","members":[{"astId":1810,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"minVotingPeriod","offset":0,"slot":"0","type":"t_uint256"},{"astId":1812,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"maxVotingPeriod","offset":0,"slot":"1","type":"t_uint256"},{"astId":1814,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"minVotingDelay","offset":0,"slot":"2","type":"t_uint256"},{"astId":1816,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol:GovernorBravoDelegate","label":"maxVotingDelay","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_uint96":{"encoding":"inplace","label":"uint96","numberOfBytes":"12"}}},"userdoc":{"methods":{"_acceptAdmin()":{"notice":"Accepts transfer of admin rights. msg.sender must be pendingAdmin"},"_initiate(address)":{"notice":"Initiate the GovernorBravo contract"},"_setGuardian(address)":{"notice":"Sets the new governance guardian"},"_setPendingAdmin(address)":{"notice":"Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer."},"_setProposalMaxOperations(uint256)":{"notice":"Set max proposal operations"},"cancel(uint256)":{"notice":"Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold"},"castVote(uint256,uint8)":{"notice":"Cast a vote for a proposal"},"castVoteBySig(uint256,uint8,uint8,bytes32,bytes32)":{"notice":"Cast a vote for a proposal by signature"},"castVoteWithReason(uint256,uint8,string)":{"notice":"Cast a vote for a proposal with a reason"},"execute(uint256)":{"notice":"Executes a queued proposal if eta has passed"},"getActions(uint256)":{"notice":"Gets actions of a proposal"},"getReceipt(uint256,address)":{"notice":"Gets the receipt for a voter on a given proposal"},"initialize(address,(uint256,uint256,uint256,uint256),(uint256,uint256,uint256)[],address[],address)":{"notice":"Used to initialize the contract during delegator contructor"},"propose(address[],uint256[],string[],bytes[],string,uint8)":{"notice":"Function used to propose a new proposal. Sender must have delegates above the proposal threshold. targets, values, signatures, and calldatas must be of equal length"},"queue(uint256)":{"notice":"Queues a proposal of state succeeded"},"setProposalConfigs((uint256,uint256,uint256)[])":{"notice":"Sets the configuration for different proposal types** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types** @param proposalConfigs_ Array of proposal configuration structs to update"},"setValidationParams((uint256,uint256,uint256,uint256))":{"notice":"Sets the validation parameters for voting delay and voting period** @param newValidationParams Struct containing new minimum and maximum voting period and delay"},"state(uint256)":{"notice":"Gets the state of a proposal"}},"notice":"Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control. Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets, which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools. * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals. * ## Details * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token. * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals. - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users. * # Governor Bravo * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to: - Submit new proposal - Vote on a proposal - Cancel a proposal - Queue a proposal for execution with a timelock executor contract. `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are: - A user's voting power must be greater than the `proposalThreshold` to submit a proposal - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also cancel a proposal at anytime before it is queued for execution. * ## Venus Improvement Proposal * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters: * - `NORMAL` - `FASTTRACK` - `CRITICAL` * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are: * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins - `votingPeriod`: The number of blocks where voting will be open - `proposalThreshold`: The number of votes required in order submit a proposal * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the flow of each type of VIP. * ## Voting * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`, weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`. * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function `castVoteBySig`. * ## Delegating * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user to let another user who they trust propose or vote in their place. * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert vote delegation by calling the same function with a value of `0`."}}},"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol":{"GovernorAlphaInterface":{"abi":[{"constant":false,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"proposalCount()":"da35c664"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"proposalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{\"proposalCount()\":{\"notice\":\"The total number of proposals\"}}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":\"GovernorAlphaInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{"proposalCount()":{"notice":"The total number of proposals"}}}},"GovernorBravoDelegateStorageV1":{"abi":[{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialProposalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint8","name":"proposalType","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"xvsVault","outputs":[{"internalType":"contract XvsVaultInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"details":"For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new contract which implements GovernorBravoDelegateStorageV1 and following the naming convention GovernorBravoDelegateStorageVX.","methods":{},"title":"GovernorBravoDelegateStorageV1"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b506104ac806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635c60da1b1161008c578063d33219b411610066578063d33219b41461019c578063da35c664146101a4578063f851a440146101ac578063fc4eee42146101b4576100ea565b80635c60da1b146101845780637bdbe4d01461018c578063b58131b014610194576100ea565b80631b9ce575116100c85780631b9ce5751461014a578063267822471461015f5780633932abb114610174578063452a93201461017c576100ea565b8063013cf08b146100ef57806302a251a31461012257806317977c6114610137575b600080fd5b6101026100fd3660046102fa565b6101bc565b6040516101199b9a99989796959493929190610375565b60405180910390f35b61012a610228565b6040516101199190610367565b61012a6101453660046102d4565b61022e565b610152610240565b6040516101199190610359565b61016761024f565b604051610119919061034b565b61012a61025e565b610167610264565b610167610273565b61012a610282565b61012a610288565b61015261028e565b61012a61029d565b6101676102a3565b61012a6102b2565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c880154600e9098015496986001600160a01b039096169794969395929492939192909160ff808316926101009004811691168b565b60045481565b600b6020526000908152604090205481565b6009546001600160a01b031681565b6001546001600160a01b031681565b60035481565b600d546001600160a01b031681565b6002546001600160a01b031681565b600c5481565b60055481565b6008546001600160a01b031681565b60075481565b6000546001600160a01b031681565b60065481565b80356102c381610449565b92915050565b80356102c381610460565b6000602082840312156102e657600080fd5b60006102f284846102b8565b949350505050565b60006020828403121561030c57600080fd5b60006102f284846102c9565b61032181610419565b82525050565b61032181610424565b6103218161043e565b61032181610435565b61032181610438565b602081016102c38284610318565b602081016102c38284610330565b602081016102c38284610339565b6101608101610384828e610339565b610391602083018d610318565b61039e604083018c610339565b6103ab606083018b610339565b6103b8608083018a610339565b6103c560a0830189610339565b6103d260c0830188610339565b6103df60e0830187610339565b6103ed610100830186610327565b6103fb610120830185610327565b610409610140830184610342565b9c9b505050505050505050505050565b60006102c382610429565b151590565b6001600160a01b031690565b90565b60ff1690565b60006102c382610419565b61045281610419565b811461045d57600080fd5b50565b6104528161043556fea365627a7a723158208cedf5eeed8c3347aba238625e4277660451fa2adf4245a718fb21827d6041466c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4AC DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD33219B4 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD33219B4 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0xDA35C664 EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0xFC4EEE42 EQ PUSH2 0x1B4 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x7BDBE4D0 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0xB58131B0 EQ PUSH2 0x194 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x1B9CE575 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0x26782247 EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0x3932ABB1 EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0x452A9320 EQ PUSH2 0x17C JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x13CF08B EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x2A251A3 EQ PUSH2 0x122 JUMPI DUP1 PUSH4 0x17977C61 EQ PUSH2 0x137 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x102 PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0x2FA JUMP JUMPDEST PUSH2 0x1BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x119 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x375 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x12A PUSH2 0x228 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x119 SWAP2 SWAP1 PUSH2 0x367 JUMP JUMPDEST PUSH2 0x12A PUSH2 0x145 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D4 JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST PUSH2 0x152 PUSH2 0x240 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x119 SWAP2 SWAP1 PUSH2 0x359 JUMP JUMPDEST PUSH2 0x167 PUSH2 0x24F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x119 SWAP2 SWAP1 PUSH2 0x34B JUMP JUMPDEST PUSH2 0x12A PUSH2 0x25E JUMP JUMPDEST PUSH2 0x167 PUSH2 0x264 JUMP JUMPDEST PUSH2 0x167 PUSH2 0x273 JUMP JUMPDEST PUSH2 0x12A PUSH2 0x282 JUMP JUMPDEST PUSH2 0x12A PUSH2 0x288 JUMP JUMPDEST PUSH2 0x152 PUSH2 0x28E JUMP JUMPDEST PUSH2 0x12A PUSH2 0x29D JUMP JUMPDEST PUSH2 0x167 PUSH2 0x2A3 JUMP JUMPDEST PUSH2 0x12A PUSH2 0x2B2 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x8 DUP6 ADD SLOAD PUSH1 0x9 DUP7 ADD SLOAD SWAP7 DUP7 ADD SLOAD PUSH1 0xB DUP8 ADD SLOAD PUSH1 0xC DUP9 ADD SLOAD PUSH1 0xE SWAP1 SWAP9 ADD SLOAD SWAP7 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP8 SWAP5 SWAP7 SWAP4 SWAP6 SWAP3 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0xFF DUP1 DUP4 AND SWAP3 PUSH2 0x100 SWAP1 DIV DUP2 AND SWAP2 AND DUP12 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2C3 DUP2 PUSH2 0x449 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2C3 DUP2 PUSH2 0x460 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2F2 DUP5 DUP5 PUSH2 0x2B8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2F2 DUP5 DUP5 PUSH2 0x2C9 JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x419 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x424 JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x43E JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x435 JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x438 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2C3 DUP3 DUP5 PUSH2 0x318 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2C3 DUP3 DUP5 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2C3 DUP3 DUP5 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD PUSH2 0x384 DUP3 DUP15 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x391 PUSH1 0x20 DUP4 ADD DUP14 PUSH2 0x318 JUMP JUMPDEST PUSH2 0x39E PUSH1 0x40 DUP4 ADD DUP13 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3AB PUSH1 0x60 DUP4 ADD DUP12 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3B8 PUSH1 0x80 DUP4 ADD DUP11 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3C5 PUSH1 0xA0 DUP4 ADD DUP10 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3D2 PUSH1 0xC0 DUP4 ADD DUP9 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3DF PUSH1 0xE0 DUP4 ADD DUP8 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3ED PUSH2 0x100 DUP4 ADD DUP7 PUSH2 0x327 JUMP JUMPDEST PUSH2 0x3FB PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x327 JUMP JUMPDEST PUSH2 0x409 PUSH2 0x140 DUP4 ADD DUP5 PUSH2 0x342 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C3 DUP3 PUSH2 0x429 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C3 DUP3 PUSH2 0x419 JUMP JUMPDEST PUSH2 0x452 DUP2 PUSH2 0x419 JUMP JUMPDEST DUP2 EQ PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x452 DUP2 PUSH2 0x435 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 DUP13 0xED CREATE2 0xEE 0xED DUP13 CALLER SELFBALANCE 0xAB LOG2 CODESIZE PUSH3 0x5E4277 PUSH7 0x451FA2ADF4245 0xA7 XOR 0xFB 0x21 DUP3 PUSH30 0x6041466C6578706572696D656E74616CF564736F6C634300051000400000 ","sourceMap":"3767:3491:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3767:3491:1;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635c60da1b1161008c578063d33219b411610066578063d33219b41461019c578063da35c664146101a4578063f851a440146101ac578063fc4eee42146101b4576100ea565b80635c60da1b146101845780637bdbe4d01461018c578063b58131b014610194576100ea565b80631b9ce575116100c85780631b9ce5751461014a578063267822471461015f5780633932abb114610174578063452a93201461017c576100ea565b8063013cf08b146100ef57806302a251a31461012257806317977c6114610137575b600080fd5b6101026100fd3660046102fa565b6101bc565b6040516101199b9a99989796959493929190610375565b60405180910390f35b61012a610228565b6040516101199190610367565b61012a6101453660046102d4565b61022e565b610152610240565b6040516101199190610359565b61016761024f565b604051610119919061034b565b61012a61025e565b610167610264565b610167610273565b61012a610282565b61012a610288565b61015261028e565b61012a61029d565b6101676102a3565b61012a6102b2565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c880154600e9098015496986001600160a01b039096169794969395929492939192909160ff808316926101009004811691168b565b60045481565b600b6020526000908152604090205481565b6009546001600160a01b031681565b6001546001600160a01b031681565b60035481565b600d546001600160a01b031681565b6002546001600160a01b031681565b600c5481565b60055481565b6008546001600160a01b031681565b60075481565b6000546001600160a01b031681565b60065481565b80356102c381610449565b92915050565b80356102c381610460565b6000602082840312156102e657600080fd5b60006102f284846102b8565b949350505050565b60006020828403121561030c57600080fd5b60006102f284846102c9565b61032181610419565b82525050565b61032181610424565b6103218161043e565b61032181610435565b61032181610438565b602081016102c38284610318565b602081016102c38284610330565b602081016102c38284610339565b6101608101610384828e610339565b610391602083018d610318565b61039e604083018c610339565b6103ab606083018b610339565b6103b8608083018a610339565b6103c560a0830189610339565b6103d260c0830188610339565b6103df60e0830187610339565b6103ed610100830186610327565b6103fb610120830185610327565b610409610140830184610342565b9c9b505050505050505050505050565b60006102c382610429565b151590565b6001600160a01b031690565b90565b60ff1690565b60006102c382610419565b61045281610419565b811461045d57600080fd5b50565b6104528161043556fea365627a7a723158208cedf5eeed8c3347aba238625e4277660451fa2adf4245a718fb21827d6041466c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD33219B4 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD33219B4 EQ PUSH2 0x19C JUMPI DUP1 PUSH4 0xDA35C664 EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0xFC4EEE42 EQ PUSH2 0x1B4 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x184 JUMPI DUP1 PUSH4 0x7BDBE4D0 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0xB58131B0 EQ PUSH2 0x194 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x1B9CE575 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0x26782247 EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0x3932ABB1 EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0x452A9320 EQ PUSH2 0x17C JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x13CF08B EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x2A251A3 EQ PUSH2 0x122 JUMPI DUP1 PUSH4 0x17977C61 EQ PUSH2 0x137 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x102 PUSH2 0xFD CALLDATASIZE PUSH1 0x4 PUSH2 0x2FA JUMP JUMPDEST PUSH2 0x1BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x119 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x375 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x12A PUSH2 0x228 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x119 SWAP2 SWAP1 PUSH2 0x367 JUMP JUMPDEST PUSH2 0x12A PUSH2 0x145 CALLDATASIZE PUSH1 0x4 PUSH2 0x2D4 JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST PUSH2 0x152 PUSH2 0x240 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x119 SWAP2 SWAP1 PUSH2 0x359 JUMP JUMPDEST PUSH2 0x167 PUSH2 0x24F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x119 SWAP2 SWAP1 PUSH2 0x34B JUMP JUMPDEST PUSH2 0x12A PUSH2 0x25E JUMP JUMPDEST PUSH2 0x167 PUSH2 0x264 JUMP JUMPDEST PUSH2 0x167 PUSH2 0x273 JUMP JUMPDEST PUSH2 0x12A PUSH2 0x282 JUMP JUMPDEST PUSH2 0x12A PUSH2 0x288 JUMP JUMPDEST PUSH2 0x152 PUSH2 0x28E JUMP JUMPDEST PUSH2 0x12A PUSH2 0x29D JUMP JUMPDEST PUSH2 0x167 PUSH2 0x2A3 JUMP JUMPDEST PUSH2 0x12A PUSH2 0x2B2 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x8 DUP6 ADD SLOAD PUSH1 0x9 DUP7 ADD SLOAD SWAP7 DUP7 ADD SLOAD PUSH1 0xB DUP8 ADD SLOAD PUSH1 0xC DUP9 ADD SLOAD PUSH1 0xE SWAP1 SWAP9 ADD SLOAD SWAP7 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP8 SWAP5 SWAP7 SWAP4 SWAP6 SWAP3 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0xFF DUP1 DUP4 AND SWAP3 PUSH2 0x100 SWAP1 DIV DUP2 AND SWAP2 AND DUP12 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2C3 DUP2 PUSH2 0x449 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2C3 DUP2 PUSH2 0x460 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2F2 DUP5 DUP5 PUSH2 0x2B8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2F2 DUP5 DUP5 PUSH2 0x2C9 JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x419 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x424 JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x43E JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x435 JUMP JUMPDEST PUSH2 0x321 DUP2 PUSH2 0x438 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2C3 DUP3 DUP5 PUSH2 0x318 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2C3 DUP3 DUP5 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x2C3 DUP3 DUP5 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD PUSH2 0x384 DUP3 DUP15 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x391 PUSH1 0x20 DUP4 ADD DUP14 PUSH2 0x318 JUMP JUMPDEST PUSH2 0x39E PUSH1 0x40 DUP4 ADD DUP13 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3AB PUSH1 0x60 DUP4 ADD DUP12 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3B8 PUSH1 0x80 DUP4 ADD DUP11 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3C5 PUSH1 0xA0 DUP4 ADD DUP10 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3D2 PUSH1 0xC0 DUP4 ADD DUP9 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3DF PUSH1 0xE0 DUP4 ADD DUP8 PUSH2 0x339 JUMP JUMPDEST PUSH2 0x3ED PUSH2 0x100 DUP4 ADD DUP7 PUSH2 0x327 JUMP JUMPDEST PUSH2 0x3FB PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x327 JUMP JUMPDEST PUSH2 0x409 PUSH2 0x140 DUP4 ADD DUP5 PUSH2 0x342 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C3 DUP3 PUSH2 0x429 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C3 DUP3 PUSH2 0x419 JUMP JUMPDEST PUSH2 0x452 DUP2 PUSH2 0x419 JUMP JUMPDEST DUP2 EQ PUSH2 0x45D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x452 DUP2 PUSH2 0x435 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 DUP13 0xED CREATE2 0xEE 0xED DUP13 CALLER SELFBALANCE 0xAB LOG2 CODESIZE PUSH3 0x5E4277 PUSH7 0x451FA2ADF4245 0xA7 XOR 0xFB 0x21 DUP3 PUSH30 0x6041466C6578706572696D656E74616CF564736F6C634300051000400000 ","sourceMap":"3767:3491:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3767:3491:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4650:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;4057:24;;;:::i;:::-;;;;;;;;4753:49;;;;;;;;;:::i;4543:33::-;;;:::i;:::-;;;;;;;;3389:27;;;:::i;:::-;;;;;;;;3952:23;;;:::i;7232:::-;;;:::i;3465:29::-;;;:::i;7129:33::-;;;:::i;4186:29::-;;;:::i;4445:33::-;;;:::i;4354:25::-;;;:::i;3306:20::-;;;:::i;4272:29::-;;;:::i;4650:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4650:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4057:24::-;;;;:::o;4753:49::-;;;;;;;;;;;;;:::o;4543:33::-;;;-1:-1:-1;;;;;4543:33:1;;:::o;3389:27::-;;;-1:-1:-1;;;;;3389:27:1;;:::o;3952:23::-;;;;:::o;7232:::-;;;-1:-1:-1;;;;;7232:23:1;;:::o;3465:29::-;;;-1:-1:-1;;;;;3465:29:1;;:::o;7129:33::-;;;;:::o;4186:29::-;;;;:::o;4445:33::-;;;-1:-1:-1;;;;;4445:33:1;;:::o;4354:25::-;;;;:::o;3306:20::-;;;-1:-1:-1;;;;;3306:20:1;;:::o;4272:29::-;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;;57:78;;;;;142:130;209:20;;234:33;209:20;234:33;;279:241;;383:2;371:9;362:7;358:23;354:32;351:2;;;399:1;396;389:12;351:2;434:1;451:53;496:7;476:9;451:53;;;441:63;345:175;-1:-1;;;;345:175;527:241;;631:2;619:9;610:7;606:23;602:32;599:2;;;647:1;644;637:12;599:2;682:1;699:53;744:7;724:9;699:53;;775:113;858:24;876:5;858:24;;;853:3;846:37;840:48;;;895:104;972:21;987:5;972:21;;1006:178;1115:63;1172:5;1115:63;;1376:113;1459:24;1477:5;1459:24;;1496:107;1575:22;1591:5;1575:22;;1610:213;1728:2;1713:18;;1742:71;1717:9;1786:6;1742:71;;1830:265;1974:2;1959:18;;1988:97;1963:9;2058:6;1988:97;;2374:213;2492:2;2477:18;;2506:71;2481:9;2550:6;2506:71;;2594:1301;2977:3;2962:19;;2992:71;2966:9;3036:6;2992:71;;;3074:72;3142:2;3131:9;3127:18;3118:6;3074:72;;;3157;3225:2;3214:9;3210:18;3201:6;3157:72;;;3240;3308:2;3297:9;3293:18;3284:6;3240:72;;;3323:73;3391:3;3380:9;3376:19;3367:6;3323:73;;;3407;3475:3;3464:9;3460:19;3451:6;3407:73;;;3491;3559:3;3548:9;3544:19;3535:6;3491:73;;;3575;3643:3;3632:9;3628:19;3619:6;3575:73;;;3659:67;3721:3;3710:9;3706:19;3697:6;3659:67;;;3737;3799:3;3788:9;3784:19;3775:6;3737:67;;;3815:70;3880:3;3869:9;3865:19;3855:7;3815:70;;;2948:947;;;;;;;;;;;;;;;3902:91;;3964:24;3982:5;3964:24;;4000:85;4066:13;4059:21;;4042:43;4092:121;-1:-1;;;;;4154:54;;4137:76;4220:72;4282:5;4265:27;4299:81;4370:4;4359:16;;4342:38;4387:173;;4492:63;4549:5;4492:63;;5029:117;5098:24;5116:5;5098:24;;;5091:5;5088:35;5078:2;;5137:1;5134;5127:12;5078:2;5072:74;;5153:117;5222:24;5240:5;5222:24;"},"gasEstimates":{"creation":{"codeDepositCost":"239200","executionCost":"281","totalCost":"239481"},"external":{"admin()":"infinite","guardian()":"infinite","implementation()":"infinite","initialProposalId()":"1187","latestProposalIds(address)":"infinite","pendingAdmin()":"infinite","proposalCount()":"1143","proposalMaxOperations()":"1144","proposalThreshold()":"1166","proposals(uint256)":"infinite","timelock()":"infinite","votingDelay()":"1166","votingPeriod()":"1145","xvsVault()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","guardian()":"452a9320","implementation()":"5c60da1b","initialProposalId()":"fc4eee42","latestProposalIds(address)":"17977c61","pendingAdmin()":"26782247","proposalCount()":"da35c664","proposalMaxOperations()":"7bdbe4d0","proposalThreshold()":"b58131b0","proposals(uint256)":"013cf08b","timelock()":"d33219b4","votingDelay()":"3932abb1","votingPeriod()":"02a251a3","xvsVault()":"1b9ce575"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialProposalId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"latestProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalMaxOperations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"abstainVotes\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canceled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"executed\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"timelock\",\"outputs\":[{\"internalType\":\"contract TimelockInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"xvsVault\",\"outputs\":[{\"internalType\":\"contract XvsVaultInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new contract which implements GovernorBravoDelegateStorageV1 and following the naming convention GovernorBravoDelegateStorageVX.\",\"methods\":{},\"title\":\"GovernorBravoDelegateStorageV1\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":\"GovernorBravoDelegateStorageV1\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1695,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"admin","offset":0,"slot":"0","type":"t_address"},{"astId":1697,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"pendingAdmin","offset":0,"slot":"1","type":"t_address"},{"astId":1699,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"implementation","offset":0,"slot":"2","type":"t_address"},{"astId":1704,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"votingDelay","offset":0,"slot":"3","type":"t_uint256"},{"astId":1706,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"votingPeriod","offset":0,"slot":"4","type":"t_uint256"},{"astId":1708,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"proposalThreshold","offset":0,"slot":"5","type":"t_uint256"},{"astId":1710,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"initialProposalId","offset":0,"slot":"6","type":"t_uint256"},{"astId":1712,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"proposalCount","offset":0,"slot":"7","type":"t_uint256"},{"astId":1714,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"timelock","offset":0,"slot":"8","type":"t_contract(TimelockInterface)1884"},{"astId":1716,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"xvsVault","offset":0,"slot":"9","type":"t_contract(XvsVaultInterface)1894"},{"astId":1720,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"proposals","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_struct(Proposal)1763_storage)"},{"astId":1724,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"latestProposalIds","offset":0,"slot":"11","type":"t_mapping(t_address,t_uint256)"},{"astId":1781,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"proposalMaxOperations","offset":0,"slot":"12","type":"t_uint256"},{"astId":1783,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"guardian","offset":0,"slot":"13","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_bytes_storage)dyn_storage":{"base":"t_bytes_storage","encoding":"dynamic_array","label":"bytes[]","numberOfBytes":"32"},"t_array(t_string_storage)dyn_storage":{"base":"t_string_storage","encoding":"dynamic_array","label":"string[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes_storage":{"encoding":"bytes","label":"bytes","numberOfBytes":"32"},"t_contract(TimelockInterface)1884":{"encoding":"inplace","label":"contract TimelockInterface","numberOfBytes":"20"},"t_contract(XvsVaultInterface)1894":{"encoding":"inplace","label":"contract XvsVaultInterface","numberOfBytes":"20"},"t_mapping(t_address,t_struct(Receipt)1770_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct GovernorBravoDelegateStorageV1.Receipt)","numberOfBytes":"32","value":"t_struct(Receipt)1770_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_struct(Proposal)1763_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal)","numberOfBytes":"32","value":"t_struct(Proposal)1763_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(Proposal)1763_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV1.Proposal","members":[{"astId":1726,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"id","offset":0,"slot":"0","type":"t_uint256"},{"astId":1728,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"proposer","offset":0,"slot":"1","type":"t_address"},{"astId":1730,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"eta","offset":0,"slot":"2","type":"t_uint256"},{"astId":1733,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"targets","offset":0,"slot":"3","type":"t_array(t_address)dyn_storage"},{"astId":1736,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"values","offset":0,"slot":"4","type":"t_array(t_uint256)dyn_storage"},{"astId":1739,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"signatures","offset":0,"slot":"5","type":"t_array(t_string_storage)dyn_storage"},{"astId":1742,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"calldatas","offset":0,"slot":"6","type":"t_array(t_bytes_storage)dyn_storage"},{"astId":1744,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"startBlock","offset":0,"slot":"7","type":"t_uint256"},{"astId":1746,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"endBlock","offset":0,"slot":"8","type":"t_uint256"},{"astId":1748,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"forVotes","offset":0,"slot":"9","type":"t_uint256"},{"astId":1750,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"againstVotes","offset":0,"slot":"10","type":"t_uint256"},{"astId":1752,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"abstainVotes","offset":0,"slot":"11","type":"t_uint256"},{"astId":1754,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"canceled","offset":0,"slot":"12","type":"t_bool"},{"astId":1756,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"executed","offset":1,"slot":"12","type":"t_bool"},{"astId":1760,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"receipts","offset":0,"slot":"13","type":"t_mapping(t_address,t_struct(Receipt)1770_storage)"},{"astId":1762,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"proposalType","offset":0,"slot":"14","type":"t_uint8"}],"numberOfBytes":"480"},"t_struct(Receipt)1770_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV1.Receipt","members":[{"astId":1765,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"hasVoted","offset":0,"slot":"0","type":"t_bool"},{"astId":1767,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"support","offset":1,"slot":"0","type":"t_uint8"},{"astId":1769,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV1","label":"votes","offset":2,"slot":"0","type":"t_uint96"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_uint96":{"encoding":"inplace","label":"uint96","numberOfBytes":"12"}}},"userdoc":{"methods":{}}},"GovernorBravoDelegateStorageV2":{"abi":[{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialProposalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalConfigs","outputs":[{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalTimelocks","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint8","name":"proposalType","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"xvsVault","outputs":[{"internalType":"contract XvsVaultInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"details":"For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new contract which implements GovernorBravoDelegateStorageV2 and following the naming convention GovernorBravoDelegateStorageVX.","methods":{},"title":"GovernorBravoDelegateStorageV2"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b5061055b806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80635c60da1b11610097578063da35c66411610066578063da35c664146101dc578063ee9799ee146101e4578063f851a440146101f7578063fc4eee42146101ff57610100565b80635c60da1b146101bc5780637bdbe4d0146101c4578063b58131b0146101cc578063d33219b4146101d457610100565b806326782247116100d3578063267822471461017557806335a87de21461018a5780633932abb1146101ac578063452a9320146101b457610100565b8063013cf08b1461010557806302a251a31461013857806317977c611461014d5780631b9ce57514610160575b600080fd5b610118610113366004610381565b610207565b60405161012f9b9a999897969594939291906103fc565b60405180910390f35b610140610273565b60405161012f91906103ee565b61014061015b36600461035b565b610279565b61016861028b565b60405161012f91906103e0565b61017d61029a565b60405161012f91906103d2565b61019d610198366004610381565b6102a9565b60405161012f939291906104a0565b6101406102ca565b61017d6102d0565b61017d6102df565b6101406102ee565b6101406102f4565b6101686102fa565b610140610309565b6101686101f2366004610381565b61030f565b61017d61032a565b610140610339565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c880154600e9098015496986001600160a01b039096169794969395929492939192909160ff808316926101009004811691168b565b60045481565b600b6020526000908152604090205481565b6009546001600160a01b031681565b6001546001600160a01b031681565b600e6020526000908152604090208054600182015460029092015490919083565b60035481565b600d546001600160a01b031681565b6002546001600160a01b031681565b600c5481565b60055481565b6008546001600160a01b031681565b60075481565b600f602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b60065481565b803561034a816104f8565b92915050565b803561034a8161050f565b60006020828403121561036d57600080fd5b6000610379848461033f565b949350505050565b60006020828403121561039357600080fd5b60006103798484610350565b6103a8816104c8565b82525050565b6103a8816104d3565b6103a8816104ed565b6103a8816104e4565b6103a8816104e7565b6020810161034a828461039f565b6020810161034a82846103b7565b6020810161034a82846103c0565b610160810161040b828e6103c0565b610418602083018d61039f565b610425604083018c6103c0565b610432606083018b6103c0565b61043f608083018a6103c0565b61044c60a08301896103c0565b61045960c08301886103c0565b61046660e08301876103c0565b6104746101008301866103ae565b6104826101208301856103ae565b6104906101408301846103c9565b9c9b505050505050505050505050565b606081016104ae82866103c0565b6104bb60208301856103c0565b61037960408301846103c0565b600061034a826104d8565b151590565b6001600160a01b031690565b90565b60ff1690565b600061034a826104c8565b610501816104c8565b811461050c57600080fd5b50565b610501816104e456fea365627a7a723158208c4a338f18578ce65494c6fcb13867e1e2fc8ec5cde4b4868a341e670fd0f96f6c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x55B DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x100 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDA35C664 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xDA35C664 EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0xEE9799EE EQ PUSH2 0x1E4 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xFC4EEE42 EQ PUSH2 0x1FF JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x7BDBE4D0 EQ PUSH2 0x1C4 JUMPI DUP1 PUSH4 0xB58131B0 EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0xD33219B4 EQ PUSH2 0x1D4 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x26782247 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x26782247 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x35A87DE2 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0x3932ABB1 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x452A9320 EQ PUSH2 0x1B4 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x13CF08B EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x2A251A3 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x17977C61 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x160 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x113 CALLDATASIZE PUSH1 0x4 PUSH2 0x381 JUMP JUMPDEST PUSH2 0x207 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH2 0x273 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x3EE JUMP JUMPDEST PUSH2 0x140 PUSH2 0x15B CALLDATASIZE PUSH1 0x4 PUSH2 0x35B JUMP JUMPDEST PUSH2 0x279 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x28B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x17D PUSH2 0x29A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x3D2 JUMP JUMPDEST PUSH2 0x19D PUSH2 0x198 CALLDATASIZE PUSH1 0x4 PUSH2 0x381 JUMP JUMPDEST PUSH2 0x2A9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4A0 JUMP JUMPDEST PUSH2 0x140 PUSH2 0x2CA JUMP JUMPDEST PUSH2 0x17D PUSH2 0x2D0 JUMP JUMPDEST PUSH2 0x17D PUSH2 0x2DF JUMP JUMPDEST PUSH2 0x140 PUSH2 0x2EE JUMP JUMPDEST PUSH2 0x140 PUSH2 0x2F4 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x2FA JUMP JUMPDEST PUSH2 0x140 PUSH2 0x309 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x1F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x381 JUMP JUMPDEST PUSH2 0x30F JUMP JUMPDEST PUSH2 0x17D PUSH2 0x32A JUMP JUMPDEST PUSH2 0x140 PUSH2 0x339 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x8 DUP6 ADD SLOAD PUSH1 0x9 DUP7 ADD SLOAD SWAP7 DUP7 ADD SLOAD PUSH1 0xB DUP8 ADD SLOAD PUSH1 0xC DUP9 ADD SLOAD PUSH1 0xE SWAP1 SWAP9 ADD SLOAD SWAP7 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP8 SWAP5 SWAP7 SWAP4 SWAP6 SWAP3 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0xFF DUP1 DUP4 AND SWAP3 PUSH2 0x100 SWAP1 DIV DUP2 AND SWAP2 AND DUP12 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x34A DUP2 PUSH2 0x4F8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x34A DUP2 PUSH2 0x50F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x379 DUP5 DUP5 PUSH2 0x33F JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x379 DUP5 DUP5 PUSH2 0x350 JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4C8 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4D3 JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4ED JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4E4 JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34A DUP3 DUP5 PUSH2 0x39F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34A DUP3 DUP5 PUSH2 0x3B7 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34A DUP3 DUP5 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD PUSH2 0x40B DUP3 DUP15 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x418 PUSH1 0x20 DUP4 ADD DUP14 PUSH2 0x39F JUMP JUMPDEST PUSH2 0x425 PUSH1 0x40 DUP4 ADD DUP13 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x432 PUSH1 0x60 DUP4 ADD DUP12 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x43F PUSH1 0x80 DUP4 ADD DUP11 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x44C PUSH1 0xA0 DUP4 ADD DUP10 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x459 PUSH1 0xC0 DUP4 ADD DUP9 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x466 PUSH1 0xE0 DUP4 ADD DUP8 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x474 PUSH2 0x100 DUP4 ADD DUP7 PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x482 PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x490 PUSH2 0x140 DUP4 ADD DUP5 PUSH2 0x3C9 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4AE DUP3 DUP7 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x4BB PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x379 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3C0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34A DUP3 PUSH2 0x4D8 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34A DUP3 PUSH2 0x4C8 JUMP JUMPDEST PUSH2 0x501 DUP2 PUSH2 0x4C8 JUMP JUMPDEST DUP2 EQ PUSH2 0x50C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x501 DUP2 PUSH2 0x4E4 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 DUP13 0x4A CALLER DUP16 XOR JUMPI DUP13 0xE6 SLOAD SWAP5 0xC6 0xFC 0xB1 CODESIZE PUSH8 0xE1E2FC8EC5CDE4B4 DUP7 DUP11 CALLVALUE 0x1E PUSH8 0xFD0F96F6C657870 PUSH6 0x72696D656E74 PUSH2 0x6CF5 PUSH5 0x736F6C6343 STOP SDIV LT STOP BLOCKHASH ","sourceMap":"7528:822:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7528:822:1;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101005760003560e01c80635c60da1b11610097578063da35c66411610066578063da35c664146101dc578063ee9799ee146101e4578063f851a440146101f7578063fc4eee42146101ff57610100565b80635c60da1b146101bc5780637bdbe4d0146101c4578063b58131b0146101cc578063d33219b4146101d457610100565b806326782247116100d3578063267822471461017557806335a87de21461018a5780633932abb1146101ac578063452a9320146101b457610100565b8063013cf08b1461010557806302a251a31461013857806317977c611461014d5780631b9ce57514610160575b600080fd5b610118610113366004610381565b610207565b60405161012f9b9a999897969594939291906103fc565b60405180910390f35b610140610273565b60405161012f91906103ee565b61014061015b36600461035b565b610279565b61016861028b565b60405161012f91906103e0565b61017d61029a565b60405161012f91906103d2565b61019d610198366004610381565b6102a9565b60405161012f939291906104a0565b6101406102ca565b61017d6102d0565b61017d6102df565b6101406102ee565b6101406102f4565b6101686102fa565b610140610309565b6101686101f2366004610381565b61030f565b61017d61032a565b610140610339565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c880154600e9098015496986001600160a01b039096169794969395929492939192909160ff808316926101009004811691168b565b60045481565b600b6020526000908152604090205481565b6009546001600160a01b031681565b6001546001600160a01b031681565b600e6020526000908152604090208054600182015460029092015490919083565b60035481565b600d546001600160a01b031681565b6002546001600160a01b031681565b600c5481565b60055481565b6008546001600160a01b031681565b60075481565b600f602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b60065481565b803561034a816104f8565b92915050565b803561034a8161050f565b60006020828403121561036d57600080fd5b6000610379848461033f565b949350505050565b60006020828403121561039357600080fd5b60006103798484610350565b6103a8816104c8565b82525050565b6103a8816104d3565b6103a8816104ed565b6103a8816104e4565b6103a8816104e7565b6020810161034a828461039f565b6020810161034a82846103b7565b6020810161034a82846103c0565b610160810161040b828e6103c0565b610418602083018d61039f565b610425604083018c6103c0565b610432606083018b6103c0565b61043f608083018a6103c0565b61044c60a08301896103c0565b61045960c08301886103c0565b61046660e08301876103c0565b6104746101008301866103ae565b6104826101208301856103ae565b6104906101408301846103c9565b9c9b505050505050505050505050565b606081016104ae82866103c0565b6104bb60208301856103c0565b61037960408301846103c0565b600061034a826104d8565b151590565b6001600160a01b031690565b90565b60ff1690565b600061034a826104c8565b610501816104c8565b811461050c57600080fd5b50565b610501816104e456fea365627a7a723158208c4a338f18578ce65494c6fcb13867e1e2fc8ec5cde4b4868a341e670fd0f96f6c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x100 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDA35C664 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xDA35C664 EQ PUSH2 0x1DC JUMPI DUP1 PUSH4 0xEE9799EE EQ PUSH2 0x1E4 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xFC4EEE42 EQ PUSH2 0x1FF JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x7BDBE4D0 EQ PUSH2 0x1C4 JUMPI DUP1 PUSH4 0xB58131B0 EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0xD33219B4 EQ PUSH2 0x1D4 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x26782247 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x26782247 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x35A87DE2 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0x3932ABB1 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0x452A9320 EQ PUSH2 0x1B4 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x13CF08B EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x2A251A3 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x17977C61 EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x160 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x113 CALLDATASIZE PUSH1 0x4 PUSH2 0x381 JUMP JUMPDEST PUSH2 0x207 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH2 0x273 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x3EE JUMP JUMPDEST PUSH2 0x140 PUSH2 0x15B CALLDATASIZE PUSH1 0x4 PUSH2 0x35B JUMP JUMPDEST PUSH2 0x279 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x28B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x17D PUSH2 0x29A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x3D2 JUMP JUMPDEST PUSH2 0x19D PUSH2 0x198 CALLDATASIZE PUSH1 0x4 PUSH2 0x381 JUMP JUMPDEST PUSH2 0x2A9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4A0 JUMP JUMPDEST PUSH2 0x140 PUSH2 0x2CA JUMP JUMPDEST PUSH2 0x17D PUSH2 0x2D0 JUMP JUMPDEST PUSH2 0x17D PUSH2 0x2DF JUMP JUMPDEST PUSH2 0x140 PUSH2 0x2EE JUMP JUMPDEST PUSH2 0x140 PUSH2 0x2F4 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x2FA JUMP JUMPDEST PUSH2 0x140 PUSH2 0x309 JUMP JUMPDEST PUSH2 0x168 PUSH2 0x1F2 CALLDATASIZE PUSH1 0x4 PUSH2 0x381 JUMP JUMPDEST PUSH2 0x30F JUMP JUMPDEST PUSH2 0x17D PUSH2 0x32A JUMP JUMPDEST PUSH2 0x140 PUSH2 0x339 JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x8 DUP6 ADD SLOAD PUSH1 0x9 DUP7 ADD SLOAD SWAP7 DUP7 ADD SLOAD PUSH1 0xB DUP8 ADD SLOAD PUSH1 0xC DUP9 ADD SLOAD PUSH1 0xE SWAP1 SWAP9 ADD SLOAD SWAP7 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP8 SWAP5 SWAP7 SWAP4 SWAP6 SWAP3 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0xFF DUP1 DUP4 AND SWAP3 PUSH2 0x100 SWAP1 DIV DUP2 AND SWAP2 AND DUP12 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x34A DUP2 PUSH2 0x4F8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x34A DUP2 PUSH2 0x50F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x379 DUP5 DUP5 PUSH2 0x33F JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x379 DUP5 DUP5 PUSH2 0x350 JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4C8 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4D3 JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4ED JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4E4 JUMP JUMPDEST PUSH2 0x3A8 DUP2 PUSH2 0x4E7 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34A DUP3 DUP5 PUSH2 0x39F JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34A DUP3 DUP5 PUSH2 0x3B7 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x34A DUP3 DUP5 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD PUSH2 0x40B DUP3 DUP15 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x418 PUSH1 0x20 DUP4 ADD DUP14 PUSH2 0x39F JUMP JUMPDEST PUSH2 0x425 PUSH1 0x40 DUP4 ADD DUP13 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x432 PUSH1 0x60 DUP4 ADD DUP12 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x43F PUSH1 0x80 DUP4 ADD DUP11 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x44C PUSH1 0xA0 DUP4 ADD DUP10 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x459 PUSH1 0xC0 DUP4 ADD DUP9 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x466 PUSH1 0xE0 DUP4 ADD DUP8 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x474 PUSH2 0x100 DUP4 ADD DUP7 PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x482 PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x3AE JUMP JUMPDEST PUSH2 0x490 PUSH2 0x140 DUP4 ADD DUP5 PUSH2 0x3C9 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4AE DUP3 DUP7 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x4BB PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3C0 JUMP JUMPDEST PUSH2 0x379 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3C0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34A DUP3 PUSH2 0x4D8 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34A DUP3 PUSH2 0x4C8 JUMP JUMPDEST PUSH2 0x501 DUP2 PUSH2 0x4C8 JUMP JUMPDEST DUP2 EQ PUSH2 0x50C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x501 DUP2 PUSH2 0x4E4 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 DUP13 0x4A CALLER DUP16 XOR JUMPI DUP13 0xE6 SLOAD SWAP5 0xC6 0xFC 0xB1 CODESIZE PUSH8 0xE1E2FC8EC5CDE4B4 DUP7 DUP11 CALLVALUE 0x1E PUSH8 0xFD0F96F6C657870 PUSH6 0x72696D656E74 PUSH2 0x6CF5 PUSH5 0x736F6C6343 STOP SDIV LT STOP BLOCKHASH ","sourceMap":"7528:822:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7528:822:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4650:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;4057:24;;;:::i;:::-;;;;;;;;4753:49;;;;;;;;;:::i;4543:33::-;;;:::i;:::-;;;;;;;;3389:27;;;:::i;:::-;;;;;;;;8150:54;;;;;;;;;:::i;:::-;;;;;;;;;;3952:23;;;:::i;7232:::-;;;:::i;3465:29::-;;;:::i;7129:33::-;;;:::i;4186:29::-;;;:::i;4445:33::-;;;:::i;4354:25::-;;;:::i;8288:59::-;;;;;;;;;:::i;3306:20::-;;;:::i;4272:29::-;;;:::i;4650:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4650:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4057:24::-;;;;:::o;4753:49::-;;;;;;;;;;;;;:::o;4543:33::-;;;-1:-1:-1;;;;;4543:33:1;;:::o;3389:27::-;;;-1:-1:-1;;;;;3389:27:1;;:::o;8150:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3952:23::-;;;;:::o;7232:::-;;;-1:-1:-1;;;;;7232:23:1;;:::o;3465:29::-;;;-1:-1:-1;;;;;3465:29:1;;:::o;7129:33::-;;;;:::o;4186:29::-;;;;:::o;4445:33::-;;;-1:-1:-1;;;;;4445:33:1;;:::o;4354:25::-;;;;:::o;8288:59::-;;;;;;;;;;;;-1:-1:-1;;;;;8288:59:1;;:::o;3306:20::-;;;-1:-1:-1;;;;;3306:20:1;;:::o;4272:29::-;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;;57:78;;;;;142:130;209:20;;234:33;209:20;234:33;;279:241;;383:2;371:9;362:7;358:23;354:32;351:2;;;399:1;396;389:12;351:2;434:1;451:53;496:7;476:9;451:53;;;441:63;345:175;-1:-1;;;;345:175;527:241;;631:2;619:9;610:7;606:23;602:32;599:2;;;647:1;644;637:12;599:2;682:1;699:53;744:7;724:9;699:53;;775:113;858:24;876:5;858:24;;;853:3;846:37;840:48;;;895:104;972:21;987:5;972:21;;1006:178;1115:63;1172:5;1115:63;;1376:113;1459:24;1477:5;1459:24;;1496:107;1575:22;1591:5;1575:22;;1610:213;1728:2;1713:18;;1742:71;1717:9;1786:6;1742:71;;1830:265;1974:2;1959:18;;1988:97;1963:9;2058:6;1988:97;;2374:213;2492:2;2477:18;;2506:71;2481:9;2550:6;2506:71;;2594:1301;2977:3;2962:19;;2992:71;2966:9;3036:6;2992:71;;;3074:72;3142:2;3131:9;3127:18;3118:6;3074:72;;;3157;3225:2;3214:9;3210:18;3201:6;3157:72;;;3240;3308:2;3297:9;3293:18;3284:6;3240:72;;;3323:73;3391:3;3380:9;3376:19;3367:6;3323:73;;;3407;3475:3;3464:9;3460:19;3451:6;3407:73;;;3491;3559:3;3548:9;3544:19;3535:6;3491:73;;;3575;3643:3;3632:9;3628:19;3619:6;3575:73;;;3659:67;3721:3;3710:9;3706:19;3697:6;3659:67;;;3737;3799:3;3788:9;3784:19;3775:6;3737:67;;;3815:70;3880:3;3869:9;3865:19;3855:7;3815:70;;;2948:947;;;;;;;;;;;;;;;3902:435;4076:2;4061:18;;4090:71;4065:9;4134:6;4090:71;;;4172:72;4240:2;4229:9;4225:18;4216:6;4172:72;;;4255;4323:2;4312:9;4308:18;4299:6;4255:72;;4344:91;;4406:24;4424:5;4406:24;;4442:85;4508:13;4501:21;;4484:43;4534:121;-1:-1;;;;;4596:54;;4579:76;4662:72;4724:5;4707:27;4741:81;4812:4;4801:16;;4784:38;4829:173;;4934:63;4991:5;4934:63;;5471:117;5540:24;5558:5;5540:24;;;5533:5;5530:35;5520:2;;5579:1;5576;5569:12;5520:2;5514:74;;5595:117;5664:24;5682:5;5664:24;"},"gasEstimates":{"creation":{"codeDepositCost":"274200","executionCost":"312","totalCost":"274512"},"external":{"admin()":"infinite","guardian()":"infinite","implementation()":"infinite","initialProposalId()":"1187","latestProposalIds(address)":"infinite","pendingAdmin()":"infinite","proposalConfigs(uint256)":"infinite","proposalCount()":"1121","proposalMaxOperations()":"1144","proposalThreshold()":"1166","proposalTimelocks(uint256)":"infinite","proposals(uint256)":"infinite","timelock()":"infinite","votingDelay()":"1166","votingPeriod()":"1145","xvsVault()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","guardian()":"452a9320","implementation()":"5c60da1b","initialProposalId()":"fc4eee42","latestProposalIds(address)":"17977c61","pendingAdmin()":"26782247","proposalConfigs(uint256)":"35a87de2","proposalCount()":"da35c664","proposalMaxOperations()":"7bdbe4d0","proposalThreshold()":"b58131b0","proposalTimelocks(uint256)":"ee9799ee","proposals(uint256)":"013cf08b","timelock()":"d33219b4","votingDelay()":"3932abb1","votingPeriod()":"02a251a3","xvsVault()":"1b9ce575"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialProposalId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"latestProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalConfigs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalThreshold\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalMaxOperations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalTimelocks\",\"outputs\":[{\"internalType\":\"contract TimelockInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"abstainVotes\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canceled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"executed\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"timelock\",\"outputs\":[{\"internalType\":\"contract TimelockInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"xvsVault\",\"outputs\":[{\"internalType\":\"contract XvsVaultInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new contract which implements GovernorBravoDelegateStorageV2 and following the naming convention GovernorBravoDelegateStorageVX.\",\"methods\":{},\"title\":\"GovernorBravoDelegateStorageV2\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":\"GovernorBravoDelegateStorageV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1695,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"admin","offset":0,"slot":"0","type":"t_address"},{"astId":1697,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"pendingAdmin","offset":0,"slot":"1","type":"t_address"},{"astId":1699,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"implementation","offset":0,"slot":"2","type":"t_address"},{"astId":1704,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"votingDelay","offset":0,"slot":"3","type":"t_uint256"},{"astId":1706,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"votingPeriod","offset":0,"slot":"4","type":"t_uint256"},{"astId":1708,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposalThreshold","offset":0,"slot":"5","type":"t_uint256"},{"astId":1710,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"initialProposalId","offset":0,"slot":"6","type":"t_uint256"},{"astId":1712,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposalCount","offset":0,"slot":"7","type":"t_uint256"},{"astId":1714,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"timelock","offset":0,"slot":"8","type":"t_contract(TimelockInterface)1884"},{"astId":1716,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"xvsVault","offset":0,"slot":"9","type":"t_contract(XvsVaultInterface)1894"},{"astId":1720,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposals","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_struct(Proposal)1763_storage)"},{"astId":1724,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"latestProposalIds","offset":0,"slot":"11","type":"t_mapping(t_address,t_uint256)"},{"astId":1781,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposalMaxOperations","offset":0,"slot":"12","type":"t_uint256"},{"astId":1783,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"guardian","offset":0,"slot":"13","type":"t_address"},{"astId":1801,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposalConfigs","offset":0,"slot":"14","type":"t_mapping(t_uint256,t_struct(ProposalConfig)1797_storage)"},{"astId":1805,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposalTimelocks","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_contract(TimelockInterface)1884)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_bytes_storage)dyn_storage":{"base":"t_bytes_storage","encoding":"dynamic_array","label":"bytes[]","numberOfBytes":"32"},"t_array(t_string_storage)dyn_storage":{"base":"t_string_storage","encoding":"dynamic_array","label":"string[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes_storage":{"encoding":"bytes","label":"bytes","numberOfBytes":"32"},"t_contract(TimelockInterface)1884":{"encoding":"inplace","label":"contract TimelockInterface","numberOfBytes":"20"},"t_contract(XvsVaultInterface)1894":{"encoding":"inplace","label":"contract XvsVaultInterface","numberOfBytes":"20"},"t_mapping(t_address,t_struct(Receipt)1770_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct GovernorBravoDelegateStorageV1.Receipt)","numberOfBytes":"32","value":"t_struct(Receipt)1770_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_contract(TimelockInterface)1884)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => contract TimelockInterface)","numberOfBytes":"32","value":"t_contract(TimelockInterface)1884"},"t_mapping(t_uint256,t_struct(Proposal)1763_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal)","numberOfBytes":"32","value":"t_struct(Proposal)1763_storage"},"t_mapping(t_uint256,t_struct(ProposalConfig)1797_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig)","numberOfBytes":"32","value":"t_struct(ProposalConfig)1797_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(Proposal)1763_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV1.Proposal","members":[{"astId":1726,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"id","offset":0,"slot":"0","type":"t_uint256"},{"astId":1728,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposer","offset":0,"slot":"1","type":"t_address"},{"astId":1730,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"eta","offset":0,"slot":"2","type":"t_uint256"},{"astId":1733,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"targets","offset":0,"slot":"3","type":"t_array(t_address)dyn_storage"},{"astId":1736,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"values","offset":0,"slot":"4","type":"t_array(t_uint256)dyn_storage"},{"astId":1739,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"signatures","offset":0,"slot":"5","type":"t_array(t_string_storage)dyn_storage"},{"astId":1742,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"calldatas","offset":0,"slot":"6","type":"t_array(t_bytes_storage)dyn_storage"},{"astId":1744,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"startBlock","offset":0,"slot":"7","type":"t_uint256"},{"astId":1746,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"endBlock","offset":0,"slot":"8","type":"t_uint256"},{"astId":1748,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"forVotes","offset":0,"slot":"9","type":"t_uint256"},{"astId":1750,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"againstVotes","offset":0,"slot":"10","type":"t_uint256"},{"astId":1752,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"abstainVotes","offset":0,"slot":"11","type":"t_uint256"},{"astId":1754,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"canceled","offset":0,"slot":"12","type":"t_bool"},{"astId":1756,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"executed","offset":1,"slot":"12","type":"t_bool"},{"astId":1760,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"receipts","offset":0,"slot":"13","type":"t_mapping(t_address,t_struct(Receipt)1770_storage)"},{"astId":1762,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposalType","offset":0,"slot":"14","type":"t_uint8"}],"numberOfBytes":"480"},"t_struct(ProposalConfig)1797_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV2.ProposalConfig","members":[{"astId":1792,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"votingDelay","offset":0,"slot":"0","type":"t_uint256"},{"astId":1794,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"votingPeriod","offset":0,"slot":"1","type":"t_uint256"},{"astId":1796,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"proposalThreshold","offset":0,"slot":"2","type":"t_uint256"}],"numberOfBytes":"96"},"t_struct(Receipt)1770_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV1.Receipt","members":[{"astId":1765,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"hasVoted","offset":0,"slot":"0","type":"t_bool"},{"astId":1767,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"support","offset":1,"slot":"0","type":"t_uint8"},{"astId":1769,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV2","label":"votes","offset":2,"slot":"0","type":"t_uint96"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_uint96":{"encoding":"inplace","label":"uint96","numberOfBytes":"12"}}},"userdoc":{"methods":{}}},"GovernorBravoDelegateStorageV3":{"abi":[{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialProposalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalConfigs","outputs":[{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalTimelocks","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"uint8","name":"proposalType","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"validationParams","outputs":[{"internalType":"uint256","name":"minVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"maxVotingPeriod","type":"uint256"},{"internalType":"uint256","name":"minVotingDelay","type":"uint256"},{"internalType":"uint256","name":"maxVotingDelay","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"xvsVault","outputs":[{"internalType":"contract XvsVaultInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"details":"For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new contract which implements GovernorBravoDelegateStorageV3 and following the naming convention GovernorBravoDelegateStorageVX.","methods":{},"title":"GovernorBravoDelegateStorageV3"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b506105cb806100206000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063452a9320116100a2578063d33219b411610071578063d33219b4146101f7578063da35c664146101ff578063ee9799ee14610207578063f851a4401461021a578063fc4eee42146102225761010b565b8063452a9320146101d75780635c60da1b146101df5780637bdbe4d0146101e7578063b58131b0146101ef5761010b565b806326782247116100de578063267822471461018057806334cf39091461019557806335a87de2146101ad5780633932abb1146101cf5761010b565b8063013cf08b1461011057806302a251a31461014357806317977c61146101585780631b9ce5751461016b575b600080fd5b61012361011e3660046103b3565b61022a565b60405161013a9b9a9998979695949392919061042e565b60405180910390f35b61014b610296565b60405161013a9190610420565b61014b61016636600461038d565b61029c565b6101736102ae565b60405161013a9190610412565b6101886102bd565b60405161013a9190610404565b61019d6102cc565b60405161013a94939291906104fa565b6101c06101bb3660046103b3565b6102db565b60405161013a939291906104d2565b61014b6102fc565b610188610302565b610188610311565b61014b610320565b61014b610326565b61017361032c565b61014b61033b565b6101736102153660046103b3565b610341565b61018861035c565b61014b61036b565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c880154600e9098015496986001600160a01b039096169794969395929492939192909160ff808316926101009004811691168b565b60045481565b600b6020526000908152604090205481565b6009546001600160a01b031681565b6001546001600160a01b031681565b60105460115460125460135484565b600e6020526000908152604090208054600182015460029092015490919083565b60035481565b600d546001600160a01b031681565b6002546001600160a01b031681565b600c5481565b60055481565b6008546001600160a01b031681565b60075481565b600f602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b60065481565b803561037c81610568565b92915050565b803561037c8161057f565b60006020828403121561039f57600080fd5b60006103ab8484610371565b949350505050565b6000602082840312156103c557600080fd5b60006103ab8484610382565b6103da81610538565b82525050565b6103da81610543565b6103da8161055d565b6103da81610554565b6103da81610557565b6020810161037c82846103d1565b6020810161037c82846103e9565b6020810161037c82846103f2565b610160810161043d828e6103f2565b61044a602083018d6103d1565b610457604083018c6103f2565b610464606083018b6103f2565b610471608083018a6103f2565b61047e60a08301896103f2565b61048b60c08301886103f2565b61049860e08301876103f2565b6104a66101008301866103e0565b6104b46101208301856103e0565b6104c26101408301846103fb565b9c9b505050505050505050505050565b606081016104e082866103f2565b6104ed60208301856103f2565b6103ab60408301846103f2565b6080810161050882876103f2565b61051560208301866103f2565b61052260408301856103f2565b61052f60608301846103f2565b95945050505050565b600061037c82610548565b151590565b6001600160a01b031690565b90565b60ff1690565b600061037c82610538565b61057181610538565b811461057c57600080fd5b50565b6105718161055456fea365627a7a7231582072a2c70cdf35112375c68b0ce9463ca2b437def91dca41a78daab4ff5c741b126c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5CB DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x452A9320 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD33219B4 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD33219B4 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xDA35C664 EQ PUSH2 0x1FF JUMPI DUP1 PUSH4 0xEE9799EE EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xFC4EEE42 EQ PUSH2 0x222 JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x452A9320 EQ PUSH2 0x1D7 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x7BDBE4D0 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0xB58131B0 EQ PUSH2 0x1EF JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x26782247 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x26782247 EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0x34CF3909 EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0x35A87DE2 EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0x3932ABB1 EQ PUSH2 0x1CF JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x13CF08B EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x2A251A3 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x17977C61 EQ PUSH2 0x158 JUMPI DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x16B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x123 PUSH2 0x11E CALLDATASIZE PUSH1 0x4 PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x22A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x42E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x14B PUSH2 0x296 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP2 SWAP1 PUSH2 0x420 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x166 CALLDATASIZE PUSH1 0x4 PUSH2 0x38D JUMP JUMPDEST PUSH2 0x29C JUMP JUMPDEST PUSH2 0x173 PUSH2 0x2AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP2 SWAP1 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x188 PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP2 SWAP1 PUSH2 0x404 JUMP JUMPDEST PUSH2 0x19D PUSH2 0x2CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4FA JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x2DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D2 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x2FC JUMP JUMPDEST PUSH2 0x188 PUSH2 0x302 JUMP JUMPDEST PUSH2 0x188 PUSH2 0x311 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x320 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x326 JUMP JUMPDEST PUSH2 0x173 PUSH2 0x32C JUMP JUMPDEST PUSH2 0x14B PUSH2 0x33B JUMP JUMPDEST PUSH2 0x173 PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x341 JUMP JUMPDEST PUSH2 0x188 PUSH2 0x35C JUMP JUMPDEST PUSH2 0x14B PUSH2 0x36B JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x8 DUP6 ADD SLOAD PUSH1 0x9 DUP7 ADD SLOAD SWAP7 DUP7 ADD SLOAD PUSH1 0xB DUP8 ADD SLOAD PUSH1 0xC DUP9 ADD SLOAD PUSH1 0xE SWAP1 SWAP9 ADD SLOAD SWAP7 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP8 SWAP5 SWAP7 SWAP4 SWAP6 SWAP3 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0xFF DUP1 DUP4 AND SWAP3 PUSH2 0x100 SWAP1 DIV DUP2 AND SWAP2 AND DUP12 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x11 SLOAD PUSH1 0x12 SLOAD PUSH1 0x13 SLOAD DUP5 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x37C DUP2 PUSH2 0x568 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x37C DUP2 PUSH2 0x57F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3AB DUP5 DUP5 PUSH2 0x371 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3AB DUP5 DUP5 PUSH2 0x382 JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x538 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x543 JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x55D JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x554 JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x557 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x37C DUP3 DUP5 PUSH2 0x3D1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x37C DUP3 DUP5 PUSH2 0x3E9 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x37C DUP3 DUP5 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD PUSH2 0x43D DUP3 DUP15 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x44A PUSH1 0x20 DUP4 ADD DUP14 PUSH2 0x3D1 JUMP JUMPDEST PUSH2 0x457 PUSH1 0x40 DUP4 ADD DUP13 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x464 PUSH1 0x60 DUP4 ADD DUP12 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x471 PUSH1 0x80 DUP4 ADD DUP11 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x47E PUSH1 0xA0 DUP4 ADD DUP10 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x48B PUSH1 0xC0 DUP4 ADD DUP9 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x498 PUSH1 0xE0 DUP4 ADD DUP8 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x4A6 PUSH2 0x100 DUP4 ADD DUP7 PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x4B4 PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x4C2 PUSH2 0x140 DUP4 ADD DUP5 PUSH2 0x3FB JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4E0 DUP3 DUP7 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x4ED PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x3AB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3F2 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x508 DUP3 DUP8 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x515 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x522 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x52F PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x3F2 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37C DUP3 PUSH2 0x548 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37C DUP3 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x571 DUP2 PUSH2 0x538 JUMP JUMPDEST DUP2 EQ PUSH2 0x57C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x571 DUP2 PUSH2 0x554 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 PUSH19 0xA2C70CDF35112375C68B0CE9463CA2B437DEF9 SAR 0xCA COINBASE 0xA7 DUP14 0xAA 0xB4 SELFDESTRUCT 0x5C PUSH21 0x1B126C6578706572696D656E74616CF564736F6C63 NUMBER STOP SDIV LT STOP BLOCKHASH ","sourceMap":"8620:385:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8620:385:1;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061010b5760003560e01c8063452a9320116100a2578063d33219b411610071578063d33219b4146101f7578063da35c664146101ff578063ee9799ee14610207578063f851a4401461021a578063fc4eee42146102225761010b565b8063452a9320146101d75780635c60da1b146101df5780637bdbe4d0146101e7578063b58131b0146101ef5761010b565b806326782247116100de578063267822471461018057806334cf39091461019557806335a87de2146101ad5780633932abb1146101cf5761010b565b8063013cf08b1461011057806302a251a31461014357806317977c61146101585780631b9ce5751461016b575b600080fd5b61012361011e3660046103b3565b61022a565b60405161013a9b9a9998979695949392919061042e565b60405180910390f35b61014b610296565b60405161013a9190610420565b61014b61016636600461038d565b61029c565b6101736102ae565b60405161013a9190610412565b6101886102bd565b60405161013a9190610404565b61019d6102cc565b60405161013a94939291906104fa565b6101c06101bb3660046103b3565b6102db565b60405161013a939291906104d2565b61014b6102fc565b610188610302565b610188610311565b61014b610320565b61014b610326565b61017361032c565b61014b61033b565b6101736102153660046103b3565b610341565b61018861035c565b61014b61036b565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c880154600e9098015496986001600160a01b039096169794969395929492939192909160ff808316926101009004811691168b565b60045481565b600b6020526000908152604090205481565b6009546001600160a01b031681565b6001546001600160a01b031681565b60105460115460125460135484565b600e6020526000908152604090208054600182015460029092015490919083565b60035481565b600d546001600160a01b031681565b6002546001600160a01b031681565b600c5481565b60055481565b6008546001600160a01b031681565b60075481565b600f602052600090815260409020546001600160a01b031681565b6000546001600160a01b031681565b60065481565b803561037c81610568565b92915050565b803561037c8161057f565b60006020828403121561039f57600080fd5b60006103ab8484610371565b949350505050565b6000602082840312156103c557600080fd5b60006103ab8484610382565b6103da81610538565b82525050565b6103da81610543565b6103da8161055d565b6103da81610554565b6103da81610557565b6020810161037c82846103d1565b6020810161037c82846103e9565b6020810161037c82846103f2565b610160810161043d828e6103f2565b61044a602083018d6103d1565b610457604083018c6103f2565b610464606083018b6103f2565b610471608083018a6103f2565b61047e60a08301896103f2565b61048b60c08301886103f2565b61049860e08301876103f2565b6104a66101008301866103e0565b6104b46101208301856103e0565b6104c26101408301846103fb565b9c9b505050505050505050505050565b606081016104e082866103f2565b6104ed60208301856103f2565b6103ab60408301846103f2565b6080810161050882876103f2565b61051560208301866103f2565b61052260408301856103f2565b61052f60608301846103f2565b95945050505050565b600061037c82610548565b151590565b6001600160a01b031690565b90565b60ff1690565b600061037c82610538565b61057181610538565b811461057c57600080fd5b50565b6105718161055456fea365627a7a7231582072a2c70cdf35112375c68b0ce9463ca2b437def91dca41a78daab4ff5c741b126c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x10B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x452A9320 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xD33219B4 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD33219B4 EQ PUSH2 0x1F7 JUMPI DUP1 PUSH4 0xDA35C664 EQ PUSH2 0x1FF JUMPI DUP1 PUSH4 0xEE9799EE EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xFC4EEE42 EQ PUSH2 0x222 JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x452A9320 EQ PUSH2 0x1D7 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x7BDBE4D0 EQ PUSH2 0x1E7 JUMPI DUP1 PUSH4 0xB58131B0 EQ PUSH2 0x1EF JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x26782247 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x26782247 EQ PUSH2 0x180 JUMPI DUP1 PUSH4 0x34CF3909 EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0x35A87DE2 EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0x3932ABB1 EQ PUSH2 0x1CF JUMPI PUSH2 0x10B JUMP JUMPDEST DUP1 PUSH4 0x13CF08B EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0x2A251A3 EQ PUSH2 0x143 JUMPI DUP1 PUSH4 0x17977C61 EQ PUSH2 0x158 JUMPI DUP1 PUSH4 0x1B9CE575 EQ PUSH2 0x16B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x123 PUSH2 0x11E CALLDATASIZE PUSH1 0x4 PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x22A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x42E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x14B PUSH2 0x296 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP2 SWAP1 PUSH2 0x420 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x166 CALLDATASIZE PUSH1 0x4 PUSH2 0x38D JUMP JUMPDEST PUSH2 0x29C JUMP JUMPDEST PUSH2 0x173 PUSH2 0x2AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP2 SWAP1 PUSH2 0x412 JUMP JUMPDEST PUSH2 0x188 PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP2 SWAP1 PUSH2 0x404 JUMP JUMPDEST PUSH2 0x19D PUSH2 0x2CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4FA JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x2DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x13A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4D2 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x2FC JUMP JUMPDEST PUSH2 0x188 PUSH2 0x302 JUMP JUMPDEST PUSH2 0x188 PUSH2 0x311 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x320 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x326 JUMP JUMPDEST PUSH2 0x173 PUSH2 0x32C JUMP JUMPDEST PUSH2 0x14B PUSH2 0x33B JUMP JUMPDEST PUSH2 0x173 PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B3 JUMP JUMPDEST PUSH2 0x341 JUMP JUMPDEST PUSH2 0x188 PUSH2 0x35C JUMP JUMPDEST PUSH2 0x14B PUSH2 0x36B JUMP JUMPDEST PUSH1 0xA PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x8 DUP6 ADD SLOAD PUSH1 0x9 DUP7 ADD SLOAD SWAP7 DUP7 ADD SLOAD PUSH1 0xB DUP8 ADD SLOAD PUSH1 0xC DUP9 ADD SLOAD PUSH1 0xE SWAP1 SWAP9 ADD SLOAD SWAP7 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND SWAP8 SWAP5 SWAP7 SWAP4 SWAP6 SWAP3 SWAP5 SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0xFF DUP1 DUP4 AND SWAP3 PUSH2 0x100 SWAP1 DIV DUP2 AND SWAP2 AND DUP12 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x10 SLOAD PUSH1 0x11 SLOAD PUSH1 0x12 SLOAD PUSH1 0x13 SLOAD DUP5 JUMP JUMPDEST PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x37C DUP2 PUSH2 0x568 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x37C DUP2 PUSH2 0x57F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3AB DUP5 DUP5 PUSH2 0x371 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x3AB DUP5 DUP5 PUSH2 0x382 JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x538 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x543 JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x55D JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x554 JUMP JUMPDEST PUSH2 0x3DA DUP2 PUSH2 0x557 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x37C DUP3 DUP5 PUSH2 0x3D1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x37C DUP3 DUP5 PUSH2 0x3E9 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x37C DUP3 DUP5 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD PUSH2 0x43D DUP3 DUP15 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x44A PUSH1 0x20 DUP4 ADD DUP14 PUSH2 0x3D1 JUMP JUMPDEST PUSH2 0x457 PUSH1 0x40 DUP4 ADD DUP13 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x464 PUSH1 0x60 DUP4 ADD DUP12 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x471 PUSH1 0x80 DUP4 ADD DUP11 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x47E PUSH1 0xA0 DUP4 ADD DUP10 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x48B PUSH1 0xC0 DUP4 ADD DUP9 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x498 PUSH1 0xE0 DUP4 ADD DUP8 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x4A6 PUSH2 0x100 DUP4 ADD DUP7 PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x4B4 PUSH2 0x120 DUP4 ADD DUP6 PUSH2 0x3E0 JUMP JUMPDEST PUSH2 0x4C2 PUSH2 0x140 DUP4 ADD DUP5 PUSH2 0x3FB JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP2 ADD PUSH2 0x4E0 DUP3 DUP7 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x4ED PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x3AB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3F2 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD PUSH2 0x508 DUP3 DUP8 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x515 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x522 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3F2 JUMP JUMPDEST PUSH2 0x52F PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x3F2 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37C DUP3 PUSH2 0x548 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37C DUP3 PUSH2 0x538 JUMP JUMPDEST PUSH2 0x571 DUP2 PUSH2 0x538 JUMP JUMPDEST DUP2 EQ PUSH2 0x57C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x571 DUP2 PUSH2 0x554 JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 PUSH19 0xA2C70CDF35112375C68B0CE9463CA2B437DEF9 SAR 0xCA COINBASE 0xA7 DUP14 0xAA 0xB4 SELFDESTRUCT 0x5C PUSH21 0x1B126C6578706572696D656E74616CF564736F6C63 NUMBER STOP SDIV LT STOP BLOCKHASH ","sourceMap":"8620:385:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8620:385:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4650:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;4057:24;;;:::i;:::-;;;;;;;;4753:49;;;;;;;;;:::i;4543:33::-;;;:::i;:::-;;;;;;;;3389:27;;;:::i;:::-;;;;;;;;8962:40;;;:::i;:::-;;;;;;;;;;;8150:54;;;;;;;;;:::i;:::-;;;;;;;;;;3952:23;;;:::i;7232:::-;;;:::i;3465:29::-;;;:::i;7129:33::-;;;:::i;4186:29::-;;;:::i;4445:33::-;;;:::i;4354:25::-;;;:::i;8288:59::-;;;;;;;;;:::i;3306:20::-;;;:::i;4272:29::-;;;:::i;4650:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4650:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4057:24::-;;;;:::o;4753:49::-;;;;;;;;;;;;;:::o;4543:33::-;;;-1:-1:-1;;;;;4543:33:1;;:::o;3389:27::-;;;-1:-1:-1;;;;;3389:27:1;;:::o;8962:40::-;;;;;;;;;;:::o;8150:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3952:23::-;;;;:::o;7232:::-;;;-1:-1:-1;;;;;7232:23:1;;:::o;3465:29::-;;;-1:-1:-1;;;;;3465:29:1;;:::o;7129:33::-;;;;:::o;4186:29::-;;;;:::o;4445:33::-;;;-1:-1:-1;;;;;4445:33:1;;:::o;4354:25::-;;;;:::o;8288:59::-;;;;;;;;;;;;-1:-1:-1;;;;;8288:59:1;;:::o;3306:20::-;;;-1:-1:-1;;;;;3306:20:1;;:::o;4272:29::-;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;;57:78;;;;;142:130;209:20;;234:33;209:20;234:33;;279:241;;383:2;371:9;362:7;358:23;354:32;351:2;;;399:1;396;389:12;351:2;434:1;451:53;496:7;476:9;451:53;;;441:63;345:175;-1:-1;;;;345:175;527:241;;631:2;619:9;610:7;606:23;602:32;599:2;;;647:1;644;637:12;599:2;682:1;699:53;744:7;724:9;699:53;;775:113;858:24;876:5;858:24;;;853:3;846:37;840:48;;;895:104;972:21;987:5;972:21;;1006:178;1115:63;1172:5;1115:63;;1376:113;1459:24;1477:5;1459:24;;1496:107;1575:22;1591:5;1575:22;;1610:213;1728:2;1713:18;;1742:71;1717:9;1786:6;1742:71;;1830:265;1974:2;1959:18;;1988:97;1963:9;2058:6;1988:97;;2374:213;2492:2;2477:18;;2506:71;2481:9;2550:6;2506:71;;2594:1301;2977:3;2962:19;;2992:71;2966:9;3036:6;2992:71;;;3074:72;3142:2;3131:9;3127:18;3118:6;3074:72;;;3157;3225:2;3214:9;3210:18;3201:6;3157:72;;;3240;3308:2;3297:9;3293:18;3284:6;3240:72;;;3323:73;3391:3;3380:9;3376:19;3367:6;3323:73;;;3407;3475:3;3464:9;3460:19;3451:6;3407:73;;;3491;3559:3;3548:9;3544:19;3535:6;3491:73;;;3575;3643:3;3632:9;3628:19;3619:6;3575:73;;;3659:67;3721:3;3710:9;3706:19;3697:6;3659:67;;;3737;3799:3;3788:9;3784:19;3775:6;3737:67;;;3815:70;3880:3;3869:9;3865:19;3855:7;3815:70;;;2948:947;;;;;;;;;;;;;;;3902:435;4076:2;4061:18;;4090:71;4065:9;4134:6;4090:71;;;4172:72;4240:2;4229:9;4225:18;4216:6;4172:72;;;4255;4323:2;4312:9;4308:18;4299:6;4255:72;;4344:547;4546:3;4531:19;;4561:71;4535:9;4605:6;4561:71;;;4643:72;4711:2;4700:9;4696:18;4687:6;4643:72;;;4726;4794:2;4783:9;4779:18;4770:6;4726:72;;;4809;4877:2;4866:9;4862:18;4853:6;4809:72;;;4517:374;;;;;;;;4898:91;;4960:24;4978:5;4960:24;;4996:85;5062:13;5055:21;;5038:43;5088:121;-1:-1;;;;;5150:54;;5133:76;5216:72;5278:5;5261:27;5295:81;5366:4;5355:16;;5338:38;5383:173;;5488:63;5545:5;5488:63;;6025:117;6094:24;6112:5;6094:24;;;6087:5;6084:35;6074:2;;6133:1;6130;6123:12;6074:2;6068:74;;6149:117;6218:24;6236:5;6218:24;"},"gasEstimates":{"creation":{"codeDepositCost":"296600","executionCost":"337","totalCost":"296937"},"external":{"admin()":"infinite","guardian()":"infinite","implementation()":"infinite","initialProposalId()":"1209","latestProposalIds(address)":"infinite","pendingAdmin()":"infinite","proposalConfigs(uint256)":"infinite","proposalCount()":"1143","proposalMaxOperations()":"1166","proposalThreshold()":"1188","proposalTimelocks(uint256)":"infinite","proposals(uint256)":"infinite","timelock()":"infinite","validationParams()":"infinite","votingDelay()":"1188","votingPeriod()":"1145","xvsVault()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","guardian()":"452a9320","implementation()":"5c60da1b","initialProposalId()":"fc4eee42","latestProposalIds(address)":"17977c61","pendingAdmin()":"26782247","proposalConfigs(uint256)":"35a87de2","proposalCount()":"da35c664","proposalMaxOperations()":"7bdbe4d0","proposalThreshold()":"b58131b0","proposalTimelocks(uint256)":"ee9799ee","proposals(uint256)":"013cf08b","timelock()":"d33219b4","validationParams()":"34cf3909","votingDelay()":"3932abb1","votingPeriod()":"02a251a3","xvsVault()":"1b9ce575"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialProposalId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"latestProposalIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalConfigs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposalThreshold\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalMaxOperations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposalTimelocks\",\"outputs\":[{\"internalType\":\"contract TimelockInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"forVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"againstVotes\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"abstainVotes\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"canceled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"executed\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"timelock\",\"outputs\":[{\"internalType\":\"contract TimelockInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"validationParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxVotingPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minVotingDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxVotingDelay\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"xvsVault\",\"outputs\":[{\"internalType\":\"contract XvsVaultInterface\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new contract which implements GovernorBravoDelegateStorageV3 and following the naming convention GovernorBravoDelegateStorageVX.\",\"methods\":{},\"title\":\"GovernorBravoDelegateStorageV3\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":\"GovernorBravoDelegateStorageV3\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1695,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"admin","offset":0,"slot":"0","type":"t_address"},{"astId":1697,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"pendingAdmin","offset":0,"slot":"1","type":"t_address"},{"astId":1699,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"implementation","offset":0,"slot":"2","type":"t_address"},{"astId":1704,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"votingDelay","offset":0,"slot":"3","type":"t_uint256"},{"astId":1706,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"votingPeriod","offset":0,"slot":"4","type":"t_uint256"},{"astId":1708,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposalThreshold","offset":0,"slot":"5","type":"t_uint256"},{"astId":1710,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"initialProposalId","offset":0,"slot":"6","type":"t_uint256"},{"astId":1712,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposalCount","offset":0,"slot":"7","type":"t_uint256"},{"astId":1714,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"timelock","offset":0,"slot":"8","type":"t_contract(TimelockInterface)1884"},{"astId":1716,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"xvsVault","offset":0,"slot":"9","type":"t_contract(XvsVaultInterface)1894"},{"astId":1720,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposals","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_struct(Proposal)1763_storage)"},{"astId":1724,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"latestProposalIds","offset":0,"slot":"11","type":"t_mapping(t_address,t_uint256)"},{"astId":1781,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposalMaxOperations","offset":0,"slot":"12","type":"t_uint256"},{"astId":1783,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"guardian","offset":0,"slot":"13","type":"t_address"},{"astId":1801,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposalConfigs","offset":0,"slot":"14","type":"t_mapping(t_uint256,t_struct(ProposalConfig)1797_storage)"},{"astId":1805,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposalTimelocks","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_contract(TimelockInterface)1884)"},{"astId":1819,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"validationParams","offset":0,"slot":"16","type":"t_struct(ValidationParams)1817_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_bytes_storage)dyn_storage":{"base":"t_bytes_storage","encoding":"dynamic_array","label":"bytes[]","numberOfBytes":"32"},"t_array(t_string_storage)dyn_storage":{"base":"t_string_storage","encoding":"dynamic_array","label":"string[]","numberOfBytes":"32"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes_storage":{"encoding":"bytes","label":"bytes","numberOfBytes":"32"},"t_contract(TimelockInterface)1884":{"encoding":"inplace","label":"contract TimelockInterface","numberOfBytes":"20"},"t_contract(XvsVaultInterface)1894":{"encoding":"inplace","label":"contract XvsVaultInterface","numberOfBytes":"20"},"t_mapping(t_address,t_struct(Receipt)1770_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct GovernorBravoDelegateStorageV1.Receipt)","numberOfBytes":"32","value":"t_struct(Receipt)1770_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_contract(TimelockInterface)1884)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => contract TimelockInterface)","numberOfBytes":"32","value":"t_contract(TimelockInterface)1884"},"t_mapping(t_uint256,t_struct(Proposal)1763_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct GovernorBravoDelegateStorageV1.Proposal)","numberOfBytes":"32","value":"t_struct(Proposal)1763_storage"},"t_mapping(t_uint256,t_struct(ProposalConfig)1797_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct GovernorBravoDelegateStorageV2.ProposalConfig)","numberOfBytes":"32","value":"t_struct(ProposalConfig)1797_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(Proposal)1763_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV1.Proposal","members":[{"astId":1726,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"id","offset":0,"slot":"0","type":"t_uint256"},{"astId":1728,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposer","offset":0,"slot":"1","type":"t_address"},{"astId":1730,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"eta","offset":0,"slot":"2","type":"t_uint256"},{"astId":1733,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"targets","offset":0,"slot":"3","type":"t_array(t_address)dyn_storage"},{"astId":1736,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"values","offset":0,"slot":"4","type":"t_array(t_uint256)dyn_storage"},{"astId":1739,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"signatures","offset":0,"slot":"5","type":"t_array(t_string_storage)dyn_storage"},{"astId":1742,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"calldatas","offset":0,"slot":"6","type":"t_array(t_bytes_storage)dyn_storage"},{"astId":1744,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"startBlock","offset":0,"slot":"7","type":"t_uint256"},{"astId":1746,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"endBlock","offset":0,"slot":"8","type":"t_uint256"},{"astId":1748,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"forVotes","offset":0,"slot":"9","type":"t_uint256"},{"astId":1750,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"againstVotes","offset":0,"slot":"10","type":"t_uint256"},{"astId":1752,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"abstainVotes","offset":0,"slot":"11","type":"t_uint256"},{"astId":1754,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"canceled","offset":0,"slot":"12","type":"t_bool"},{"astId":1756,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"executed","offset":1,"slot":"12","type":"t_bool"},{"astId":1760,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"receipts","offset":0,"slot":"13","type":"t_mapping(t_address,t_struct(Receipt)1770_storage)"},{"astId":1762,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposalType","offset":0,"slot":"14","type":"t_uint8"}],"numberOfBytes":"480"},"t_struct(ProposalConfig)1797_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV2.ProposalConfig","members":[{"astId":1792,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"votingDelay","offset":0,"slot":"0","type":"t_uint256"},{"astId":1794,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"votingPeriod","offset":0,"slot":"1","type":"t_uint256"},{"astId":1796,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"proposalThreshold","offset":0,"slot":"2","type":"t_uint256"}],"numberOfBytes":"96"},"t_struct(Receipt)1770_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV1.Receipt","members":[{"astId":1765,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"hasVoted","offset":0,"slot":"0","type":"t_bool"},{"astId":1767,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"support","offset":1,"slot":"0","type":"t_uint8"},{"astId":1769,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"votes","offset":2,"slot":"0","type":"t_uint96"}],"numberOfBytes":"32"},"t_struct(ValidationParams)1817_storage":{"encoding":"inplace","label":"struct GovernorBravoDelegateStorageV3.ValidationParams","members":[{"astId":1810,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"minVotingPeriod","offset":0,"slot":"0","type":"t_uint256"},{"astId":1812,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"maxVotingPeriod","offset":0,"slot":"1","type":"t_uint256"},{"astId":1814,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"minVotingDelay","offset":0,"slot":"2","type":"t_uint256"},{"astId":1816,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegateStorageV3","label":"maxVotingDelay","offset":0,"slot":"3","type":"t_uint256"}],"numberOfBytes":"128"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_uint96":{"encoding":"inplace","label":"uint96","numberOfBytes":"12"}}},"userdoc":{"methods":{}}},"GovernorBravoDelegatorStorage":{"abi":[{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","methods":{},"title":"GovernorBravoDelegatorStorage"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50610106806100206000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063267822471460415780635c60da1b14605b578063f851a440146061575b600080fd5b60476067565b6040516052919060a1565b60405180910390f35b60476076565b60476085565b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b609b8160b3565b82525050565b6020810160ad82846094565b92915050565b60006001600160a01b03821660ad56fea365627a7a7231582065bbee9e130d8f0dc06a1858e0c3b67cfbdbaf0e534c502cdd7e9a8d533847d16c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x106 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x26782247 EQ PUSH1 0x41 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH1 0x5B JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH1 0x61 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x47 PUSH1 0x67 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x52 SWAP2 SWAP1 PUSH1 0xA1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x47 PUSH1 0x76 JUMP JUMPDEST PUSH1 0x47 PUSH1 0x85 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x9B DUP2 PUSH1 0xB3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0xAD DUP3 DUP5 PUSH1 0x94 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0xAD JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 PUSH6 0xBBEE9E130D8F 0xD 0xC0 PUSH11 0x1858E0C3B67CFBDBAF0E53 0x4C POP 0x2C 0xDD PUSH31 0x9A8D533847D16C6578706572696D656E74616CF564736F6C63430005100040 ","sourceMap":"3213:284:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3213:284:1;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063267822471460415780635c60da1b14605b578063f851a440146061575b600080fd5b60476067565b6040516052919060a1565b60405180910390f35b60476076565b60476085565b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031681565b609b8160b3565b82525050565b6020810160ad82846094565b92915050565b60006001600160a01b03821660ad56fea365627a7a7231582065bbee9e130d8f0dc06a1858e0c3b67cfbdbaf0e534c502cdd7e9a8d533847d16c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x26782247 EQ PUSH1 0x41 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH1 0x5B JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH1 0x61 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x47 PUSH1 0x67 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x52 SWAP2 SWAP1 PUSH1 0xA1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x47 PUSH1 0x76 JUMP JUMPDEST PUSH1 0x47 PUSH1 0x85 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x9B DUP2 PUSH1 0xB3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0xAD DUP3 DUP5 PUSH1 0x94 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0xAD JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 PUSH6 0xBBEE9E130D8F 0xD 0xC0 PUSH11 0x1858E0C3B67CFBDBAF0E53 0x4C POP 0x2C 0xDD PUSH31 0x9A8D533847D16C6578706572696D656E74616CF564736F6C63430005100040 ","sourceMap":"3213:284:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3213:284:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3389:27;;;:::i;:::-;;;;;;;;;;;;;;;;3465:29;;;:::i;3306:20::-;;;:::i;3389:27::-;;;-1:-1:-1;;;;;3389:27:1;;:::o;3465:29::-;;;-1:-1:-1;;;;;3465:29:1;;:::o;3306:20::-;;;-1:-1:-1;;;;;3306:20:1;;:::o;5:113:-1:-;88:24;106:5;88:24;;;83:3;76:37;70:48;;;125:213;243:2;228:18;;257:71;232:9;301:6;257:71;;;214:124;;;;;345:91;;-1:-1;;;;;505:54;;407:24;488:76"},"gasEstimates":{"creation":{"codeDepositCost":"52400","executionCost":"105","totalCost":"52505"},"external":{"admin()":"infinite","implementation()":"infinite","pendingAdmin()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","implementation()":"5c60da1b","pendingAdmin()":"26782247"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pendingAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{},\"title\":\"GovernorBravoDelegatorStorage\"},\"userdoc\":{\"methods\":{},\"notice\":\"Storage layout of the `GovernorBravoDelegator` contract\"}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":\"GovernorBravoDelegatorStorage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1695,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegatorStorage","label":"admin","offset":0,"slot":"0","type":"t_address"},{"astId":1697,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegatorStorage","label":"pendingAdmin","offset":0,"slot":"1","type":"t_address"},{"astId":1699,"contract":"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol:GovernorBravoDelegatorStorage","label":"implementation","offset":0,"slot":"2","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"methods":{},"notice":"Storage layout of the `GovernorBravoDelegator` contract"}},"GovernorBravoEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGuardian","type":"address"},{"indexed":false,"internalType":"address","name":"newGuardian","type":"address"}],"name":"NewGuardian","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"},{"indexed":false,"internalType":"uint8","name":"proposalType","type":"uint8"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxOperations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxOperations","type":"uint256"}],"name":"ProposalMaxOperationsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldProposalThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"ProposalThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"votingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"votingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalThreshold","type":"uint256"}],"name":"SetProposalConfigs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldmaxVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldminVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newminVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldmaxVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newmaxVotingDelay","type":"uint256"}],"name":"SetValidationParams","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"support","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingDelay","type":"uint256"}],"name":"VotingDelaySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingPeriod","type":"uint256"}],"name":"VotingPeriodSet","type":"event"}],"devdoc":{"author":"Venus","methods":{},"title":"GovernorBravoEvents"},"evm":{"bytecode":{"linkReferences":{},"object":"6080604052348015600f57600080fd5b50604c80601d6000396000f3fe6080604052600080fdfea365627a7a72315820d227cc30f73d4726d16bc6393b0cdee9e233c5d611e0367ba1036a4e20ff54686c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4C DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 0xD2 0x27 0xCC ADDRESS 0xF7 RETURNDATASIZE SELFBALANCE 0x26 0xD1 PUSH12 0xC6393B0CDEE9E233C5D611E0 CALLDATASIZE PUSH28 0xA1036A4E20FF54686C6578706572696D656E74616CF564736F6C6343 STOP SDIV LT STOP BLOCKHASH ","sourceMap":"180:2899:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;180:2899:1;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"6080604052600080fdfea365627a7a72315820d227cc30f73d4726d16bc6393b0cdee9e233c5d611e0367ba1036a4e20ff54686c6578706572696d656e74616cf564736f6c63430005100040","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 0xD2 0x27 0xCC ADDRESS 0xF7 RETURNDATASIZE SELFBALANCE 0x26 0xD1 PUSH12 0xC6393B0CDEE9E233C5D611E0 CALLDATASIZE PUSH28 0xA1036A4E20FF54686C6578706572696D656E74616CF564736F6C6343 STOP SDIV LT STOP BLOCKHASH ","sourceMap":"180:2899:1:-;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"15200","executionCost":"69","totalCost":"15269"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"NewAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldGuardian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newGuardian\",\"type\":\"address\"}],\"name\":\"NewGuardian\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"NewImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldPendingAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newPendingAdmin\",\"type\":\"address\"}],\"name\":\"NewPendingAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ProposalCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"signatures\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"calldatas\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"proposalType\",\"type\":\"uint8\"}],\"name\":\"ProposalCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ProposalExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMaxOperations\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMaxOperations\",\"type\":\"uint256\"}],\"name\":\"ProposalMaxOperationsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"ProposalQueued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldProposalThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newProposalThreshold\",\"type\":\"uint256\"}],\"name\":\"ProposalThresholdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalThreshold\",\"type\":\"uint256\"}],\"name\":\"SetProposalConfigs\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldMinVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newMinVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldmaxVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldminVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newminVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldmaxVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newmaxVotingDelay\",\"type\":\"uint256\"}],\"name\":\"SetValidationParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposalId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"support\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"votes\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"VoteCast\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldVotingDelay\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVotingDelay\",\"type\":\"uint256\"}],\"name\":\"VotingDelaySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldVotingPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVotingPeriod\",\"type\":\"uint256\"}],\"name\":\"VotingPeriodSet\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{},\"title\":\"GovernorBravoEvents\"},\"userdoc\":{\"methods\":{},\"notice\":\"Set of events emitted by the GovernorBravo contracts.\"}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":\"GovernorBravoEvents\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{},"notice":"Set of events emitted by the GovernorBravo contracts."}},"TimelockInterface":{"abi":[{"constant":true,"inputs":[],"name":"GRACE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"cancelTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"executeTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"queueTransaction","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"queuedTransactions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","methods":{},"title":"TimelockInterface"},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"GRACE_PERIOD()":"c1a287e2","acceptAdmin()":"0e18b681","cancelTransaction(address,uint256,string,bytes,uint256)":"591fcdfe","delay()":"6a42b8f8","executeTransaction(address,uint256,string,bytes,uint256)":"0825f38f","queueTransaction(address,uint256,string,bytes,uint256)":"3a66f901","queuedTransactions(bytes32)":"f2b06537"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"GRACE_PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"acceptAdmin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"cancelTransaction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"executeTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"signature\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"eta\",\"type\":\"uint256\"}],\"name\":\"queueTransaction\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"queuedTransactions\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{},\"title\":\"TimelockInterface\"},\"userdoc\":{\"methods\":{},\"notice\":\"Interface implemented by the Timelock contract.\"}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":\"TimelockInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{},"notice":"Interface implemented by the Timelock contract."}},"XvsVaultInterface":{"abi":[{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getPriorVotes(address,uint256)":"782d6fe1"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getPriorVotes\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":\"XvsVaultInterface\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}}},"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol":{"VTreasury":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"withdrawAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"withdrawAddress","type":"address"}],"name":"WithdrawTreasuryBEP20","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"withdrawAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"withdrawAddress","type":"address"}],"name":"WithdrawTreasuryBNB","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"},{"internalType":"address","name":"withdrawAddress","type":"address"}],"name":"withdrawTreasuryBEP20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"},{"internalType":"address payable","name":"withdrawAddress","type":"address"}],"name":"withdrawTreasuryBNB","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}],"devdoc":{"author":"Venus","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"withdrawTreasuryBEP20(address,uint256,address)":{"params":{"tokenAddress":"The address of treasury token","withdrawAddress":"The withdraw address","withdrawAmount":"The withdraw amount to owner"}},"withdrawTreasuryBNB(uint256,address)":{"params":{"withdrawAddress":"The withdraw address","withdrawAmount":"The withdraw amount to owner"}}},"title":"VTreasury"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405260006100176001600160e01b0361006616565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006a565b3390565b610811806100796000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004c5780638da5cb5b14610061578063b38d5d8b14610092578063f2fde38b146100d5578063fb9e6b8e14610108575b005b34801561005857600080fd5b5061004a610134565b34801561006d57600080fd5b506100766101d6565b604080516001600160a01b039092168252519081900360200190f35b34801561009e57600080fd5b5061004a600480360360608110156100b557600080fd5b506001600160a01b038135811691602081013591604090910135166101e5565b3480156100e157600080fd5b5061004a600480360360208110156100f857600080fd5b50356001600160a01b031661032d565b61004a6004803603604081101561011e57600080fd5b50803590602001356001600160a01b0316610391565b61013c610477565b6000546001600160a01b0390811691161461018c576040805162461bcd60e51b815260206004820181905260248201526000805160206107bd833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6101ed610477565b6000546001600160a01b0390811691161461023d576040805162461bcd60e51b815260206004820181905260248201526000805160206107bd833981519152604482015290519081900360640190fd5b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038716916370a08231916024808301926020929190829003018186803b15801561028857600080fd5b505afa15801561029c573d6000803e3d6000fd5b505050506040513d60208110156102b257600080fd5b50519050808411156102c2578091505b6102dc6001600160a01b038616848463ffffffff61047b16565b604080516001600160a01b0380881682526020820185905285168183015290517fbaa29435fcbb0a4fbf05d1a0c62e83956a0652d287540f94f1f8188352e4722a9181900360600190a15050505050565b610335610477565b6000546001600160a01b03908116911614610385576040805162461bcd60e51b815260206004820181905260248201526000805160206107bd833981519152604482015290519081900360640190fd5b61038e816104d2565b50565b610399610477565b6000546001600160a01b039081169116146103e9576040805162461bcd60e51b815260206004820181905260248201526000805160206107bd833981519152604482015290519081900360640190fd5b8147808211156103f7578091505b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015801561042d573d6000803e3d6000fd5b50604080518381526001600160a01b038516602082015281517f0d2b7d10254463c7f440553256de09db44772bbaa752720e51f018d33b910252929181900390910190a150505050565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526104cd908490610572565b505050565b6001600160a01b0381166105175760405162461bcd60e51b81526004018080602001828103825260268152602001806107976026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610584826001600160a01b0316610730565b6105d5576040805162461bcd60e51b815260206004820152601f60248201527f5361666542455032303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106106135780518252601f1990920191602091820191016105f4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610675576040519150601f19603f3d011682016040523d82523d6000602084013e61067a565b606091505b5091509150816106d1576040805162461bcd60e51b815260206004820181905260248201527f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561072a578080602001905160208110156106ed57600080fd5b505161072a5760405162461bcd60e51b815260040180806020018281038252602a81526020018061076d602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061076457508115155b94935050505056fe5361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a72315820fa80fb1dde8bed417a3f8ad0ca4bba49138879298539cdbf5f8df0d5118315a964736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH2 0x17 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH2 0x66 AND JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP3 SWAP4 POP SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x6A JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0x811 DUP1 PUSH2 0x79 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xB38D5D8B EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xFB9E6B8E EQ PUSH2 0x108 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A PUSH2 0x134 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76 PUSH2 0x1D6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x32D JUMP JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x391 JUMP JUMPDEST PUSH2 0x13C PUSH2 0x477 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x18C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x7BD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1ED PUSH2 0x477 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x23D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x7BD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP4 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x2C2 JUMPI DUP1 SWAP2 POP JUMPDEST PUSH2 0x2DC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x47B AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP6 SWAP1 MSTORE DUP6 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0xBAA29435FCBB0A4FBF05D1A0C62E83956A0652D287540F94F1F8188352E4722A SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x335 PUSH2 0x477 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x385 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x7BD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x38E DUP2 PUSH2 0x4D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x399 PUSH2 0x477 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x3E9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x7BD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 SELFBALANCE DUP1 DUP3 GT ISZERO PUSH2 0x3F7 JUMPI DUP1 SWAP2 POP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD2B7D10254463C7F440553256DE09DB44772BBAA752720E51F018D33B910252 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x4CD SWAP1 DUP5 SWAP1 PUSH2 0x572 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x517 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x797 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x584 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x730 JUMP JUMPDEST PUSH2 0x5D5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666542455032303A2063616C6C20746F206E6F6E2D636F6E747261637400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x613 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x5F4 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x675 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x67A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x6D1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666542455032303A206C6F772D6C6576656C2063616C6C206661696C6564 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x72A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x72A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x76D PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x764 JUMPI POP DUP2 ISZERO ISZERO JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID MSTORE8 PUSH2 0x6665 TIMESTAMP GASLIMIT POP ORIGIN ADDRESS GASPRICE KECCAK256 TIMESTAMP GASLIMIT POP ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x7563636565644F776E61626C653A206E6577206F PUSH24 0x6E657220697320746865207A65726F20616464726573734F PUSH24 0x6E61626C653A2063616C6C6572206973206E6F7420746865 KECCAK256 PUSH16 0x776E6572A265627A7A72315820FA80FB SAR 0xDE DUP12 0xED COINBASE PUSH27 0x3F8AD0CA4BBA49138879298539CDBF5F8DF0D5118315A964736F6C PUSH4 0x43000510 STOP ORIGIN ","sourceMap":"228:2231:2:-;;;828:17:7;848:12;-1:-1:-1;;;;;848:10:7;:12;:::i;:::-;870:6;:18;;-1:-1:-1;;;;;;870:18:7;-1:-1:-1;;;;;870:18:7;;;;;;;903:43;;870:18;;-1:-1:-1;870:18:7;903:43;;870:6;;903:43;795:158;228:2231:2;;734:96:5;813:10;734:96;:::o;228:2231:2:-;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"60806040526004361061004a5760003560e01c8063715018a61461004c5780638da5cb5b14610061578063b38d5d8b14610092578063f2fde38b146100d5578063fb9e6b8e14610108575b005b34801561005857600080fd5b5061004a610134565b34801561006d57600080fd5b506100766101d6565b604080516001600160a01b039092168252519081900360200190f35b34801561009e57600080fd5b5061004a600480360360608110156100b557600080fd5b506001600160a01b038135811691602081013591604090910135166101e5565b3480156100e157600080fd5b5061004a600480360360208110156100f857600080fd5b50356001600160a01b031661032d565b61004a6004803603604081101561011e57600080fd5b50803590602001356001600160a01b0316610391565b61013c610477565b6000546001600160a01b0390811691161461018c576040805162461bcd60e51b815260206004820181905260248201526000805160206107bd833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6101ed610477565b6000546001600160a01b0390811691161461023d576040805162461bcd60e51b815260206004820181905260248201526000805160206107bd833981519152604482015290519081900360640190fd5b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038716916370a08231916024808301926020929190829003018186803b15801561028857600080fd5b505afa15801561029c573d6000803e3d6000fd5b505050506040513d60208110156102b257600080fd5b50519050808411156102c2578091505b6102dc6001600160a01b038616848463ffffffff61047b16565b604080516001600160a01b0380881682526020820185905285168183015290517fbaa29435fcbb0a4fbf05d1a0c62e83956a0652d287540f94f1f8188352e4722a9181900360600190a15050505050565b610335610477565b6000546001600160a01b03908116911614610385576040805162461bcd60e51b815260206004820181905260248201526000805160206107bd833981519152604482015290519081900360640190fd5b61038e816104d2565b50565b610399610477565b6000546001600160a01b039081169116146103e9576040805162461bcd60e51b815260206004820181905260248201526000805160206107bd833981519152604482015290519081900360640190fd5b8147808211156103f7578091505b6040516001600160a01b0384169083156108fc029084906000818181858888f1935050505015801561042d573d6000803e3d6000fd5b50604080518381526001600160a01b038516602082015281517f0d2b7d10254463c7f440553256de09db44772bbaa752720e51f018d33b910252929181900390910190a150505050565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526104cd908490610572565b505050565b6001600160a01b0381166105175760405162461bcd60e51b81526004018080602001828103825260268152602001806107976026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b610584826001600160a01b0316610730565b6105d5576040805162461bcd60e51b815260206004820152601f60248201527f5361666542455032303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106106135780518252601f1990920191602091820191016105f4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610675576040519150601f19603f3d011682016040523d82523d6000602084013e61067a565b606091505b5091509150816106d1576040805162461bcd60e51b815260206004820181905260248201527f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561072a578080602001905160208110156106ed57600080fd5b505161072a5760405162461bcd60e51b815260040180806020018281038252602a81526020018061076d602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061076457508115155b94935050505056fe5361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a72315820fa80fb1dde8bed417a3f8ad0ca4bba49138879298539cdbf5f8df0d5118315a964736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 EQ PUSH2 0x4C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xB38D5D8B EQ PUSH2 0x92 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xFB9E6B8E EQ PUSH2 0x108 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A PUSH2 0x134 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76 PUSH2 0x1D6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x1E5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x32D JUMP JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x11E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x391 JUMP JUMPDEST PUSH2 0x13C PUSH2 0x477 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x18C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x7BD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1ED PUSH2 0x477 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x23D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x7BD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD DUP4 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x288 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x29C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x2C2 JUMPI DUP1 SWAP2 POP JUMPDEST PUSH2 0x2DC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x47B AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP6 SWAP1 MSTORE DUP6 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0xBAA29435FCBB0A4FBF05D1A0C62E83956A0652D287540F94F1F8188352E4722A SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x335 PUSH2 0x477 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x385 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x7BD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x38E DUP2 PUSH2 0x4D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x399 PUSH2 0x477 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 AND EQ PUSH2 0x3E9 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x7BD DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 SELFBALANCE DUP1 DUP3 GT ISZERO PUSH2 0x3F7 JUMPI DUP1 SWAP2 POP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP4 ISZERO PUSH2 0x8FC MUL SWAP1 DUP5 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x42D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP4 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x20 DUP3 ADD MSTORE DUP2 MLOAD PUSH32 0xD2B7D10254463C7F440553256DE09DB44772BBAA752720E51F018D33B910252 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x4CD SWAP1 DUP5 SWAP1 PUSH2 0x572 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x517 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x797 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x584 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x730 JUMP JUMPDEST PUSH2 0x5D5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666542455032303A2063616C6C20746F206E6F6E2D636F6E747261637400 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x613 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x5F4 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x675 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x67A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x6D1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666542455032303A206C6F772D6C6576656C2063616C6C206661696C6564 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x72A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x72A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x76D PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 EXTCODEHASH PUSH32 0xC5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470 DUP2 DUP2 EQ DUP1 ISZERO SWAP1 PUSH2 0x764 JUMPI POP DUP2 ISZERO ISZERO JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID MSTORE8 PUSH2 0x6665 TIMESTAMP GASLIMIT POP ORIGIN ADDRESS GASPRICE KECCAK256 TIMESTAMP GASLIMIT POP ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x7563636565644F776E61626C653A206E6577206F PUSH24 0x6E657220697320746865207A65726F20616464726573734F PUSH24 0x6E61626C653A2063616C6C6572206973206E6F7420746865 KECCAK256 PUSH16 0x776E6572A265627A7A72315820FA80FB SAR 0xDE DUP12 0xED COINBASE PUSH27 0x3F8AD0CA4BBA49138879298539CDBF5F8DF0D5118315A964736F6C PUSH4 0x43000510 STOP ORIGIN ","sourceMap":"228:2231:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1652:137:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1652:137:7;;;:::i;1029:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1029:77:7;;;:::i;:::-;;;;-1:-1:-1;;;;;1029:77:7;;;;;;;;;;;;;;913:743:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;913:743:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;913:743:2;;;;;;;;;;;;;;;;;:::i;1938:107:7:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1938:107:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1938:107:7;-1:-1:-1;;;;;1938:107:7;;:::i;1844:613:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1844:613:2;;;;;;-1:-1:-1;;;;;1844:613:2;;:::i;1652:137:7:-;1243:12;:10;:12::i;:::-;1233:6;;-1:-1:-1;;;;;1233:6:7;;;:22;;;1225:67;;;;;-1:-1:-1;;;1225:67:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1225:67:7;;;;;;;;;;;;;;;1750:1;1734:6;;1713:40;;-1:-1:-1;;;;;1734:6:7;;;;1713:40;;1750:1;;1713:40;1780:1;1763:19;;-1:-1:-1;;;;;;1763:19:7;;;1652:137::o;1029:77::-;1067:7;1093:6;-1:-1:-1;;;;;1093:6:7;1029:77;:::o;913:743:2:-;1243:12:7;:10;:12::i;:::-;1233:6;;-1:-1:-1;;;;;1233:6:7;;;:22;;;1225:67;;;;;-1:-1:-1;;;1225:67:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1225:67:7;;;;;;;;;;;;;;;1193:45:2;;;-1:-1:-1;;;1193:45:2;;1232:4;1193:45;;;;;;1105:14;;1074:28;;-1:-1:-1;;;;;1193:30:2;;;;;:45;;;;;;;;;;;;;;:30;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;1193:45:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1193:45:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1193:45:2;;-1:-1:-1;1286:32:2;;;1282:144;;;1400:15;1377:38;;1282:144;1487:72;-1:-1:-1;;;;;1487:33:2;;1521:15;1538:20;1487:72;:33;:72;:::i;:::-;1575:74;;;-1:-1:-1;;;;;1575:74:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:1:7;;913:743:2;;;:::o;1938:107:7:-;1243:12;:10;:12::i;:::-;1233:6;;-1:-1:-1;;;;;1233:6:7;;;:22;;;1225:67;;;;;-1:-1:-1;;;1225:67:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1225:67:7;;;;;;;;;;;;;;;2010:28;2029:8;2010:18;:28::i;:::-;1938:107;:::o;1844:613:2:-;1243:12:7;:10;:12::i;:::-;1233:6;;-1:-1:-1;;;;;1233:6:7;;;:22;;;1225:67;;;;;-1:-1:-1;;;1225:67:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1225:67:7;;;;;;;;;;;;;;;1998:14:2;2079:21;2148:27;;;2144:134;;;2257:10;2234:33;;2144:134;2330:46;;-1:-1:-1;;;;;2330:24:2;;;:46;;;;;2355:20;;2330:46;;;;2355:20;2330:24;:46;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;2392:58:2;;;;;;-1:-1:-1;;;;;2392:58:2;;;;;;;;;;;;;;;;;;;1302:1:7;;1844:613:2;;:::o;734:96:5:-;813:10;734:96;:::o;643:174:8:-;751:58;;;-1:-1:-1;;;;;751:58:8;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;751:58:8;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;725:85:8;;744:5;;725:18;:85::i;:::-;643:174;;;:::o;2146:225:7:-;-1:-1:-1;;;;;2219:22:7;;2211:73;;;;-1:-1:-1;;;2211:73:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2320:6;;;2299:38;;-1:-1:-1;;;;;2299:38:7;;;;2320:6;;;2299:38;;;2347:6;:17;;-1:-1:-1;;;;;;2347:17:7;-1:-1:-1;;;;;2347:17:7;;;;;;;;;;2146:225::o;2694:1107:8:-;3289:27;3297:5;-1:-1:-1;;;;;3289:25:8;;:27::i;:::-;3281:71;;;;;-1:-1:-1;;;3281:71:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;3423:12;3437:23;3472:5;-1:-1:-1;;;;;3464:19:8;3484:4;3464:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3464:25:8;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3422:67:8;;;;3507:7;3499:52;;;;;-1:-1:-1;;;3499:52:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3566:17;;:21;3562:233;;3718:10;3707:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3707:30:8;3699:85;;;;-1:-1:-1;;;3699:85:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2694:1107;;;;:::o;685:630:4:-;745:4;1218:20;;1051:66;1265:23;;;;;;:42;;-1:-1:-1;1292:15:4;;;1265:42;1257:51;685:630;-1:-1:-1;;;;685:630:4:o"},"gasEstimates":{"creation":{"codeDepositCost":"413000","executionCost":"infinite","totalCost":"infinite"},"external":{"":"162","owner()":"1037","renounceOwnership()":"infinite","transferOwnership(address)":"infinite","withdrawTreasuryBEP20(address,uint256,address)":"infinite","withdrawTreasuryBNB(uint256,address)":"infinite"}},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","withdrawTreasuryBEP20(address,uint256,address)":"b38d5d8b","withdrawTreasuryBNB(uint256,address)":"fb9e6b8e"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"WithdrawTreasuryBEP20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"WithdrawTreasuryBNB\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"withdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"withdrawTreasuryBEP20\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"withdrawAmount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"withdrawAddress\",\"type\":\"address\"}],\"name\":\"withdrawTreasuryBNB\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"withdrawTreasuryBEP20(address,uint256,address)\":{\"params\":{\"tokenAddress\":\"The address of treasury token\",\"withdrawAddress\":\"The withdraw address\",\"withdrawAmount\":\"The withdraw amount to owner\"}},\"withdrawTreasuryBNB(uint256,address)\":{\"params\":{\"withdrawAddress\":\"The withdraw address\",\"withdrawAmount\":\"The withdraw amount to owner\"}}},\"title\":\"VTreasury\"},\"userdoc\":{\"methods\":{\"withdrawTreasuryBEP20(address,uint256,address)\":{\"notice\":\"Withdraw Treasury BEP20 Tokens, Only owner call it\"},\"withdrawTreasuryBNB(uint256,address)\":{\"notice\":\"Withdraw Treasury BNB, Only owner call it\"}},\"notice\":\"Protocol treasury that holds tokens owned by Venus\"}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol\":\"VTreasury\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/IBEP20.sol\\\";\\nimport \\\"../Utils/SafeBEP20.sol\\\";\\nimport \\\"../Utils/Ownable.sol\\\";\\n\\n/**\\n * @title VTreasury\\n * @author Venus\\n * @notice Protocol treasury that holds tokens owned by Venus\\n */\\ncontract VTreasury is Ownable {\\n    using SafeMath for uint256;\\n    using SafeBEP20 for IBEP20;\\n\\n    // WithdrawTreasuryBEP20 Event\\n    event WithdrawTreasuryBEP20(address tokenAddress, uint256 withdrawAmount, address withdrawAddress);\\n\\n    // WithdrawTreasuryBNB Event\\n    event WithdrawTreasuryBNB(uint256 withdrawAmount, address withdrawAddress);\\n\\n    /**\\n     * @notice To receive BNB\\n     */\\n    function() external payable {}\\n\\n    /**\\n     * @notice Withdraw Treasury BEP20 Tokens, Only owner call it\\n     * @param tokenAddress The address of treasury token\\n     * @param withdrawAmount The withdraw amount to owner\\n     * @param withdrawAddress The withdraw address\\n     */\\n    function withdrawTreasuryBEP20(\\n        address tokenAddress,\\n        uint256 withdrawAmount,\\n        address withdrawAddress\\n    ) external onlyOwner {\\n        uint256 actualWithdrawAmount = withdrawAmount;\\n        // Get Treasury Token Balance\\n        uint256 treasuryBalance = IBEP20(tokenAddress).balanceOf(address(this));\\n\\n        // Check Withdraw Amount\\n        if (withdrawAmount > treasuryBalance) {\\n            // Update actualWithdrawAmount\\n            actualWithdrawAmount = treasuryBalance;\\n        }\\n\\n        // Transfer BEP20 Token to withdrawAddress\\n        IBEP20(tokenAddress).safeTransfer(withdrawAddress, actualWithdrawAmount);\\n\\n        emit WithdrawTreasuryBEP20(tokenAddress, actualWithdrawAmount, withdrawAddress);\\n    }\\n\\n    /**\\n     * @notice Withdraw Treasury BNB, Only owner call it\\n     * @param withdrawAmount The withdraw amount to owner\\n     * @param withdrawAddress The withdraw address\\n     */\\n    function withdrawTreasuryBNB(uint256 withdrawAmount, address payable withdrawAddress) external payable onlyOwner {\\n        uint256 actualWithdrawAmount = withdrawAmount;\\n        // Get Treasury BNB Balance\\n        uint256 bnbBalance = address(this).balance;\\n\\n        // Check Withdraw Amount\\n        if (withdrawAmount > bnbBalance) {\\n            // Update actualWithdrawAmount\\n            actualWithdrawAmount = bnbBalance;\\n        }\\n        // Transfer BNB to withdrawAddress\\n        withdrawAddress.transfer(actualWithdrawAmount);\\n\\n        emit WithdrawTreasuryBNB(actualWithdrawAmount, withdrawAddress);\\n    }\\n}\\n\",\"keccak256\":\"0x9e38dd90a19fd5aec7975d4f5f911a318cf6ee57b0042a6976b143982cce3b9b\"},\"@venusprotocol/venus-protocol/contracts/Utils/Address.sol\":{\"content\":\"pragma solidity ^0.5.5;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            codehash := extcodehash(account)\\n        }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` into `address payable`. Note that this is\\n     * simply a type cast: the actual underlying value is not changed.\\n     *\\n     * _Available since v2.4.0._\\n     */\\n    function toPayable(address account) internal pure returns (address payable) {\\n        return address(uint160(account));\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     *\\n     * _Available since v2.4.0._\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-call-value\\n        // solium-disable-next-line security/no-call-value\\n        (bool success, ) = recipient.call.value(amount)(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n}\\n\",\"keccak256\":\"0x3c2ef780599a2ae6913282b982633f07e405a4a9c8511590df571e2b773aef9d\"},\"@venusprotocol/venus-protocol/contracts/Utils/Context.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\ncontract Context {\\n    // Empty internal constructor, to prevent people from mistakenly deploying\\n    // an instance of this contract, which should be used via inheritance.\\n    constructor() internal {}\\n\\n    function _msgSender() internal view returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x9358609ad38c161d8789be25784f93360280948abfaa0099d9699b983af93bd9\"},\"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol\":{\"content\":\"pragma solidity ^0.5.0;\\n\\n/**\\n * @dev Interface of the BEP20 standard as defined in the EIP. Does not include\\n * the optional functions; to access them see {BEP20Detailed}.\\n */\\ninterface IBEP20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x839b08895eb1ad83502d3631e8e9e3a856d2a8c63c46f070d604af7b26c62c07\"},\"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"./Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() internal {\\n        address msgSender = _msgSender();\\n        _owner = msgSender;\\n        emit OwnershipTransferred(address(0), msgSender);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(_owner == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public onlyOwner {\\n        emit OwnershipTransferred(_owner, address(0));\\n        _owner = address(0);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public onlyOwner {\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     */\\n    function _transferOwnership(address newOwner) internal {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        emit OwnershipTransferred(_owner, newOwner);\\n        _owner = newOwner;\\n    }\\n}\\n\",\"keccak256\":\"0x2fbabd430a7eb4712b3ec3109f2b204bb0da22538d4b42f65b74a332571990d2\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeBEP20.sol\":{\"content\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"./SafeMath.sol\\\";\\nimport \\\"./IBEP20.sol\\\";\\nimport \\\"./Address.sol\\\";\\n\\n/**\\n * @title SafeBEP20\\n * @dev Wrappers around BEP20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeBEP20 for BEP20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeBEP20 {\\n    using SafeMath for uint256;\\n    using Address for address;\\n\\n    function safeTransfer(IBEP20 token, address to, uint256 value) internal {\\n        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(IBEP20 token, address from, address to, uint256 value) internal {\\n        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    function safeApprove(IBEP20 token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        // solhint-disable-next-line max-line-length\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeBEP20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(IBEP20 token, address spender, uint256 value) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender).add(value);\\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(IBEP20 token, address spender, uint256 value) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender).sub(\\n            value,\\n            \\\"SafeBEP20: decreased allowance below zero\\\"\\n        );\\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function callOptionalReturn(IBEP20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves.\\n\\n        // A Solidity high level call has three parts:\\n        //  1. The target address is checked to verify it contains contract code\\n        //  2. The call itself is made, and success asserted\\n        //  3. The return value is decoded, which in turn checks the size of the returned data.\\n        // solhint-disable-next-line max-line-length\\n        require(address(token).isContract(), \\\"SafeBEP20: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        require(success, \\\"SafeBEP20: low-level call failed\\\");\\n\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            // solhint-disable-next-line max-line-length\\n            require(abi.decode(returndata, (bool)), \\\"SafeBEP20: BEP20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x540ef6ddc47232a59d3ab0e95537f7a7d1c8a36f8dba315b010e60c6487bd768\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2231,"contract":"@venusprotocol/venus-protocol/contracts/Governance/VTreasury.sol:VTreasury","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"methods":{"withdrawTreasuryBEP20(address,uint256,address)":{"notice":"Withdraw Treasury BEP20 Tokens, Only owner call it"},"withdrawTreasuryBNB(uint256,address)":{"notice":"Withdraw Treasury BNB, Only owner call it"}},"notice":"Protocol treasury that holds tokens owned by Venus"}}},"@venusprotocol/venus-protocol/contracts/InterestRateModels/InterestRateModel.sol":{"InterestRateModel":{"abi":[{"constant":true,"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"name":"getBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"cash","type":"uint256"},{"internalType":"uint256","name":"borrows","type":"uint256"},{"internalType":"uint256","name":"reserves","type":"uint256"},{"internalType":"uint256","name":"reserveFactorMantissa","type":"uint256"}],"name":"getSupplyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInterestRateModel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"author":"Venus","methods":{"getBorrowRate(uint256,uint256,uint256)":{"params":{"borrows":"The total amount of borrows the market has outstanding","cash":"The total amount of cash the market has","reserves":"The total amnount of reserves the market has"},"return":"The borrow rate per block (as a percentage, and scaled by 1e18)"},"getSupplyRate(uint256,uint256,uint256,uint256)":{"params":{"borrows":"The total amount of borrows the market has outstanding","cash":"The total amount of cash the market has","reserveFactorMantissa":"The current reserve factor the market has","reserves":"The total amnount of reserves the market has"},"return":"The supply rate per block (as a percentage, and scaled by 1e18)"}},"title":"Venus's InterestRateModel Interface"},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getBorrowRate(uint256,uint256,uint256)":"15f24053","getSupplyRate(uint256,uint256,uint256,uint256)":"b8168816","isInterestRateModel()":"2191f92a"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrows\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserves\",\"type\":\"uint256\"}],\"name\":\"getBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrows\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserves\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactorMantissa\",\"type\":\"uint256\"}],\"name\":\"getSupplyRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isInterestRateModel\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{\"getBorrowRate(uint256,uint256,uint256)\":{\"params\":{\"borrows\":\"The total amount of borrows the market has outstanding\",\"cash\":\"The total amount of cash the market has\",\"reserves\":\"The total amnount of reserves the market has\"},\"return\":\"The borrow rate per block (as a percentage, and scaled by 1e18)\"},\"getSupplyRate(uint256,uint256,uint256,uint256)\":{\"params\":{\"borrows\":\"The total amount of borrows the market has outstanding\",\"cash\":\"The total amount of cash the market has\",\"reserveFactorMantissa\":\"The current reserve factor the market has\",\"reserves\":\"The total amnount of reserves the market has\"},\"return\":\"The supply rate per block (as a percentage, and scaled by 1e18)\"}},\"title\":\"Venus's InterestRateModel Interface\"},\"userdoc\":{\"methods\":{\"getBorrowRate(uint256,uint256,uint256)\":{\"notice\":\"Calculates the current borrow interest rate per block\"},\"getSupplyRate(uint256,uint256,uint256,uint256)\":{\"notice\":\"Calculates the current supply interest rate per block\"}}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/InterestRateModels/InterestRateModel.sol\":\"InterestRateModel\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/InterestRateModels/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.5.16;\\n\\n/**\\n * @title Venus's InterestRateModel Interface\\n * @author Venus\\n */\\ncontract InterestRateModel {\\n    /// @notice Indicator that this is an InterestRateModel contract (for inspection)\\n    bool public constant isInterestRateModel = true;\\n\\n    /**\\n     * @notice Calculates the current borrow interest rate per block\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amnount of reserves the market has\\n     * @return The borrow rate per block (as a percentage, and scaled by 1e18)\\n     */\\n    function getBorrowRate(uint cash, uint borrows, uint reserves) external view returns (uint);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per block\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amnount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @return The supply rate per block (as a percentage, and scaled by 1e18)\\n     */\\n    function getSupplyRate(\\n        uint cash,\\n        uint borrows,\\n        uint reserves,\\n        uint reserveFactorMantissa\\n    ) external view returns (uint);\\n}\\n\",\"keccak256\":\"0x786416e63346afec50151e44b993dbbdb12f94cd3f2c9dba631afe237353605f\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{"getBorrowRate(uint256,uint256,uint256)":{"notice":"Calculates the current borrow interest rate per block"},"getSupplyRate(uint256,uint256,uint256,uint256)":{"notice":"Calculates the current supply interest rate per block"}}}}},"@venusprotocol/venus-protocol/contracts/Utils/Address.sol":{"Address":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582017cb9b523dcd79e86a0e30db23d4550328c026c2859e1c301c9e9c38943a131d64736f6c63430005100032","opcodes":"PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 OR 0xCB SWAP12 MSTORE RETURNDATASIZE 0xCD PUSH26 0xE86A0E30DB23D4550328C026C2859E1C301C9E9C38943A131D64 PUSH20 0x6F6C634300051000320000000000000000000000 ","sourceMap":"93:2939:4:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"},"deployedBytecode":{"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a7231582017cb9b523dcd79e86a0e30db23d4550328c026c2859e1c301c9e9c38943a131d64736f6c63430005100032","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 OR 0xCB SWAP12 MSTORE RETURNDATASIZE 0xCD PUSH26 0xE86A0E30DB23D4550328C026C2859E1C301C9E9C38943A131D64 PUSH20 0x6F6C634300051000320000000000000000000000 ","sourceMap":"93:2939:4:-;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17000","executionCost":"94","totalCost":"17094"},"internal":{"isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","toPayable(address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Utils/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/Utils/Address.sol\":{\"content\":\"pragma solidity ^0.5.5;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            codehash := extcodehash(account)\\n        }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` into `address payable`. Note that this is\\n     * simply a type cast: the actual underlying value is not changed.\\n     *\\n     * _Available since v2.4.0._\\n     */\\n    function toPayable(address account) internal pure returns (address payable) {\\n        return address(uint160(account));\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     *\\n     * _Available since v2.4.0._\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-call-value\\n        // solium-disable-next-line security/no-call-value\\n        (bool success, ) = recipient.call.value(amount)(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n}\\n\",\"keccak256\":\"0x3c2ef780599a2ae6913282b982633f07e405a4a9c8511590df571e2b773aef9d\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}}},"@venusprotocol/venus-protocol/contracts/Utils/Context.sol":{"Context":{"abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"devdoc":{"methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Utils/Context.sol\":\"Context\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/Utils/Context.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\ncontract Context {\\n    // Empty internal constructor, to prevent people from mistakenly deploying\\n    // an instance of this contract, which should be used via inheritance.\\n    constructor() internal {}\\n\\n    function _msgSender() internal view returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x9358609ad38c161d8789be25784f93360280948abfaa0099d9699b983af93bd9\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}}},"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol":{"IBEP20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Interface of the BEP20 standard as defined in the EIP. Does not include the optional functions; to access them see {BEP20Detailed}.","methods":{"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default.     * This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"Sets `amount` as the allowance of `spender` over the caller's tokens.     * Returns a boolean value indicating whether the operation succeeded.     * IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729     * Emits an {Approval} event."},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Moves `amount` tokens from the caller's account to `recipient`.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a {Transfer} event."},"transferFrom(address,address,uint256)":{"details":"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a {Transfer} event."}}},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the BEP20 standard as defined in the EIP. Does not include the optional functions; to access them see {BEP20Detailed}.\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default.     * This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens.     * Returns a boolean value indicating whether the operation succeeded.     * IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729     * Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.     * Returns a boolean value indicating whether the operation succeeded.     * Emits a {Transfer} event.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol\":\"IBEP20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol\":{\"content\":\"pragma solidity ^0.5.0;\\n\\n/**\\n * @dev Interface of the BEP20 standard as defined in the EIP. Does not include\\n * the optional functions; to access them see {BEP20Detailed}.\\n */\\ninterface IBEP20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x839b08895eb1ad83502d3631e8e9e3a856d2a8c63c46f070d604af7b26c62c07\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}}},"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol":{"Ownable":{"abi":[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","methods":{"constructor":{"details":"Initializes the contract setting the deployer as the initial owner."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}}},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. * By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. * This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner.     * NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/Utils/Context.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\ncontract Context {\\n    // Empty internal constructor, to prevent people from mistakenly deploying\\n    // an instance of this contract, which should be used via inheritance.\\n    constructor() internal {}\\n\\n    function _msgSender() internal view returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x9358609ad38c161d8789be25784f93360280948abfaa0099d9699b983af93bd9\"},\"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"./Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor() internal {\\n        address msgSender = _msgSender();\\n        _owner = msgSender;\\n        emit OwnershipTransferred(address(0), msgSender);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(_owner == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public onlyOwner {\\n        emit OwnershipTransferred(_owner, address(0));\\n        _owner = address(0);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public onlyOwner {\\n        _transferOwnership(newOwner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     */\\n    function _transferOwnership(address newOwner) internal {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        emit OwnershipTransferred(_owner, newOwner);\\n        _owner = newOwner;\\n    }\\n}\\n\",\"keccak256\":\"0x2fbabd430a7eb4712b3ec3109f2b204bb0da22538d4b42f65b74a332571990d2\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2231,"contract":"@venusprotocol/venus-protocol/contracts/Utils/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"methods":{}}}},"@venusprotocol/venus-protocol/contracts/Utils/SafeBEP20.sol":{"SafeBEP20":{"abi":[],"devdoc":{"details":"Wrappers around BEP20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeBEP20 for BEP20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.","methods":{},"title":"SafeBEP20"},"evm":{"bytecode":{"linkReferences":{},"object":"60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206183d36da058137224f5949815f26ea78e5d6110997293cf8a7fea889cb3358964736f6c63430005100032","opcodes":"PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH2 0x83D3 PUSH14 0xA058137224F5949815F26EA78E5D PUSH2 0x1099 PUSH19 0x93CF8A7FEA889CB3358964736F6C6343000510 STOP ORIGIN ","sourceMap":"555:3248:8:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"},"deployedBytecode":{"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158206183d36da058137224f5949815f26ea78e5d6110997293cf8a7fea889cb3358964736f6c63430005100032","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH2 0x83D3 PUSH14 0xA058137224F5949815F26EA78E5D PUSH2 0x1099 PUSH19 0x93CF8A7FEA889CB3358964736F6C6343000510 STOP ORIGIN ","sourceMap":"555:3248:8:-;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17000","executionCost":"94","totalCost":"17094"},"internal":{"callOptionalReturn(contract IBEP20,bytes memory)":"infinite","safeApprove(contract IBEP20,address,uint256)":"infinite","safeDecreaseAllowance(contract IBEP20,address,uint256)":"infinite","safeIncreaseAllowance(contract IBEP20,address,uint256)":"infinite","safeTransfer(contract IBEP20,address,uint256)":"infinite","safeTransferFrom(contract IBEP20,address,address,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around BEP20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeBEP20 for BEP20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"methods\":{},\"title\":\"SafeBEP20\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Utils/SafeBEP20.sol\":\"SafeBEP20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/Utils/Address.sol\":{\"content\":\"pragma solidity ^0.5.5;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n    /**\\n     * @dev Returns true if `account` is a contract.\\n     *\\n     * [IMPORTANT]\\n     * ====\\n     * It is unsafe to assume that an address for which this function returns\\n     * false is an externally-owned account (EOA) and not a contract.\\n     *\\n     * Among others, `isContract` will return false for the following\\n     * types of addresses:\\n     *\\n     *  - an externally-owned account\\n     *  - a contract in construction\\n     *  - an address where a contract will be created\\n     *  - an address where a contract lived, but was destroyed\\n     * ====\\n     */\\n    function isContract(address account) internal view returns (bool) {\\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\\n        // for accounts without code, i.e. `keccak256('')`\\n        bytes32 codehash;\\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\\n        // solhint-disable-next-line no-inline-assembly\\n        assembly {\\n            codehash := extcodehash(account)\\n        }\\n        return (codehash != accountHash && codehash != 0x0);\\n    }\\n\\n    /**\\n     * @dev Converts an `address` into `address payable`. Note that this is\\n     * simply a type cast: the actual underlying value is not changed.\\n     *\\n     * _Available since v2.4.0._\\n     */\\n    function toPayable(address account) internal pure returns (address payable) {\\n        return address(uint160(account));\\n    }\\n\\n    /**\\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n     * `recipient`, forwarding all available gas and reverting on errors.\\n     *\\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n     * imposed by `transfer`, making them unable to receive funds via\\n     * `transfer`. {sendValue} removes this limitation.\\n     *\\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n     *\\n     * IMPORTANT: because control is transferred to `recipient`, care must be\\n     * taken to not create reentrancy vulnerabilities. Consider using\\n     * {ReentrancyGuard} or the\\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n     *\\n     * _Available since v2.4.0._\\n     */\\n    function sendValue(address payable recipient, uint256 amount) internal {\\n        require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n        // solhint-disable-next-line avoid-call-value\\n        // solium-disable-next-line security/no-call-value\\n        (bool success, ) = recipient.call.value(amount)(\\\"\\\");\\n        require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n    }\\n}\\n\",\"keccak256\":\"0x3c2ef780599a2ae6913282b982633f07e405a4a9c8511590df571e2b773aef9d\"},\"@venusprotocol/venus-protocol/contracts/Utils/IBEP20.sol\":{\"content\":\"pragma solidity ^0.5.0;\\n\\n/**\\n * @dev Interface of the BEP20 standard as defined in the EIP. Does not include\\n * the optional functions; to access them see {BEP20Detailed}.\\n */\\ninterface IBEP20 {\\n    /**\\n     * @dev Returns the amount of tokens in existence.\\n     */\\n    function totalSupply() external view returns (uint256);\\n\\n    /**\\n     * @dev Returns the amount of tokens owned by `account`.\\n     */\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    /**\\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Returns the remaining number of tokens that `spender` will be\\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n     * zero by default.\\n     *\\n     * This value changes when {approve} or {transferFrom} are called.\\n     */\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    /**\\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n     * that someone may use both the old and the new allowance by unfortunate\\n     * transaction ordering. One possible solution to mitigate this race\\n     * condition is to first reduce the spender's allowance to 0 and set the\\n     * desired value afterwards:\\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n     *\\n     * Emits an {Approval} event.\\n     */\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n     * allowance mechanism. `amount` is then deducted from the caller's\\n     * allowance.\\n     *\\n     * Returns a boolean value indicating whether the operation succeeded.\\n     *\\n     * Emits a {Transfer} event.\\n     */\\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n    /**\\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n     * another (`to`).\\n     *\\n     * Note that `value` may be zero.\\n     */\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    /**\\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n     * a call to {approve}. `value` is the new allowance.\\n     */\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x839b08895eb1ad83502d3631e8e9e3a856d2a8c63c46f070d604af7b26c62c07\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeBEP20.sol\":{\"content\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"./SafeMath.sol\\\";\\nimport \\\"./IBEP20.sol\\\";\\nimport \\\"./Address.sol\\\";\\n\\n/**\\n * @title SafeBEP20\\n * @dev Wrappers around BEP20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeBEP20 for BEP20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeBEP20 {\\n    using SafeMath for uint256;\\n    using Address for address;\\n\\n    function safeTransfer(IBEP20 token, address to, uint256 value) internal {\\n        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n    }\\n\\n    function safeTransferFrom(IBEP20 token, address from, address to, uint256 value) internal {\\n        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n    }\\n\\n    function safeApprove(IBEP20 token, address spender, uint256 value) internal {\\n        // safeApprove should only be called when setting an initial allowance,\\n        // or when resetting it to zero. To increase and decrease it, use\\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n        // solhint-disable-next-line max-line-length\\n        require(\\n            (value == 0) || (token.allowance(address(this), spender) == 0),\\n            \\\"SafeBEP20: approve from non-zero to non-zero allowance\\\"\\n        );\\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n    }\\n\\n    function safeIncreaseAllowance(IBEP20 token, address spender, uint256 value) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender).add(value);\\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    function safeDecreaseAllowance(IBEP20 token, address spender, uint256 value) internal {\\n        uint256 newAllowance = token.allowance(address(this), spender).sub(\\n            value,\\n            \\\"SafeBEP20: decreased allowance below zero\\\"\\n        );\\n        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n    }\\n\\n    /**\\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\\n     * @param token The token targeted by the call.\\n     * @param data The call data (encoded using abi.encode or one of its variants).\\n     */\\n    function callOptionalReturn(IBEP20 token, bytes memory data) private {\\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n        // we're implementing it ourselves.\\n\\n        // A Solidity high level call has three parts:\\n        //  1. The target address is checked to verify it contains contract code\\n        //  2. The call itself is made, and success asserted\\n        //  3. The return value is decoded, which in turn checks the size of the returned data.\\n        // solhint-disable-next-line max-line-length\\n        require(address(token).isContract(), \\\"SafeBEP20: call to non-contract\\\");\\n\\n        // solhint-disable-next-line avoid-low-level-calls\\n        (bool success, bytes memory returndata) = address(token).call(data);\\n        require(success, \\\"SafeBEP20: low-level call failed\\\");\\n\\n        if (returndata.length > 0) {\\n            // Return data is optional\\n            // solhint-disable-next-line max-line-length\\n            require(abi.decode(returndata, (bool)), \\\"SafeBEP20: BEP20 operation did not succeed\\\");\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x540ef6ddc47232a59d3ab0e95537f7a7d1c8a36f8dba315b010e60c6487bd768\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}}},"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol":{"SafeMath":{"abi":[],"devdoc":{"details":"Wrappers over Solidity's arithmetic operations with added overflow checks. * Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. * Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.","methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"60556023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158202534c9887bb4ffe58e9c75abf931275c13d3d40b19d83a5e8c39021310a9d9b064736f6c63430005100032","opcodes":"PUSH1 0x55 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0x25 CALLVALUE 0xC9 DUP9 PUSH28 0xB4FFE58E9C75ABF931275C13D3D40B19D83A5E8C39021310A9D9B064 PUSH20 0x6F6C634300051000320000000000000000000000 ","sourceMap":"590:5014:9:-;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24"},"deployedBytecode":{"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea265627a7a723158202534c9887bb4ffe58e9c75abf931275c13d3d40b19d83a5e8c39021310a9d9b064736f6c63430005100032","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0x25 CALLVALUE 0xC9 DUP9 PUSH28 0xB4FFE58E9C75ABF931275C13D3D40B19D83A5E8C39021310A9D9B064 PUSH20 0x6F6C634300051000320000000000000000000000 ","sourceMap":"590:5014:9:-;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17000","executionCost":"94","totalCost":"17094"},"internal":{"add(uint256,uint256)":"infinite","add(uint256,uint256,string memory)":"infinite","div(uint256,uint256)":"infinite","div(uint256,uint256,string memory)":"infinite","mod(uint256,uint256)":"infinite","mod(uint256,uint256,string memory)":"infinite","mul(uint256,uint256)":"infinite","sub(uint256,uint256)":"infinite","sub(uint256,uint256,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. * Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. * Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}}},"@venusprotocol/venus-protocol/contracts/test/BEP20.sol":{"BEP20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":\"BEP20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}},"BEP20Base":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"devdoc":{"methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":\"BEP20Base\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}},"BEP20Harness":{"abi":[{"inputs":[{"internalType":"uint256","name":"_initialAmount","type":"uint256"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"uint8","name":"_decimalUnits","type":"uint8"},{"internalType":"string","name":"_tokenSymbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"failTransferFromAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"failTransferToAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"harnessSetBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"bool","name":"_fail","type":"bool"}],"name":"harnessSetFailTransferFromAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"bool","name":"_fail","type":"bool"}],"name":"harnessSetFailTransferToAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162000c8238038062000c82833981810160405260808110156200003757600080fd5b8151602083018051604051929492938301929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82516401000000008111828201881017156200009057600080fd5b82525081516020918201929091019080838360005b83811015620000bf578181015183820152602001620000a5565b50505050905090810190601f168015620000ed5780820380516001836020036101000a031916815260200191505b506040818152602083015192018051929491939192846401000000008211156200011657600080fd5b9083019060208201858111156200012c57600080fd5b82516401000000008111828201881017156200014757600080fd5b82525081516020918201929091019080838360005b83811015620001765781810151838201526020016200015c565b50505050905090810190601f168015620001a45780820380516001836020036101000a031916815260200191505b50604090815260038890553360009081526005602090815291812089905587518995508894508793508692620001df92919086019062000218565b508051620001f590600190602084019062000218565b50506002805460ff191660ff9290921691909117905550620002bd945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025b57805160ff19168380011785556200028b565b828001600101855582156200028b579182015b828111156200028b5782518255916020019190600101906200026e565b50620002999291506200029d565b5090565b620002ba91905b80821115620002995760008155600101620002a4565b90565b6109b580620002cd6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146102c4578063d401c293146102f0578063d9a7eb701461031e578063dd62ed3e1461034a576100ea565b806370a082311461026657806395d89b411461028c57806398d43e0614610294576100ea565b806323b872dd116100c857806323b872dd146101c6578063313ce567146101fc5780634135cd751461021a5780635521ade214610240576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101ac575b600080fd5b6100f7610378565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101986004803603604081101561018257600080fd5b506001600160a01b038135169060200135610406565b604080519115158252519081900360200190f35b6101b461046d565b60408051918252519081900360200190f35b610198600480360360608110156101dc57600080fd5b506001600160a01b03813581169160208101359091169060400135610473565b61020461062a565b6040805160ff9092168252519081900360200190f35b6101986004803603602081101561023057600080fd5b50356001600160a01b0316610633565b6101986004803603602081101561025657600080fd5b50356001600160a01b0316610648565b6101b46004803603602081101561027c57600080fd5b50356001600160a01b031661065d565b6100f761066f565b6102c2600480360360408110156102aa57600080fd5b506001600160a01b03813516906020013515156106c9565b005b610198600480360360408110156102da57600080fd5b506001600160a01b0381351690602001356106f4565b6102c26004803603604081101561030657600080fd5b506001600160a01b0381351690602001351515610827565b6102c26004803603604081101561033457600080fd5b506001600160a01b038135169060200135610852565b6101b46004803603604081101561036057600080fd5b506001600160a01b038135811691602001351661086e565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103fe5780601f106103d3576101008083540402835291602001916103fe565b820191906000526020600020905b8154815290600101906020018083116103e157829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60035481565b6001600160a01b03831660009081526006602052604081205460ff161561049c57506000610623565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526004825283812033825290915291909120546104fe91849063ffffffff61088b16565b6001600160a01b0385166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b8183015292825260059052919091205461056991849063ffffffff61088b16565b6001600160a01b0380861660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b8183015293881683525291909120546105c891849063ffffffff61092216565b6001600160a01b0380851660008181526005602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060015b9392505050565b60025460ff1681565b60066020526000908152604090205460ff1681565b60076020526000908152604090205460ff1681565b60056020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103fe5780601f106103d3576101008083540402835291602001916103fe565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b03821660009081526007602052604081205460ff161561071d57506000610467565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091523360009081526005909152919091205461076c91849063ffffffff61088b16565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b0388168452919052919020546107c991849063ffffffff61092216565b6001600160a01b0384166000818152600560209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03909116600090815260056020526040902055565b600460209081526000928352604080842090915290825290205481565b6000818484111561091a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108df5781810151838201526020016108c7565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156109775760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108df5781810151838201526020016108c7565b5094935050505056fea265627a7a72315820583b05875133d591bf68bd17f46ad587a2640368529834081dbf58904c8d5d7964736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xC82 CODESIZE SUB DUP1 PUSH3 0xC82 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xBF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xA5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xED JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD DUP1 MLOAD SWAP3 SWAP5 SWAP2 SWAP4 SWAP2 SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x176 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x15C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1A4 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP9 SWAP1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE SWAP2 DUP2 KECCAK256 DUP10 SWAP1 SSTORE DUP8 MLOAD DUP10 SWAP6 POP DUP9 SWAP5 POP DUP8 SWAP4 POP DUP7 SWAP3 PUSH3 0x1DF SWAP3 SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH3 0x218 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x1F5 SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x218 JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x2BD SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x25B JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x28B JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x28B JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x28B JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x26E JUMP JUMPDEST POP PUSH3 0x299 SWAP3 SWAP2 POP PUSH3 0x29D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x2BA SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x299 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x2A4 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x9B5 DUP1 PUSH3 0x2CD PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0xD401C293 EQ PUSH2 0x2F0 JUMPI DUP1 PUSH4 0xD9A7EB70 EQ PUSH2 0x31E JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x34A JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x266 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x28C JUMPI DUP1 PUSH4 0x98D43E06 EQ PUSH2 0x294 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0x4135CD75 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0x5521ADE2 EQ PUSH2 0x240 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1AC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x378 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x131 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x119 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x15E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x406 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B4 PUSH2 0x46D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x473 JUMP JUMPDEST PUSH2 0x204 PUSH2 0x62A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x633 JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x648 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x27C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x65D JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x66F JUMP JUMPDEST PUSH2 0x2C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x6C9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6F4 JUMP JUMPDEST PUSH2 0x2C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x827 JUMP JUMPDEST PUSH2 0x2C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x852 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x86E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3FE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3D3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3FE JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3E1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x49C JUMPI POP PUSH1 0x0 PUSH2 0x623 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4FE SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x569 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP9 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x5C8 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP9 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3FE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3D3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x71D JUMPI POP PUSH1 0x0 PUSH2 0x467 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x76C SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x7C9 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x90C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x977 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PC EXTCODESIZE SDIV DUP8 MLOAD CALLER 0xD5 SWAP2 0xBF PUSH9 0xBD17F46AD587A26403 PUSH9 0x529834081DBF58904C DUP14 0x5D PUSH26 0x64736F6C63430005100032000000000000000000000000000000 ","sourceMap":"4540:1955:10:-;;;4891:229;8:9:-1;5:2;;;30:1;27;20:12;5:2;4891:229:10;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4891:229:10;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;4891:229:10;;420:4:-1;411:14;;;;4891:229:10;;;;;411:14:-1;4891:229:10;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4891:229:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4891:229:10;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;4891:229:10;;420:4:-1;411:14;;;;4891:229:10;;;;;411:14:-1;4891:229:10;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4891:229:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4891:229:10;;;;1664:11;:28;;;1712:10;1702:21;;;;:9;:21;;;;;;;:38;;;1750:17;;5061:14;;-1:-1:-1;5077:10:10;;-1:-1:-1;5089:13:10;;-1:-1:-1;5104:12:10;;1750:17;;1702:21;1750:17;;;;;:::i;:::-;-1:-1:-1;1777:21:10;;;;:6;;:21;;;;;:::i;:::-;-1:-1:-1;;1808:8:10;:24;;-1:-1:-1;;1808:24:10;;;;;;;;;;;;-1:-1:-1;4540:1955:10;;-1:-1:-1;;;;;4540:1955:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4540:1955:10;;;-1:-1:-1;4540:1955:10;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a9059cbb11610066578063a9059cbb146102c4578063d401c293146102f0578063d9a7eb701461031e578063dd62ed3e1461034a576100ea565b806370a082311461026657806395d89b411461028c57806398d43e0614610294576100ea565b806323b872dd116100c857806323b872dd146101c6578063313ce567146101fc5780634135cd751461021a5780635521ade214610240576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101ac575b600080fd5b6100f7610378565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101986004803603604081101561018257600080fd5b506001600160a01b038135169060200135610406565b604080519115158252519081900360200190f35b6101b461046d565b60408051918252519081900360200190f35b610198600480360360608110156101dc57600080fd5b506001600160a01b03813581169160208101359091169060400135610473565b61020461062a565b6040805160ff9092168252519081900360200190f35b6101986004803603602081101561023057600080fd5b50356001600160a01b0316610633565b6101986004803603602081101561025657600080fd5b50356001600160a01b0316610648565b6101b46004803603602081101561027c57600080fd5b50356001600160a01b031661065d565b6100f761066f565b6102c2600480360360408110156102aa57600080fd5b506001600160a01b03813516906020013515156106c9565b005b610198600480360360408110156102da57600080fd5b506001600160a01b0381351690602001356106f4565b6102c26004803603604081101561030657600080fd5b506001600160a01b0381351690602001351515610827565b6102c26004803603604081101561033457600080fd5b506001600160a01b038135169060200135610852565b6101b46004803603604081101561036057600080fd5b506001600160a01b038135811691602001351661086e565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103fe5780601f106103d3576101008083540402835291602001916103fe565b820191906000526020600020905b8154815290600101906020018083116103e157829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60035481565b6001600160a01b03831660009081526006602052604081205460ff161561049c57506000610623565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526004825283812033825290915291909120546104fe91849063ffffffff61088b16565b6001600160a01b0385166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b8183015292825260059052919091205461056991849063ffffffff61088b16565b6001600160a01b0380861660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b8183015293881683525291909120546105c891849063ffffffff61092216565b6001600160a01b0380851660008181526005602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060015b9392505050565b60025460ff1681565b60066020526000908152604090205460ff1681565b60076020526000908152604090205460ff1681565b60056020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103fe5780601f106103d3576101008083540402835291602001916103fe565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6001600160a01b03821660009081526007602052604081205460ff161561071d57506000610467565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091523360009081526005909152919091205461076c91849063ffffffff61088b16565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b0388168452919052919020546107c991849063ffffffff61092216565b6001600160a01b0384166000818152600560209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03909116600090815260056020526040902055565b600460209081526000928352604080842090915290825290205481565b6000818484111561091a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108df5781810151838201526020016108c7565b50505050905090810190601f16801561090c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156109775760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108df5781810151838201526020016108c7565b5094935050505056fea265627a7a72315820583b05875133d591bf68bd17f46ad587a2640368529834081dbf58904c8d5d7964736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0xD401C293 EQ PUSH2 0x2F0 JUMPI DUP1 PUSH4 0xD9A7EB70 EQ PUSH2 0x31E JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x34A JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x266 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x28C JUMPI DUP1 PUSH4 0x98D43E06 EQ PUSH2 0x294 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1C6 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0x4135CD75 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0x5521ADE2 EQ PUSH2 0x240 JUMPI PUSH2 0xEA JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x16C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1AC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x378 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x131 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x119 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x15E JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x406 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1B4 PUSH2 0x46D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x473 JUMP JUMPDEST PUSH2 0x204 PUSH2 0x62A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x633 JUMP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x648 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x27C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x65D JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x66F JUMP JUMPDEST PUSH2 0x2C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x6C9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x198 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x6F4 JUMP JUMPDEST PUSH2 0x2C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x827 JUMP JUMPDEST PUSH2 0x2C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x334 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x852 JUMP JUMPDEST PUSH2 0x1B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x86E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3FE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3D3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3FE JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3E1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x49C JUMPI POP PUSH1 0x0 PUSH2 0x623 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4FE SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x569 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP9 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x5C8 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP9 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3FE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3D3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x71D JUMPI POP PUSH1 0x0 PUSH2 0x467 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x76C SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x88B AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x7C9 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x922 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x91A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x90C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x977 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x8DF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x8C7 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PC EXTCODESIZE SDIV DUP8 MLOAD CALLER 0xD5 SWAP2 0xBF PUSH9 0xBD17F46AD587A26403 PUSH9 0x529834081DBF58904C DUP14 0x5D PUSH26 0x64736F6C63430005100032000000000000000000000000000000 ","sourceMap":"4540:1955:10:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4540:1955:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1268:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1268:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2578:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2578:206:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1345:26;;;:::i;:::-;;;;;;;;;;;;;;;;5955:538;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5955:538:10;;;;;;;;;;;;;;;;;:::i;1318:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4689:57;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4689:57:10;-1:-1:-1;;;;;4689:57:10;;:::i;4829:55::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4829:55:10;-1:-1:-1;;;;;4829:55:10;;:::i;1447:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1447:44:10;-1:-1:-1;;;;;1447:44:10;;:::i;1292:20::-;;;:::i;5126:130::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5126:130:10;;;;;;;;;;:::i;:::-;;5512:437;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5512:437:10;;;;;;;;:::i;5262:126::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5262:126:10;;;;;;;;;;:::i;5394:112::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5394:112:10;;;;;;;;:::i;1377:64::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1377:64:10;;;;;;;;;;:::i;1268:18::-;;;;;;;;;;;;;;;-1:-1:-1;;1268:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2578:206::-;2673:10;2647:4;2663:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2663:31:10;;;;;;;;;;;:40;;;2718:38;;;;;;;2647:4;;2663:31;;2673:10;;2718:38;;;;;;;;-1:-1:-1;2773:4:10;2578:206;;;;;:::o;1345:26::-;;;;:::o;5955:538::-;-1:-1:-1;;;;;6103:30:10;;6037:12;6103:30;;;:25;:30;;;;;;;;6099:73;;;-1:-1:-1;6156:5:10;6149:12;;6099:73;6210:64;;;;;;;;;;;-1:-1:-1;;;6210:64:10;;;;;;;;-1:-1:-1;;;;;6210:14:10;;-1:-1:-1;6210:14:10;;;:9;:14;;;;;6225:10;6210:26;;;;;;;;;;:64;;6241:6;;6210:64;:30;:64;:::i;:::-;-1:-1:-1;;;;;6181:14:10;;;;;;:9;:14;;;;;;;;6196:10;6181:26;;;;;;;:93;;;;6301:50;;;;;;;;;;-1:-1:-1;;;6301:50:10;;;;:14;;;:9;:14;;;;;;;:50;;6320:6;;6301:50;:18;:50;:::i;:::-;-1:-1:-1;;;;;6284:14:10;;;;;;;:9;:14;;;;;;;;:67;;;;6378:46;;;;;;;;;;-1:-1:-1;;;6378:46:10;;;;:14;;;;;;;;;;;:46;;6397:6;;6378:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;6361:14:10;;;;;;;:9;:14;;;;;;;;;:63;;;;6439:26;;;;;;;6361:14;;6439:26;;;;;;;;;;;;;-1:-1:-1;6482:4:10;5955:538;;;;;;:::o;1318:21::-;;;;;;:::o;4689:57::-;;;;;;;;;;;;;;;:::o;4829:55::-;;;;;;;;;;;;;;;:::o;1447:44::-;;;;;;;;;;;;;:::o;1292:20::-;;;;;;;;;;;;;;;-1:-1:-1;;1292:20:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5126:130;-1:-1:-1;;;;;5211:30:10;;;;;;;;:25;:30;;;;;:38;;-1:-1:-1;;5211:38:10;;;;;;;;;;5126:130::o;5512:437::-;-1:-1:-1;;;;;5643:28:10;;5577:12;5643:28;;;:23;:28;;;;;;;;5639:71;;;-1:-1:-1;5694:5:10;5687:12;;5639:71;5743:57;;;;;;;;;;;-1:-1:-1;;;5743:57:10;;;;;;;;5753:10;-1:-1:-1;5743:21:10;;;:9;:21;;;;;;;;:57;;5769:6;;5743:57;:25;:57;:::i;:::-;5729:10;5719:21;;;;:9;:21;;;;;;;;:81;;;;5827:46;;;;;;;;;;-1:-1:-1;;;5827:46:10;;;;-1:-1:-1;;;;;5827:14:10;;;;;;;;;;;:46;;5846:6;;5827:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;5810:14:10;;;;;;:9;:14;;;;;;;;;:63;;;;5888:33;;;;;;;5810:14;;5897:10;;5888:33;;;;;;;;;;-1:-1:-1;5938:4:10;5512:437;;;;:::o;5262:126::-;-1:-1:-1;;;;;5345:28:10;;;;;;;;:23;:28;;;;;:36;;-1:-1:-1;;5345:36:10;;;;;;;;;;5262:126::o;5394:112::-;-1:-1:-1;;;;;5470:19:10;;;;;;;:9;:19;;;;;:29;5394:112::o;1377:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2119:187:9:-;2205:7;2240:12;2232:6;;;;2224:29;;;;-1:-1:-1;;;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2275:5:9;;;2119:187::o;1250:::-;1336:7;1367:5;;;1398:12;1390:6;;;;1382:29;;;;-1:-1:-1;;;1382:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1382:29:9;-1:-1:-1;1429:1:9;1250:187;-1:-1:-1;;;;1250:187:9:o"},"gasEstimates":{"creation":{"codeDepositCost":"497000","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"1305","approve(address,uint256)":"22324","balanceOf(address)":"1147","decimals()":"1058","failTransferFromAddresses(address)":"1203","failTransferToAddresses(address)":"1225","harnessSetBalance(address,uint256)":"20378","harnessSetFailTransferFromAddress(address,bool)":"21224","harnessSetFailTransferToAddress(address,bool)":"21201","name()":"infinite","symbol()":"infinite","totalSupply()":"1066","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","failTransferFromAddresses(address)":"4135cd75","failTransferToAddresses(address)":"5521ade2","harnessSetBalance(address,uint256)":"d9a7eb70","harnessSetFailTransferFromAddress(address,bool)":"98d43e06","harnessSetFailTransferToAddress(address,bool)":"d401c293","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenName\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimalUnits\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"failTransferFromAddresses\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"failTransferToAddresses\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"harnessSetBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_fail\",\"type\":\"bool\"}],\"name\":\"harnessSetFailTransferFromAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_fail\",\"type\":\"bool\"}],\"name\":\"harnessSetFailTransferToAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":\"BEP20Harness\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2859,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:BEP20Harness","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":2861,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:BEP20Harness","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":2863,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:BEP20Harness","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":2865,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:BEP20Harness","label":"totalSupply","offset":0,"slot":"3","type":"t_uint256"},{"astId":2871,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:BEP20Harness","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":2875,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:BEP20Harness","label":"balanceOf","offset":0,"slot":"5","type":"t_mapping(t_address,t_uint256)"},{"astId":3238,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:BEP20Harness","label":"failTransferFromAddresses","offset":0,"slot":"6","type":"t_mapping(t_address,t_bool)"},{"astId":3242,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:BEP20Harness","label":"failTransferToAddresses","offset":0,"slot":"7","type":"t_mapping(t_address,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"methods":{}}},"BEP20NS":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"methods":{}},"evm":{"bytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":\"BEP20NS\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"methods":{}}},"NonStandardToken":{"abi":[{"inputs":[{"internalType":"uint256","name":"_initialAmount","type":"uint256"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"uint8","name":"_decimalUnits","type":"uint8"},{"internalType":"string","name":"_tokenSymbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Version of BEP20 with no return values for `transfer` and `transferFrom` See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca","methods":{},"title":"Non-Standard BEP20 token"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50604051610a30380380610a308339818101604052608081101561003357600080fd5b81516020830180516040519294929383019291908464010000000082111561005a57600080fd5b90830190602082018581111561006f57600080fd5b825164010000000081118282018810171561008957600080fd5b82525081516020918201929091019080838360005b838110156100b657818101518382015260200161009e565b50505050905090810190601f1680156100e35780820380516001836020036101000a031916815260200191505b5060408181526020830151920180519294919391928464010000000082111561010b57600080fd5b90830190602082018581111561012057600080fd5b825164010000000081118282018810171561013a57600080fd5b82525081516020918201929091019080838360005b8381101561016757818101518382015260200161014f565b50505050905090810190601f1680156101945780820380516001836020036101000a031916815260200191505b50604090815260038890553360009081526005602090815291812089905587516101c6955090935090870191506101f8565b5080516101da9060029060208401906101f8565b50506001805460ff191660ff92909216919091179055506102939050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023957805160ff1916838001178555610266565b82800160010185558215610266579182015b8281111561026657825182559160200191906001019061024b565b50610272929150610276565b5090565b61029091905b80821115610272576000815560010161027c565b90565b61078e806102a26000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce567146101a757806370a08231146101c557806395d89b41146101eb578063a9059cbb146101f3578063dd62ed3e1461021f57610093565b806306fdde0314610098578063095ea7b31461011557806318160ddd1461015557806323b872dd1461016f575b600080fd5b6100a061024d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101416004803603604081101561012b57600080fd5b506001600160a01b0381351690602001356102db565b604080519115158252519081900360200190f35b61015d610341565b60408051918252519081900360200190f35b6101a56004803603606081101561018557600080fd5b506001600160a01b03813581169160208101359091169060400135610347565b005b6101af6104cf565b6040805160ff9092168252519081900360200190f35b61015d600480360360208110156101db57600080fd5b50356001600160a01b03166104d8565b6100a06104ea565b6101a56004803603604081101561020957600080fd5b506001600160a01b038135169060200135610542565b61015d6004803603604081101561023557600080fd5b506001600160a01b0381358116916020013516610647565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102d35780601f106102a8576101008083540402835291602001916102d3565b820191906000526020600020905b8154815290600101906020018083116102b657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035481565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b03861660009081526004825283812033825290915291909120546103a991839063ffffffff61066416565b6001600160a01b0384166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b8183015292825260059052919091205461041491839063ffffffff61066416565b6001600160a01b0380851660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b81830152938716835252919091205461047391839063ffffffff6106fb16565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60015460ff1681565b60056020526000908152604090205481565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156102d35780601f106102a8576101008083540402835291602001916102d3565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091523360009081526005909152919091205461059191839063ffffffff61066416565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b0387168452919052919020546105ee91839063ffffffff6106fb16565b6001600160a01b0383166000818152600560209081526040918290209390935580518481529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600460209081526000928352604080842090915290825290205481565b600081848411156106f35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106b85781810151838201526020016106a0565b50505050905090810190601f1680156106e55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156107505760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156106b85781810151838201526020016106a0565b5094935050505056fea265627a7a723158200dc064cc1f2d968c1ac4c4b5ef0a2e6a58c9c94c8f238b4873f96a6df29c920264736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xA30 CODESIZE SUB DUP1 PUSH2 0xA30 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD DUP1 MLOAD SWAP3 SWAP5 SWAP2 SWAP4 SWAP2 SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x167 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x194 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP9 SWAP1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE SWAP2 DUP2 KECCAK256 DUP10 SWAP1 SSTORE DUP8 MLOAD PUSH2 0x1C6 SWAP6 POP SWAP1 SWAP4 POP SWAP1 DUP8 ADD SWAP2 POP PUSH2 0x1F8 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1DA SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1F8 JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0x293 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x239 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x266 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x266 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x266 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x24B JUMP JUMPDEST POP PUSH2 0x272 SWAP3 SWAP2 POP PUSH2 0x276 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x290 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x272 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x27C JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x78E DUP1 PUSH2 0x2A2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x21F JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x16F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x24D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x107 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x2DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15D PUSH2 0x341 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x347 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1AF PUSH2 0x4CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4D8 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x4EA JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x15D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x647 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2B6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x3A9 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x664 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x414 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x664 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP8 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x473 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP4 AND DUP5 SWAP1 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x591 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x664 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x5EE SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x6F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6B8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6A0 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x6E5 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x6B8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6A0 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xD 0xC0 PUSH5 0xCC1F2D968C BYTE 0xC4 0xC4 0xB5 0xEF EXP 0x2E PUSH11 0x58C9C94C8F238B4873F96A PUSH14 0xF29C920264736F6C634300051000 ORIGIN ","sourceMap":"3016:1522:10:-;;;3322:341;8:9:-1;5:2;;;30:1;27;20:12;5:2;3322:341:10;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3322:341:10;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;3322:341:10;;420:4:-1;411:14;;;;3322:341:10;;;;;411:14:-1;3322:341:10;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3322:341:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3322:341:10;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;3322:341:10;;420:4:-1;411:14;;;;3322:341:10;;;;;411:14:-1;3322:341:10;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3322:341:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3322:341:10;;;;3488:11;:28;;;3536:10;3526:21;;;;:9;:21;;;;;;;:38;;;3574:17;;;;-1:-1:-1;3526:21:10;;-1:-1:-1;3574:17:10;;;;-1:-1:-1;3574:17:10;:::i;:::-;-1:-1:-1;3601:21:10;;;;:6;;:21;;;;;:::i;:::-;-1:-1:-1;;3632:8:10;:24;;-1:-1:-1;;3632:24:10;;;;;;;;;;;;-1:-1:-1;3016:1522:10;;-1:-1:-1;3016:1522:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3016:1522:10;;;-1:-1:-1;3016:1522:10;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce567146101a757806370a08231146101c557806395d89b41146101eb578063a9059cbb146101f3578063dd62ed3e1461021f57610093565b806306fdde0314610098578063095ea7b31461011557806318160ddd1461015557806323b872dd1461016f575b600080fd5b6100a061024d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101416004803603604081101561012b57600080fd5b506001600160a01b0381351690602001356102db565b604080519115158252519081900360200190f35b61015d610341565b60408051918252519081900360200190f35b6101a56004803603606081101561018557600080fd5b506001600160a01b03813581169160208101359091169060400135610347565b005b6101af6104cf565b6040805160ff9092168252519081900360200190f35b61015d600480360360208110156101db57600080fd5b50356001600160a01b03166104d8565b6100a06104ea565b6101a56004803603604081101561020957600080fd5b506001600160a01b038135169060200135610542565b61015d6004803603604081101561023557600080fd5b506001600160a01b0381358116916020013516610647565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102d35780601f106102a8576101008083540402835291602001916102d3565b820191906000526020600020905b8154815290600101906020018083116102b657829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035481565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b03861660009081526004825283812033825290915291909120546103a991839063ffffffff61066416565b6001600160a01b0384166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b8183015292825260059052919091205461041491839063ffffffff61066416565b6001600160a01b0380851660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b81830152938716835252919091205461047391839063ffffffff6106fb16565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60015460ff1681565b60056020526000908152604090205481565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156102d35780601f106102a8576101008083540402835291602001916102d3565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091523360009081526005909152919091205461059191839063ffffffff61066416565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b0387168452919052919020546105ee91839063ffffffff6106fb16565b6001600160a01b0383166000818152600560209081526040918290209390935580518481529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600460209081526000928352604080842090915290825290205481565b600081848411156106f35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106b85781810151838201526020016106a0565b50505050905090810190601f1680156106e55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156107505760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156106b85781810151838201526020016106a0565b5094935050505056fea265627a7a723158200dc064cc1f2d968c1ac4c4b5ef0a2e6a58c9c94c8f238b4873f96a6df29c920264736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x21F JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x16F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x24D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x107 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x2DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15D PUSH2 0x341 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x347 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1AF PUSH2 0x4CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4D8 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x4EA JUMP JUMPDEST PUSH2 0x1A5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x542 JUMP JUMPDEST PUSH2 0x15D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x647 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2B6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x3A9 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x664 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x414 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x664 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP8 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x473 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP4 AND DUP5 SWAP1 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x591 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x664 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x5EE SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x6F3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6B8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6A0 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x6E5 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x750 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x6B8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6A0 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xD 0xC0 PUSH5 0xCC1F2D968C BYTE 0xC4 0xC4 0xB5 0xEF EXP 0x2E PUSH11 0x58C9C94C8F238B4873F96A PUSH14 0xF29C920264736F6C634300051000 ORIGIN ","sourceMap":"3016:1522:10:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3016:1522:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3092:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3092:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4330:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4330:206:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3169:26;;;:::i;:::-;;;;;;;;;;;;;;;;3950:374;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3950:374:10;;;;;;;;;;;;;;;;;:::i;:::-;;3116:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3271:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3271:44:10;-1:-1:-1;;;;;3271:44:10;;:::i;3143:20::-;;;:::i;3669:275::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3669:275:10;;;;;;;;:::i;3201:64::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3201:64:10;;;;;;;;;;:::i;3092:18::-;;;;;;;;;;;;;;;-1:-1:-1;;3092:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4330:206::-;4425:10;4399:4;4415:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;4415:31:10;;;;;;;;;;;:40;;;4470:38;;;;;;;4399:4;;4415:31;;4425:10;;4470:38;;;;;;;;-1:-1:-1;4525:4:10;4330:206;;;;:::o;3169:26::-;;;;:::o;3950:374::-;4062:64;;;;;;;;;;;-1:-1:-1;;;4062:64:10;;;;;;;;-1:-1:-1;;;;;4062:14:10;;-1:-1:-1;4062:14:10;;;:9;:14;;;;;4077:10;4062:26;;;;;;;;;;:64;;4093:6;;4062:64;:30;:64;:::i;:::-;-1:-1:-1;;;;;4033:14:10;;;;;;:9;:14;;;;;;;;4048:10;4033:26;;;;;;;:93;;;;4153:50;;;;;;;;;;-1:-1:-1;;;4153:50:10;;;;:14;;;:9;:14;;;;;;;:50;;4172:6;;4153:50;:18;:50;:::i;:::-;-1:-1:-1;;;;;4136:14:10;;;;;;;:9;:14;;;;;;;;:67;;;;4230:46;;;;;;;;;;-1:-1:-1;;;4230:46:10;;;;:14;;;;;;;;;;;:46;;4249:6;;4230:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;4213:14:10;;;;;;;:9;:14;;;;;;;;;:63;;;;4291:26;;;;;;;4213:14;;4291:26;;;;;;;;;;;;;3950:374;;;:::o;3116:21::-;;;;;;:::o;3271:44::-;;;;;;;;;;;;;:::o;3143:20::-;;;;;;;;;;;;;;-1:-1:-1;;3143:20:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3669:275;3759:57;;;;;;;;;;;-1:-1:-1;;;3759:57:10;;;;;;;;3769:10;-1:-1:-1;3759:21:10;;;:9;:21;;;;;;;;:57;;3785:6;;3759:57;:25;:57;:::i;:::-;3745:10;3735:21;;;;:9;:21;;;;;;;;:81;;;;3843:46;;;;;;;;;;-1:-1:-1;;;3843:46:10;;;;-1:-1:-1;;;;;3843:14:10;;;;;;;;;;;:46;;3862:6;;3843:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;3826:14:10;;;;;;:9;:14;;;;;;;;;:63;;;;3904:33;;;;;;;3826:14;;3913:10;;3904:33;;;;;;;;;;3669:275;;:::o;3201:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2119:187:9:-;2205:7;2240:12;2232:6;;;;2224:29;;;;-1:-1:-1;;;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2275:5:9;;;2119:187::o;1250:::-;1336:7;1367:5;;;1398:12;1390:6;;;;1382:29;;;;-1:-1:-1;;;1382:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1382:29:9;-1:-1:-1;1429:1:9;1250:187;-1:-1:-1;;;;1250:187:9:o"},"gasEstimates":{"creation":{"codeDepositCost":"386800","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"1305","approve(address,uint256)":"22300","balanceOf(address)":"1146","decimals()":"1013","name()":"infinite","symbol()":"infinite","totalSupply()":"1043","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenName\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimalUnits\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Version of BEP20 with no return values for `transfer` and `transferFrom` See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\",\"methods\":{},\"title\":\"Non-Standard BEP20 token\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":\"NonStandardToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3053,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:NonStandardToken","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":3055,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:NonStandardToken","label":"decimals","offset":0,"slot":"1","type":"t_uint8"},{"astId":3057,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:NonStandardToken","label":"symbol","offset":0,"slot":"2","type":"t_string_storage"},{"astId":3059,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:NonStandardToken","label":"totalSupply","offset":0,"slot":"3","type":"t_uint256"},{"astId":3065,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:NonStandardToken","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":3069,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:NonStandardToken","label":"balanceOf","offset":0,"slot":"5","type":"t_mapping(t_address,t_uint256)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"methods":{}}},"StandardToken":{"abi":[{"inputs":[{"internalType":"uint256","name":"_initialAmount","type":"uint256"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"uint8","name":"_decimalUnits","type":"uint8"},{"internalType":"string","name":"_tokenSymbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Implementation of the basic standard token. See https://github.com/ethereum/EIPs/issues/20","methods":{},"title":"Standard BEP20 token"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50604051610a38380380610a388339818101604052608081101561003357600080fd5b81516020830180516040519294929383019291908464010000000082111561005a57600080fd5b90830190602082018581111561006f57600080fd5b825164010000000081118282018810171561008957600080fd5b82525081516020918201929091019080838360005b838110156100b657818101518382015260200161009e565b50505050905090810190601f1680156100e35780820380516001836020036101000a031916815260200191505b5060408181526020830151920180519294919391928464010000000082111561010b57600080fd5b90830190602082018581111561012057600080fd5b825164010000000081118282018810171561013a57600080fd5b82525081516020918201929091019080838360005b8381101561016757818101518382015260200161014f565b50505050905090810190601f1680156101945780820380516001836020036101000a031916815260200191505b50604090815260038890553360009081526005602090815291812089905587516101c6955090935090870191506101f8565b5080516101da9060019060208401906101f8565b50506002805460ff191660ff92909216919091179055506102939050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023957805160ff1916838001178555610266565b82800160010185558215610266579182015b8281111561026657825182559160200191906001019061024b565b50610272929150610276565b5090565b61029091905b80821115610272576000815560010161027c565b90565b610796806102a26000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce567146101a557806370a08231146101c357806395d89b41146101e9578063a9059cbb146101f1578063dd62ed3e1461021d57610093565b806306fdde0314610098578063095ea7b31461011557806318160ddd1461015557806323b872dd1461016f575b600080fd5b6100a061024b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101416004803603604081101561012b57600080fd5b506001600160a01b0381351690602001356102d9565b604080519115158252519081900360200190f35b61015d61033f565b60408051918252519081900360200190f35b6101416004803603606081101561018557600080fd5b506001600160a01b03813581169160208101359091169060400135610345565b6101ad6104d1565b6040805160ff9092168252519081900360200190f35b61015d600480360360208110156101d957600080fd5b50356001600160a01b03166104da565b6100a06104ec565b6101416004803603604081101561020757600080fd5b506001600160a01b038135169060200135610546565b61015d6004803603604081101561023357600080fd5b506001600160a01b038135811691602001351661064f565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102d15780601f106102a6576101008083540402835291602001916102d1565b820191906000526020600020905b8154815290600101906020018083116102b457829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035481565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b038616600090815260048252838120338252909152918220546103a691849063ffffffff61066c16565b6001600160a01b0385166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b8183015292825260059052919091205461041191849063ffffffff61066c16565b6001600160a01b0380861660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b81830152938816835252919091205461047091849063ffffffff61070316565b6001600160a01b0380851660008181526005602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60025460ff1681565b60056020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102d15780601f106102a6576101008083540402835291602001916102d1565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b60208083019190915233600090815260059091529182205461059491849063ffffffff61066c16565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b0388168452919052919020546105f191849063ffffffff61070316565b6001600160a01b0384166000818152600560209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b600460209081526000928352604080842090915290825290205481565b600081848411156106fb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106c05781810151838201526020016106a8565b50505050905090810190601f1680156106ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156107585760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156106c05781810151838201526020016106a8565b5094935050505056fea265627a7a7231582089d6fd54c57aab294c1b9306171297a46c3b5b6f71b0313b0f106740799f09e464736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xA38 CODESIZE SUB DUP1 PUSH2 0xA38 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD DUP1 MLOAD SWAP3 SWAP5 SWAP2 SWAP4 SWAP2 SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x167 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x194 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP9 SWAP1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE SWAP2 DUP2 KECCAK256 DUP10 SWAP1 SSTORE DUP8 MLOAD PUSH2 0x1C6 SWAP6 POP SWAP1 SWAP4 POP SWAP1 DUP8 ADD SWAP2 POP PUSH2 0x1F8 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1DA SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1F8 JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0x293 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x239 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x266 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x266 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x266 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x24B JUMP JUMPDEST POP PUSH2 0x272 SWAP3 SWAP2 POP PUSH2 0x276 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x290 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x272 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x27C JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x796 DUP1 PUSH2 0x2A2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x21D JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x16F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x24B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x107 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15D PUSH2 0x33F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x345 JUMP JUMPDEST PUSH2 0x1AD PUSH2 0x4D1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4DA JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x4EC JUMP JUMPDEST PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x546 JUMP JUMPDEST PUSH2 0x15D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x64F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2B4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 DUP3 KECCAK256 SLOAD PUSH2 0x3A6 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x66C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x411 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x66C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP9 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x470 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x703 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP9 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 DUP3 KECCAK256 SLOAD PUSH2 0x594 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x66C AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x5F1 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x703 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x6ED JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x758 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x6C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6A8 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP10 0xD6 REVERT SLOAD 0xC5 PUSH27 0xAB294C1B9306171297A46C3B5B6F71B0313B0F106740799F09E464 PUSH20 0x6F6C634300051000320000000000000000000000 ","sourceMap":"1197:1589:10:-;;;1498:341;8:9:-1;5:2;;;30:1;27;20:12;5:2;1498:341:10;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1498:341:10;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;1498:341:10;;420:4:-1;411:14;;;;1498:341:10;;;;;411:14:-1;1498:341:10;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1498:341:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1498:341:10;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;1498:341:10;;420:4:-1;411:14;;;;1498:341:10;;;;;411:14:-1;1498:341:10;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1498:341:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1498:341:10;;;;1664:11;:28;;;1712:10;1702:21;;;;:9;:21;;;;;;;:38;;;1750:17;;;;-1:-1:-1;1702:21:10;;-1:-1:-1;1750:17:10;;;;-1:-1:-1;1750:17:10;:::i;:::-;-1:-1:-1;1777:21:10;;;;:6;;:21;;;;;:::i;:::-;-1:-1:-1;;1808:8:10;:24;;-1:-1:-1;;1808:24:10;;;;;;;;;;;;-1:-1:-1;1197:1589:10;;-1:-1:-1;1197:1589:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1197:1589:10;;;-1:-1:-1;1197:1589:10;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100935760003560e01c8063313ce56711610066578063313ce567146101a557806370a08231146101c357806395d89b41146101e9578063a9059cbb146101f1578063dd62ed3e1461021d57610093565b806306fdde0314610098578063095ea7b31461011557806318160ddd1461015557806323b872dd1461016f575b600080fd5b6100a061024b565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100da5781810151838201526020016100c2565b50505050905090810190601f1680156101075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101416004803603604081101561012b57600080fd5b506001600160a01b0381351690602001356102d9565b604080519115158252519081900360200190f35b61015d61033f565b60408051918252519081900360200190f35b6101416004803603606081101561018557600080fd5b506001600160a01b03813581169160208101359091169060400135610345565b6101ad6104d1565b6040805160ff9092168252519081900360200190f35b61015d600480360360208110156101d957600080fd5b50356001600160a01b03166104da565b6100a06104ec565b6101416004803603604081101561020757600080fd5b506001600160a01b038135169060200135610546565b61015d6004803603604081101561023357600080fd5b506001600160a01b038135811691602001351661064f565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102d15780601f106102a6576101008083540402835291602001916102d1565b820191906000526020600020905b8154815290600101906020018083116102b457829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035481565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b038616600090815260048252838120338252909152918220546103a691849063ffffffff61066c16565b6001600160a01b0385166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b8183015292825260059052919091205461041191849063ffffffff61066c16565b6001600160a01b0380861660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b81830152938816835252919091205461047091849063ffffffff61070316565b6001600160a01b0380851660008181526005602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60025460ff1681565b60056020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102d15780601f106102a6576101008083540402835291602001916102d1565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b60208083019190915233600090815260059091529182205461059491849063ffffffff61066c16565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b0388168452919052919020546105f191849063ffffffff61070316565b6001600160a01b0384166000818152600560209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b600460209081526000928352604080842090915290825290205481565b600081848411156106fb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106c05781810151838201526020016106a8565b50505050905090810190601f1680156106ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156107585760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156106c05781810151838201526020016106a8565b5094935050505056fea265627a7a7231582089d6fd54c57aab294c1b9306171297a46c3b5b6f71b0313b0f106740799f09e464736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A5 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x21D JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x155 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x16F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x24B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xC2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x107 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x12B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15D PUSH2 0x33F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x345 JUMP JUMPDEST PUSH2 0x1AD PUSH2 0x4D1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x15D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4DA JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x4EC JUMP JUMPDEST PUSH2 0x141 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x546 JUMP JUMPDEST PUSH2 0x15D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x64F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2B4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 DUP3 KECCAK256 SLOAD PUSH2 0x3A6 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x66C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x411 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x66C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP9 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x470 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x703 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP9 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x2D1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2A6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x2D1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 DUP3 KECCAK256 SLOAD PUSH2 0x594 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x66C AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x5F1 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x703 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6A8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x6ED JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x758 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x6C0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6A8 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP10 0xD6 REVERT SLOAD 0xC5 PUSH27 0xAB294C1B9306171297A46C3B5B6F71B0313B0F106740799F09E464 PUSH20 0x6F6C634300051000320000000000000000000000 ","sourceMap":"1197:1589:10:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1197:1589:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1268:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1268:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2578:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2578:206:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1345:26;;;:::i;:::-;;;;;;;;;;;;;;;;2162:410;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2162:410:10;;;;;;;;;;;;;;;;;:::i;1318:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1447:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1447:44:10;-1:-1:-1;;;;;1447:44:10;;:::i;1292:20::-;;;:::i;1845:311::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1845:311:10;;;;;;;;:::i;1377:64::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1377:64:10;;;;;;;;;;:::i;1268:18::-;;;;;;;;;;;;;;;-1:-1:-1;;1268:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2578:206::-;2673:10;2647:4;2663:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2663:31:10;;;;;;;;;;;:40;;;2718:38;;;;;;;2647:4;;2663:31;;2673:10;;2718:38;;;;;;;;-1:-1:-1;2773:4:10;2578:206;;;;:::o;1345:26::-;;;;:::o;2162:410::-;2289:64;;;;;;;;;;;-1:-1:-1;;;2289:64:10;;;;;;;;-1:-1:-1;;;;;2289:14:10;;2244:4;2289:14;;;:9;:14;;;;;2304:10;2289:26;;;;;;;;;:64;;2320:6;;2289:64;:30;:64;:::i;:::-;-1:-1:-1;;;;;2260:14:10;;;;;;:9;:14;;;;;;;;2275:10;2260:26;;;;;;;:93;;;;2380:50;;;;;;;;;;-1:-1:-1;;;2380:50:10;;;;:14;;;:9;:14;;;;;;;:50;;2399:6;;2380:50;:18;:50;:::i;:::-;-1:-1:-1;;;;;2363:14:10;;;;;;;:9;:14;;;;;;;;:67;;;;2457:46;;;;;;;;;;-1:-1:-1;;;2457:46:10;;;;:14;;;;;;;;;;;:46;;2476:6;;2457:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;2440:14:10;;;;;;;:9;:14;;;;;;;;;:63;;;;2518:26;;;;;;;2440:14;;2518:26;;;;;;;;;;;;;-1:-1:-1;2561:4:10;2162:410;;;;;:::o;1318:21::-;;;;;;:::o;1447:44::-;;;;;;;;;;;;;:::o;1292:20::-;;;;;;;;;;;;;;;-1:-1:-1;;1292:20:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1845:311;1950:57;;;;;;;;;;;-1:-1:-1;;;1950:57:10;;;;;;;;1960:10;1910:4;1950:21;;;:9;:21;;;;;;;:57;;1976:6;;1950:57;:25;:57;:::i;:::-;1936:10;1926:21;;;;:9;:21;;;;;;;;:81;;;;2034:46;;;;;;;;;;-1:-1:-1;;;2034:46:10;;;;-1:-1:-1;;;;;2034:14:10;;;;;;;;;;;:46;;2053:6;;2034:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;2017:14:10;;;;;;:9;:14;;;;;;;;;:63;;;;2095:33;;;;;;;2017:14;;2104:10;;2095:33;;;;;;;;;;-1:-1:-1;2145:4:10;1845:311;;;;:::o;1377:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2119:187:9:-;2205:7;2240:12;2232:6;;;;2224:29;;;;-1:-1:-1;;;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2275:5:9;;;2119:187::o;1250:::-;1336:7;1367:5;;;1398:12;1390:6;;;;1382:29;;;;-1:-1:-1;;;1382:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1382:29:9;-1:-1:-1;1429:1:9;1250:187;-1:-1:-1;;;;1250:187:9:o"},"gasEstimates":{"creation":{"codeDepositCost":"388400","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"1305","approve(address,uint256)":"22300","balanceOf(address)":"1146","decimals()":"1013","name()":"infinite","symbol()":"infinite","totalSupply()":"1043","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenName\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimalUnits\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the basic standard token. See https://github.com/ethereum/EIPs/issues/20\",\"methods\":{},\"title\":\"Standard BEP20 token\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":\"StandardToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2859,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:StandardToken","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":2861,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:StandardToken","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":2863,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:StandardToken","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":2865,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:StandardToken","label":"totalSupply","offset":0,"slot":"3","type":"t_uint256"},{"astId":2871,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:StandardToken","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":2875,"contract":"@venusprotocol/venus-protocol/contracts/test/BEP20.sol:StandardToken","label":"balanceOf","offset":0,"slot":"5","type":"t_mapping(t_address,t_uint256)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"methods":{}}}},"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol":{"FaucetNonStandardToken":{"abi":[{"inputs":[{"internalType":"uint256","name":"_initialAmount","type":"uint256"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"uint8","name":"_decimalUnits","type":"uint8"},{"internalType":"string","name":"_tokenSymbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"allocateTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","methods":{},"title":"The Venus Faucet Test Token (non-standard)"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50604051610ad2380380610ad28339818101604052608081101561003357600080fd5b81516020830180516040519294929383019291908464010000000082111561005a57600080fd5b90830190602082018581111561006f57600080fd5b825164010000000081118282018810171561008957600080fd5b82525081516020918201929091019080838360005b838110156100b657818101518382015260200161009e565b50505050905090810190601f1680156100e35780820380516001836020036101000a031916815260200191505b5060408181526020830151920180519294919391928464010000000082111561010b57600080fd5b90830190602082018581111561012057600080fd5b825164010000000081118282018810171561013a57600080fd5b82525081516020918201929091019080838360005b8381101561016757818101518382015260200161014f565b50505050905090810190601f1680156101945780820380516001836020036101000a031916815260200191505b506040908152600388905533600090815260056020908152918120899055875189955088945087935086926101cd929190860190610203565b5080516101e1906002906020840190610203565b50506001805460ff191660ff929092169190911790555061029e945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024457805160ff1916838001178555610271565b82800160010185558215610271579182015b82811115610271578251825591602001919060010190610256565b5061027d929150610281565b5090565b61029b91905b8082111561027d5760008155600101610287565b90565b610825806102ad6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063313ce56711610066578063313ce567146101de57806370a08231146101fc57806395d89b4114610222578063a9059cbb1461022a578063dd62ed3e146102565761009e565b806306fdde03146100a357806308bca56614610120578063095ea7b31461014e57806318160ddd1461018e57806323b872dd146101a8575b600080fd5b6100ab610284565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e55781810151838201526020016100cd565b50505050905090810190601f1680156101125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61014c6004803603604081101561013657600080fd5b506001600160a01b038135169060200135610312565b005b61017a6004803603604081101561016457600080fd5b506001600160a01b038135169060200135610372565b604080519115158252519081900360200190f35b6101966103d8565b60408051918252519081900360200190f35b61014c600480360360608110156101be57600080fd5b506001600160a01b038135811691602081013590911690604001356103de565b6101e6610566565b6040805160ff9092168252519081900360200190f35b6101966004803603602081101561021257600080fd5b50356001600160a01b031661056f565b6100ab610581565b61014c6004803603604081101561024057600080fd5b506001600160a01b0381351690602001356105d9565b6101966004803603604081101561026c57600080fd5b506001600160a01b03813581169160200135166106de565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561030a5780601f106102df5761010080835404028352916020019161030a565b820191906000526020600020905b8154815290600101906020018083116102ed57829003601f168201915b505050505081565b6001600160a01b03821660008181526005602090815260409182902080548501905560038054850190558151848152915130927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a35050565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035481565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b038616600090815260048252838120338252909152919091205461044091839063ffffffff6106fb16565b6001600160a01b0384166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b818301529282526005905291909120546104ab91839063ffffffff6106fb16565b6001600160a01b0380851660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b81830152938716835252919091205461050a91839063ffffffff61079216565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60015460ff1681565b60056020526000908152604090205481565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561030a5780601f106102df5761010080835404028352916020019161030a565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091523360009081526005909152919091205461062891839063ffffffff6106fb16565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b03871684529190529190205461068591839063ffffffff61079216565b6001600160a01b0383166000818152600560209081526040918290209390935580518481529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600460209081526000928352604080842090915290825290205481565b6000818484111561078a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561074f578181015183820152602001610737565b50505050905090810190601f16801561077c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156107e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561074f578181015183820152602001610737565b5094935050505056fea265627a7a7231582068bc61b1c434837bdf6ec20cca44e97f50872f9c47916737882ce65ba3e04c8764736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xAD2 CODESIZE SUB DUP1 PUSH2 0xAD2 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD DUP1 MLOAD SWAP3 SWAP5 SWAP2 SWAP4 SWAP2 SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x167 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x194 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP9 SWAP1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE SWAP2 DUP2 KECCAK256 DUP10 SWAP1 SSTORE DUP8 MLOAD DUP10 SWAP6 POP DUP9 SWAP5 POP DUP8 SWAP4 POP DUP7 SWAP3 PUSH2 0x1CD SWAP3 SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x203 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1E1 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x203 JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0x29E SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x244 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x271 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x271 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x271 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x256 JUMP JUMPDEST POP PUSH2 0x27D SWAP3 SWAP2 POP PUSH2 0x281 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x29B SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x287 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x825 DUP1 PUSH2 0x2AD PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x256 JUMPI PUSH2 0x9E JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x8BCA566 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1A8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAB PUSH2 0x284 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x112 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x14C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x312 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x196 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x1E6 PUSH2 0x566 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x196 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x56F JUMP JUMPDEST PUSH2 0xAB PUSH2 0x581 JUMP JUMPDEST PUSH2 0x14C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5D9 JUMP JUMPDEST PUSH2 0x196 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6DE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x30A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2DF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x30A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2ED JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD ADDRESS SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x440 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4AB SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP8 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x50A SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x792 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP4 AND DUP5 SWAP1 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x30A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2DF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x628 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x685 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x792 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x78A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x74F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x737 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x77C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x7E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x74F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x737 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH9 0xBC61B1C434837BDF6E 0xC2 0xC 0xCA DIFFICULTY 0xE9 PUSH32 0x50872F9C47916737882CE65BA3E04C8764736F6C634300051000320000000000 ","sourceMap":"785:482:11:-;;;843:232;8:9:-1;5:2;;;30:1;27;20:12;5:2;843:232:11;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;843:232:11;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;843:232:11;;420:4:-1;411:14;;;;843:232:11;;;;;411:14:-1;843:232:11;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;843:232:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;843:232:11;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;843:232:11;;420:4:-1;411:14;;;;843:232:11;;;;;411:14:-1;843:232:11;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;843:232:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;843:232:11;;;;3488:11:10;:28;;;3536:10;3526:21;;;;:9;:21;;;;;;;:38;;;3574:17;;1016:14:11;;-1:-1:-1;1032:10:11;;-1:-1:-1;1044:13:11;;-1:-1:-1;1059:12:11;;3574:17:10;;3526:21;3574:17;;;;;:::i;:::-;-1:-1:-1;3601:21:10;;;;:6;;:21;;;;;:::i;:::-;-1:-1:-1;;3632:8:10;:24;;-1:-1:-1;;3632:24:10;;;;;;;;;;;;-1:-1:-1;785:482:11;;-1:-1:-1;;;;;785:482:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;785:482:11;;;-1:-1:-1;785:482:11;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061009e5760003560e01c8063313ce56711610066578063313ce567146101de57806370a08231146101fc57806395d89b4114610222578063a9059cbb1461022a578063dd62ed3e146102565761009e565b806306fdde03146100a357806308bca56614610120578063095ea7b31461014e57806318160ddd1461018e57806323b872dd146101a8575b600080fd5b6100ab610284565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e55781810151838201526020016100cd565b50505050905090810190601f1680156101125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61014c6004803603604081101561013657600080fd5b506001600160a01b038135169060200135610312565b005b61017a6004803603604081101561016457600080fd5b506001600160a01b038135169060200135610372565b604080519115158252519081900360200190f35b6101966103d8565b60408051918252519081900360200190f35b61014c600480360360608110156101be57600080fd5b506001600160a01b038135811691602081013590911690604001356103de565b6101e6610566565b6040805160ff9092168252519081900360200190f35b6101966004803603602081101561021257600080fd5b50356001600160a01b031661056f565b6100ab610581565b61014c6004803603604081101561024057600080fd5b506001600160a01b0381351690602001356105d9565b6101966004803603604081101561026c57600080fd5b506001600160a01b03813581169160200135166106de565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561030a5780601f106102df5761010080835404028352916020019161030a565b820191906000526020600020905b8154815290600101906020018083116102ed57829003601f168201915b505050505081565b6001600160a01b03821660008181526005602090815260409182902080548501905560038054850190558151848152915130927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a35050565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035481565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b038616600090815260048252838120338252909152919091205461044091839063ffffffff6106fb16565b6001600160a01b0384166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b818301529282526005905291909120546104ab91839063ffffffff6106fb16565b6001600160a01b0380851660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b81830152938716835252919091205461050a91839063ffffffff61079216565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60015460ff1681565b60056020526000908152604090205481565b6002805460408051602060018416156101000260001901909316849004601f8101849004840282018401909252818152929183018282801561030a5780601f106102df5761010080835404028352916020019161030a565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091523360009081526005909152919091205461062891839063ffffffff6106fb16565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b03871684529190529190205461068591839063ffffffff61079216565b6001600160a01b0383166000818152600560209081526040918290209390935580518481529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600460209081526000928352604080842090915290825290205481565b6000818484111561078a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561074f578181015183820152602001610737565b50505050905090810190601f16801561077c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156107e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561074f578181015183820152602001610737565b5094935050505056fea265627a7a7231582068bc61b1c434837bdf6ec20cca44e97f50872f9c47916737882ce65ba3e04c8764736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x256 JUMPI PUSH2 0x9E JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x8BCA566 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1A8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAB PUSH2 0x284 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x112 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x14C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x312 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x196 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x14C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x1E6 PUSH2 0x566 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x196 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x56F JUMP JUMPDEST PUSH2 0xAB PUSH2 0x581 JUMP JUMPDEST PUSH2 0x14C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5D9 JUMP JUMPDEST PUSH2 0x196 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6DE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x30A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2DF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x30A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2ED JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD ADDRESS SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x440 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4AB SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP8 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x50A SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x792 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1 DUP5 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP4 AND DUP5 SWAP1 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x30A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2DF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x628 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x6FB AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x685 SWAP2 DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x792 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x78A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x74F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x737 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x77C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x7E7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x74F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x737 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 PUSH9 0xBC61B1C434837BDF6E 0xC2 0xC 0xCA DIFFICULTY 0xE9 PUSH32 0x50872F9C47916737882CE65BA3E04C8764736F6C634300051000320000000000 ","sourceMap":"785:482:11:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;785:482:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3092:18:10;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3092:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1081:184:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1081:184:11;;;;;;;;:::i;:::-;;4330:206:10;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4330:206:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3169:26;;;:::i;:::-;;;;;;;;;;;;;;;;3950:374;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3950:374:10;;;;;;;;;;;;;;;;;:::i;3116:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3271:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3271:44:10;-1:-1:-1;;;;;3271:44:10;;:::i;3143:20::-;;;:::i;3669:275::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3669:275:10;;;;;;;;:::i;3201:64::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3201:64:10;;;;;;;;;;:::i;3092:18::-;;;;;;;;;;;;;;;-1:-1:-1;;3092:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1081:184:11:-;-1:-1:-1;;;;;1149:17:11;;;;;;:9;:17;;;;;;;;;:26;;;;;;1185:11;:20;;;;;;1220:38;;;;;;;1237:4;;1220:38;;;;;;;;;1081:184;;:::o;4330:206:10:-;4425:10;4399:4;4415:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;4415:31:10;;;;;;;;;;;:40;;;4470:38;;;;;;;4399:4;;4415:31;;4425:10;;4470:38;;;;;;;;-1:-1:-1;4525:4:10;4330:206;;;;:::o;3169:26::-;;;;:::o;3950:374::-;4062:64;;;;;;;;;;;-1:-1:-1;;;4062:64:10;;;;;;;;-1:-1:-1;;;;;4062:14:10;;-1:-1:-1;4062:14:10;;;:9;:14;;;;;4077:10;4062:26;;;;;;;;;;:64;;4093:6;;4062:64;:30;:64;:::i;:::-;-1:-1:-1;;;;;4033:14:10;;;;;;:9;:14;;;;;;;;4048:10;4033:26;;;;;;;:93;;;;4153:50;;;;;;;;;;-1:-1:-1;;;4153:50:10;;;;:14;;;:9;:14;;;;;;;:50;;4172:6;;4153:50;:18;:50;:::i;:::-;-1:-1:-1;;;;;4136:14:10;;;;;;;:9;:14;;;;;;;;:67;;;;4230:46;;;;;;;;;;-1:-1:-1;;;4230:46:10;;;;:14;;;;;;;;;;;:46;;4249:6;;4230:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;4213:14:10;;;;;;;:9;:14;;;;;;;;;:63;;;;4291:26;;;;;;;4213:14;;4291:26;;;;;;;;;;;;;3950:374;;;:::o;3116:21::-;;;;;;:::o;3271:44::-;;;;;;;;;;;;;:::o;3143:20::-;;;;;;;;;;;;;;-1:-1:-1;;3143:20:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3669:275;3759:57;;;;;;;;;;;-1:-1:-1;;;3759:57:10;;;;;;;;3769:10;-1:-1:-1;3759:21:10;;;:9;:21;;;;;;;;:57;;3785:6;;3759:57;:25;:57;:::i;:::-;3745:10;3735:21;;;;:9;:21;;;;;;;;:81;;;;3843:46;;;;;;;;;;-1:-1:-1;;;3843:46:10;;;;-1:-1:-1;;;;;3843:14:10;;;;;;;;;;;:46;;3862:6;;3843:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;3826:14:10;;;;;;:9;:14;;;;;;;;;:63;;;;3904:33;;;;;;;3826:14;;3913:10;;3904:33;;;;;;;;;;3669:275;;:::o;3201:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2119:187:9:-;2205:7;2240:12;2232:6;;;;2224:29;;;;-1:-1:-1;;;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2275:5:9;;;2119:187::o;1250:::-;1336:7;1367:5;;;1398:12;1390:6;;;;1382:29;;;;-1:-1:-1;;;1382:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1382:29:9;-1:-1:-1;1429:1:9;1250:187;-1:-1:-1;;;;1250:187:9:o"},"gasEstimates":{"creation":{"codeDepositCost":"417000","executionCost":"infinite","totalCost":"infinite"},"external":{"allocateTo(address,uint256)":"43787","allowance(address,address)":"1305","approve(address,uint256)":"22322","balanceOf(address)":"1146","decimals()":"1013","name()":"infinite","symbol()":"infinite","totalSupply()":"1065","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allocateTo(address,uint256)":"08bca566","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenName\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimalUnits\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"allocateTo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{},\"title\":\"The Venus Faucet Test Token (non-standard)\"},\"userdoc\":{\"methods\":{},\"notice\":\"A simple test token that lets anyone get more of it.\"}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol\":\"FaucetNonStandardToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"},\"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"./BEP20.sol\\\";\\n\\n/**\\n * @title The Venus Faucet Test Token\\n * @author Venus\\n * @notice A simple test token that lets anyone get more of it.\\n */\\ncontract FaucetToken is StandardToken {\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf[_owner] += value;\\n        totalSupply += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n}\\n\\n/**\\n * @title The Venus Faucet Test Token (non-standard)\\n * @author Venus\\n * @notice A simple test token that lets anyone get more of it.\\n */\\ncontract FaucetNonStandardToken is NonStandardToken {\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public NonStandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf[_owner] += value;\\n        totalSupply += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n}\\n\\n/**\\n * @title The Venus Faucet Re-Entrant Test Token\\n * @author Venus\\n * @notice A test token that is malicious and tries to re-enter callers\\n */\\ncontract FaucetTokenReEntrantHarness {\\n    using SafeMath for uint256;\\n\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 internal totalSupply_;\\n    mapping(address => mapping(address => uint256)) internal allowance_;\\n    mapping(address => uint256) internal balanceOf_;\\n\\n    bytes public reEntryCallData;\\n    string public reEntryFun;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol,\\n        bytes memory _reEntryCallData,\\n        string memory _reEntryFun\\n    ) public {\\n        totalSupply_ = _initialAmount;\\n        balanceOf_[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n        reEntryCallData = _reEntryCallData;\\n        reEntryFun = _reEntryFun;\\n    }\\n\\n    modifier reEnter(string memory funName) {\\n        string memory _reEntryFun = reEntryFun;\\n        if (compareStrings(_reEntryFun, funName)) {\\n            reEntryFun = \\\"\\\"; // Clear re-entry fun\\n            (bool success, bytes memory returndata) = msg.sender.call(reEntryCallData);\\n            assembly {\\n                if eq(success, 0) {\\n                    revert(add(returndata, 0x20), returndatasize())\\n                }\\n            }\\n        }\\n\\n        _;\\n    }\\n\\n    function compareStrings(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)));\\n    }\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf_[_owner] += value;\\n        totalSupply_ += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n\\n    function totalSupply() public reEnter(\\\"totalSupply\\\") returns (uint256) {\\n        return totalSupply_;\\n    }\\n\\n    function allowance(address owner, address spender) public reEnter(\\\"allowance\\\") returns (uint256 remaining) {\\n        return allowance_[owner][spender];\\n    }\\n\\n    function approve(address spender, uint256 amount) public reEnter(\\\"approve\\\") returns (bool success) {\\n        _approve(msg.sender, spender, amount);\\n        return true;\\n    }\\n\\n    function balanceOf(address owner) public reEnter(\\\"balanceOf\\\") returns (uint256 balance) {\\n        return balanceOf_[owner];\\n    }\\n\\n    function transfer(address dst, uint256 amount) public reEnter(\\\"transfer\\\") returns (bool success) {\\n        _transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(\\n        address src,\\n        address dst,\\n        uint256 amount\\n    ) public reEnter(\\\"transferFrom\\\") returns (bool success) {\\n        _transfer(src, dst, amount);\\n        _approve(src, msg.sender, allowance_[src][msg.sender].sub(amount));\\n        return true;\\n    }\\n\\n    function _approve(address owner, address spender, uint256 amount) internal {\\n        require(spender != address(0), \\\"sender should be valid address\\\");\\n        require(owner != address(0), \\\"owner should be valid address\\\");\\n        allowance_[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    function _transfer(address src, address dst, uint256 amount) internal {\\n        require(dst != address(0), \\\"dst should be valid address\\\");\\n        balanceOf_[src] = balanceOf_[src].sub(amount);\\n        balanceOf_[dst] = balanceOf_[dst].add(amount);\\n        emit Transfer(src, dst, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x7eee15e70d6c6f83c75682dd0aeecaa207416ee4d9d50fa488cae20784d4be17\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3053,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetNonStandardToken","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":3055,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetNonStandardToken","label":"decimals","offset":0,"slot":"1","type":"t_uint8"},{"astId":3057,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetNonStandardToken","label":"symbol","offset":0,"slot":"2","type":"t_string_storage"},{"astId":3059,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetNonStandardToken","label":"totalSupply","offset":0,"slot":"3","type":"t_uint256"},{"astId":3065,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetNonStandardToken","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":3069,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetNonStandardToken","label":"balanceOf","offset":0,"slot":"5","type":"t_mapping(t_address,t_uint256)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"methods":{},"notice":"A simple test token that lets anyone get more of it."}},"FaucetToken":{"abi":[{"inputs":[{"internalType":"uint256","name":"_initialAmount","type":"uint256"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"uint8","name":"_decimalUnits","type":"uint8"},{"internalType":"string","name":"_tokenSymbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"allocateTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","methods":{},"title":"The Venus Faucet Test Token"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50604051610adc380380610adc8339818101604052608081101561003357600080fd5b81516020830180516040519294929383019291908464010000000082111561005a57600080fd5b90830190602082018581111561006f57600080fd5b825164010000000081118282018810171561008957600080fd5b82525081516020918201929091019080838360005b838110156100b657818101518382015260200161009e565b50505050905090810190601f1680156100e35780820380516001836020036101000a031916815260200191505b5060408181526020830151920180519294919391928464010000000082111561010b57600080fd5b90830190602082018581111561012057600080fd5b825164010000000081118282018810171561013a57600080fd5b82525081516020918201929091019080838360005b8381101561016757818101518382015260200161014f565b50505050905090810190601f1680156101945780820380516001836020036101000a031916815260200191505b506040908152600388905533600090815260056020908152918120899055875189955088945087935086926101cd929190860190610203565b5080516101e1906001906020840190610203565b50506002805460ff191660ff929092169190911790555061029e945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061024457805160ff1916838001178555610271565b82800160010185558215610271579182015b82811115610271578251825591602001919060010190610256565b5061027d929150610281565b5090565b61029b91905b8082111561027d5760008155600101610287565b90565b61082f806102ad6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063313ce56711610066578063313ce567146101de57806370a08231146101fc57806395d89b4114610222578063a9059cbb1461022a578063dd62ed3e146102565761009e565b806306fdde03146100a357806308bca56614610120578063095ea7b31461014e57806318160ddd1461018e57806323b872dd146101a8575b600080fd5b6100ab610284565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e55781810151838201526020016100cd565b50505050905090810190601f1680156101125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61014c6004803603604081101561013657600080fd5b506001600160a01b038135169060200135610312565b005b61017a6004803603604081101561016457600080fd5b506001600160a01b038135169060200135610372565b604080519115158252519081900360200190f35b6101966103d8565b60408051918252519081900360200190f35b61017a600480360360608110156101be57600080fd5b506001600160a01b038135811691602081013590911690604001356103de565b6101e661056a565b6040805160ff9092168252519081900360200190f35b6101966004803603602081101561021257600080fd5b50356001600160a01b0316610573565b6100ab610585565b61017a6004803603604081101561024057600080fd5b506001600160a01b0381351690602001356105df565b6101966004803603604081101561026c57600080fd5b506001600160a01b03813581169160200135166106e8565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561030a5780601f106102df5761010080835404028352916020019161030a565b820191906000526020600020905b8154815290600101906020018083116102ed57829003601f168201915b505050505081565b6001600160a01b03821660008181526005602090815260409182902080548501905560038054850190558151848152915130927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a35050565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035481565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b0386166000908152600482528381203382529091529182205461043f91849063ffffffff61070516565b6001600160a01b0385166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b818301529282526005905291909120546104aa91849063ffffffff61070516565b6001600160a01b0380861660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b81830152938816835252919091205461050991849063ffffffff61079c16565b6001600160a01b0380851660008181526005602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60025460ff1681565b60056020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561030a5780601f106102df5761010080835404028352916020019161030a565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b60208083019190915233600090815260059091529182205461062d91849063ffffffff61070516565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b03881684529190529190205461068a91849063ffffffff61079c16565b6001600160a01b0384166000818152600560209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b600460209081526000928352604080842090915290825290205481565b600081848411156107945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610759578181015183820152602001610741565b50505050905090810190601f1680156107865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156107f15760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610759578181015183820152602001610741565b5094935050505056fea265627a7a723158208ed4f364df23322c56ca3e9eb030ecec461c1e962e5046d143c4b482cc139ed564736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xADC CODESIZE SUB DUP1 PUSH2 0xADC DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB6 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE3 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD DUP1 MLOAD SWAP3 SWAP5 SWAP2 SWAP4 SWAP2 SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x167 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x194 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP9 SWAP1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE SWAP2 DUP2 KECCAK256 DUP10 SWAP1 SSTORE DUP8 MLOAD DUP10 SWAP6 POP DUP9 SWAP5 POP DUP8 SWAP4 POP DUP7 SWAP3 PUSH2 0x1CD SWAP3 SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x203 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1E1 SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x203 JUMP JUMPDEST POP POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH2 0x29E SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x244 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x271 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x271 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x271 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x256 JUMP JUMPDEST POP PUSH2 0x27D SWAP3 SWAP2 POP PUSH2 0x281 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x29B SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x27D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x287 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x82F DUP1 PUSH2 0x2AD PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x256 JUMPI PUSH2 0x9E JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x8BCA566 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1A8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAB PUSH2 0x284 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x112 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x14C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x312 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x196 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x1E6 PUSH2 0x56A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x196 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x573 JUMP JUMPDEST PUSH2 0xAB PUSH2 0x585 JUMP JUMPDEST PUSH2 0x17A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5DF JUMP JUMPDEST PUSH2 0x196 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6E8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x30A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2DF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x30A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2ED JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD ADDRESS SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 DUP3 KECCAK256 SLOAD PUSH2 0x43F SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x705 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4AA SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x705 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP9 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x509 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x79C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP9 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x30A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2DF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 DUP3 KECCAK256 SLOAD PUSH2 0x62D SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x705 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x68A SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x79C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x794 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x759 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x741 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x786 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x7F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x759 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x741 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP15 0xD4 RETURN PUSH5 0xDF23322C56 0xCA RETURNDATACOPY SWAP15 0xB0 ADDRESS 0xEC 0xEC CHAINID SHR 0x1E SWAP7 0x2E POP CHAINID 0xD1 NUMBER 0xC4 0xB4 DUP3 0xCC SGT SWAP15 0xD5 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ","sourceMap":"176:465:11:-;;;220:229;8:9:-1;5:2;;;30:1;27;20:12;5:2;220:229:11;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;220:229:11;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;220:229:11;;420:4:-1;411:14;;;;220:229:11;;;;;411:14:-1;220:229:11;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;220:229:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;220:229:11;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;220:229:11;;420:4:-1;411:14;;;;220:229:11;;;;;411:14:-1;220:229:11;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;220:229:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;220:229:11;;;;1664:11:10;:28;;;1712:10;1702:21;;;;:9;:21;;;;;;;:38;;;1750:17;;390:14:11;;-1:-1:-1;406:10:11;;-1:-1:-1;418:13:11;;-1:-1:-1;433:12:11;;1750:17:10;;1702:21;1750:17;;;;;:::i;:::-;-1:-1:-1;1777:21:10;;;;:6;;:21;;;;;:::i;:::-;-1:-1:-1;;1808:8:10;:24;;-1:-1:-1;;1808:24:10;;;;;;;;;;;;-1:-1:-1;176:465:11;;-1:-1:-1;;;;;176:465:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;176:465:11;;;-1:-1:-1;176:465:11;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061009e5760003560e01c8063313ce56711610066578063313ce567146101de57806370a08231146101fc57806395d89b4114610222578063a9059cbb1461022a578063dd62ed3e146102565761009e565b806306fdde03146100a357806308bca56614610120578063095ea7b31461014e57806318160ddd1461018e57806323b872dd146101a8575b600080fd5b6100ab610284565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100e55781810151838201526020016100cd565b50505050905090810190601f1680156101125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61014c6004803603604081101561013657600080fd5b506001600160a01b038135169060200135610312565b005b61017a6004803603604081101561016457600080fd5b506001600160a01b038135169060200135610372565b604080519115158252519081900360200190f35b6101966103d8565b60408051918252519081900360200190f35b61017a600480360360608110156101be57600080fd5b506001600160a01b038135811691602081013590911690604001356103de565b6101e661056a565b6040805160ff9092168252519081900360200190f35b6101966004803603602081101561021257600080fd5b50356001600160a01b0316610573565b6100ab610585565b61017a6004803603604081101561024057600080fd5b506001600160a01b0381351690602001356105df565b6101966004803603604081101561026c57600080fd5b506001600160a01b03813581169160200135166106e8565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561030a5780601f106102df5761010080835404028352916020019161030a565b820191906000526020600020905b8154815290600101906020018083116102ed57829003601f168201915b505050505081565b6001600160a01b03821660008181526005602090815260409182902080548501905560038054850190558151848152915130927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a35050565b3360008181526004602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60035481565b6040805180820182526016815275496e73756666696369656e7420616c6c6f77616e636560501b6020808301919091526001600160a01b0386166000908152600482528381203382529091529182205461043f91849063ffffffff61070516565b6001600160a01b0385166000818152600460209081526040808320338452825280832094909455835180850185526014815273496e73756666696369656e742062616c616e636560601b818301529282526005905291909120546104aa91849063ffffffff61070516565b6001600160a01b0380861660009081526005602081815260408084209590955584518086018652601081526f42616c616e6365206f766572666c6f7760801b81830152938816835252919091205461050991849063ffffffff61079c16565b6001600160a01b0380851660008181526005602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60025460ff1681565b60056020526000908152604090205481565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561030a5780601f106102df5761010080835404028352916020019161030a565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b60208083019190915233600090815260059091529182205461062d91849063ffffffff61070516565b3360009081526005602081815260408084209490945583518085018552601081526f42616c616e6365206f766572666c6f7760801b818301526001600160a01b03881684529190529190205461068a91849063ffffffff61079c16565b6001600160a01b0384166000818152600560209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b600460209081526000928352604080842090915290825290205481565b600081848411156107945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610759578181015183820152602001610741565b50505050905090810190601f1680156107865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600083830182858210156107f15760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610759578181015183820152602001610741565b5094935050505056fea265627a7a723158208ed4f364df23322c56ca3e9eb030ecec461c1e962e5046d143c4b482cc139ed564736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x256 JUMPI PUSH2 0x9E JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x8BCA566 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1A8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAB PUSH2 0x284 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCD JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x112 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x14C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x312 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x196 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x1E6 PUSH2 0x56A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x196 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x573 JUMP JUMPDEST PUSH2 0xAB PUSH2 0x585 JUMP JUMPDEST PUSH2 0x17A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x5DF JUMP JUMPDEST PUSH2 0x196 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x26C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x6E8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x30A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2DF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x30A JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x2ED JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD ADDRESS SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP4 SWAP1 SWAP3 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x16 DUP2 MSTORE PUSH22 0x496E73756666696369656E7420616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 DUP3 MSTORE DUP4 DUP2 KECCAK256 CALLER DUP3 MSTORE SWAP1 SWAP2 MSTORE SWAP2 DUP3 KECCAK256 SLOAD PUSH2 0x43F SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x705 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL DUP2 DUP4 ADD MSTORE SWAP3 DUP3 MSTORE PUSH1 0x5 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x4AA SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x705 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP6 SWAP1 SWAP6 SSTORE DUP5 MLOAD DUP1 DUP7 ADD DUP7 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE SWAP4 DUP9 AND DUP4 MSTORE MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x509 SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x79C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP7 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP9 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x30A JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x2DF JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x30A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x14 DUP2 MSTORE PUSH20 0x496E73756666696369656E742062616C616E6365 PUSH1 0x60 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 SWAP1 SWAP2 MSTORE SWAP2 DUP3 KECCAK256 SLOAD PUSH2 0x62D SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x705 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP1 DUP6 ADD DUP6 MSTORE PUSH1 0x10 DUP2 MSTORE PUSH16 0x42616C616E6365206F766572666C6F77 PUSH1 0x80 SHL DUP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SWAP1 KECCAK256 SLOAD PUSH2 0x68A SWAP2 DUP5 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x79C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x794 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x759 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x741 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x786 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x7F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x759 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x741 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 DUP15 0xD4 RETURN PUSH5 0xDF23322C56 0xCA RETURNDATACOPY SWAP15 0xB0 ADDRESS 0xEC 0xEC CHAINID SHR 0x1E SWAP7 0x2E POP CHAINID 0xD1 NUMBER 0xC4 0xB4 DUP3 0xCC SGT SWAP15 0xD5 PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ","sourceMap":"176:465:11:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;176:465:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1268:18:10;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1268:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;455:184:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;455:184:11;;;;;;;;:::i;:::-;;2578:206:10;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2578:206:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1345:26;;;:::i;:::-;;;;;;;;;;;;;;;;2162:410;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2162:410:10;;;;;;;;;;;;;;;;;:::i;1318:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1447:44;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1447:44:10;-1:-1:-1;;;;;1447:44:10;;:::i;1292:20::-;;;:::i;1845:311::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1845:311:10;;;;;;;;:::i;1377:64::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1377:64:10;;;;;;;;;;:::i;1268:18::-;;;;;;;;;;;;;;;-1:-1:-1;;1268:18:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;455:184:11:-;-1:-1:-1;;;;;523:17:11;;;;;;:9;:17;;;;;;;;;:26;;;;;;559:11;:20;;;;;;594:38;;;;;;;611:4;;594:38;;;;;;;;;455:184;;:::o;2578:206:10:-;2673:10;2647:4;2663:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2663:31:10;;;;;;;;;;;:40;;;2718:38;;;;;;;2647:4;;2663:31;;2673:10;;2718:38;;;;;;;;-1:-1:-1;2773:4:10;2578:206;;;;:::o;1345:26::-;;;;:::o;2162:410::-;2289:64;;;;;;;;;;;-1:-1:-1;;;2289:64:10;;;;;;;;-1:-1:-1;;;;;2289:14:10;;2244:4;2289:14;;;:9;:14;;;;;2304:10;2289:26;;;;;;;;;:64;;2320:6;;2289:64;:30;:64;:::i;:::-;-1:-1:-1;;;;;2260:14:10;;;;;;:9;:14;;;;;;;;2275:10;2260:26;;;;;;;:93;;;;2380:50;;;;;;;;;;-1:-1:-1;;;2380:50:10;;;;:14;;;:9;:14;;;;;;;:50;;2399:6;;2380:50;:18;:50;:::i;:::-;-1:-1:-1;;;;;2363:14:10;;;;;;;:9;:14;;;;;;;;:67;;;;2457:46;;;;;;;;;;-1:-1:-1;;;2457:46:10;;;;:14;;;;;;;;;;;:46;;2476:6;;2457:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;2440:14:10;;;;;;;:9;:14;;;;;;;;;:63;;;;2518:26;;;;;;;2440:14;;2518:26;;;;;;;;;;;;;-1:-1:-1;2561:4:10;2162:410;;;;;:::o;1318:21::-;;;;;;:::o;1447:44::-;;;;;;;;;;;;;:::o;1292:20::-;;;;;;;;;;;;;;;-1:-1:-1;;1292:20:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1845:311;1950:57;;;;;;;;;;;-1:-1:-1;;;1950:57:10;;;;;;;;1960:10;1910:4;1950:21;;;:9;:21;;;;;;;:57;;1976:6;;1950:57;:25;:57;:::i;:::-;1936:10;1926:21;;;;:9;:21;;;;;;;;:81;;;;2034:46;;;;;;;;;;-1:-1:-1;;;2034:46:10;;;;-1:-1:-1;;;;;2034:14:10;;;;;;;;;;;:46;;2053:6;;2034:46;:18;:46;:::i;:::-;-1:-1:-1;;;;;2017:14:10;;;;;;:9;:14;;;;;;;;;:63;;;;2095:33;;;;;;;2017:14;;2104:10;;2095:33;;;;;;;;;;-1:-1:-1;2145:4:10;1845:311;;;;:::o;1377:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2119:187:9:-;2205:7;2240:12;2232:6;;;;2224:29;;;;-1:-1:-1;;;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2275:5:9;;;2119:187::o;1250:::-;1336:7;1367:5;;;1398:12;1390:6;;;;1382:29;;;;-1:-1:-1;;;1382:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1382:29:9;-1:-1:-1;1429:1:9;1250:187;-1:-1:-1;;;;1250:187:9:o"},"gasEstimates":{"creation":{"codeDepositCost":"419000","executionCost":"infinite","totalCost":"infinite"},"external":{"allocateTo(address,uint256)":"43787","allowance(address,address)":"1305","approve(address,uint256)":"22322","balanceOf(address)":"1146","decimals()":"1013","name()":"infinite","symbol()":"infinite","totalSupply()":"1065","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allocateTo(address,uint256)":"08bca566","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenName\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimalUnits\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"allocateTo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{},\"title\":\"The Venus Faucet Test Token\"},\"userdoc\":{\"methods\":{},\"notice\":\"A simple test token that lets anyone get more of it.\"}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol\":\"FaucetToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"},\"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"./BEP20.sol\\\";\\n\\n/**\\n * @title The Venus Faucet Test Token\\n * @author Venus\\n * @notice A simple test token that lets anyone get more of it.\\n */\\ncontract FaucetToken is StandardToken {\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf[_owner] += value;\\n        totalSupply += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n}\\n\\n/**\\n * @title The Venus Faucet Test Token (non-standard)\\n * @author Venus\\n * @notice A simple test token that lets anyone get more of it.\\n */\\ncontract FaucetNonStandardToken is NonStandardToken {\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public NonStandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf[_owner] += value;\\n        totalSupply += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n}\\n\\n/**\\n * @title The Venus Faucet Re-Entrant Test Token\\n * @author Venus\\n * @notice A test token that is malicious and tries to re-enter callers\\n */\\ncontract FaucetTokenReEntrantHarness {\\n    using SafeMath for uint256;\\n\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 internal totalSupply_;\\n    mapping(address => mapping(address => uint256)) internal allowance_;\\n    mapping(address => uint256) internal balanceOf_;\\n\\n    bytes public reEntryCallData;\\n    string public reEntryFun;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol,\\n        bytes memory _reEntryCallData,\\n        string memory _reEntryFun\\n    ) public {\\n        totalSupply_ = _initialAmount;\\n        balanceOf_[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n        reEntryCallData = _reEntryCallData;\\n        reEntryFun = _reEntryFun;\\n    }\\n\\n    modifier reEnter(string memory funName) {\\n        string memory _reEntryFun = reEntryFun;\\n        if (compareStrings(_reEntryFun, funName)) {\\n            reEntryFun = \\\"\\\"; // Clear re-entry fun\\n            (bool success, bytes memory returndata) = msg.sender.call(reEntryCallData);\\n            assembly {\\n                if eq(success, 0) {\\n                    revert(add(returndata, 0x20), returndatasize())\\n                }\\n            }\\n        }\\n\\n        _;\\n    }\\n\\n    function compareStrings(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)));\\n    }\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf_[_owner] += value;\\n        totalSupply_ += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n\\n    function totalSupply() public reEnter(\\\"totalSupply\\\") returns (uint256) {\\n        return totalSupply_;\\n    }\\n\\n    function allowance(address owner, address spender) public reEnter(\\\"allowance\\\") returns (uint256 remaining) {\\n        return allowance_[owner][spender];\\n    }\\n\\n    function approve(address spender, uint256 amount) public reEnter(\\\"approve\\\") returns (bool success) {\\n        _approve(msg.sender, spender, amount);\\n        return true;\\n    }\\n\\n    function balanceOf(address owner) public reEnter(\\\"balanceOf\\\") returns (uint256 balance) {\\n        return balanceOf_[owner];\\n    }\\n\\n    function transfer(address dst, uint256 amount) public reEnter(\\\"transfer\\\") returns (bool success) {\\n        _transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(\\n        address src,\\n        address dst,\\n        uint256 amount\\n    ) public reEnter(\\\"transferFrom\\\") returns (bool success) {\\n        _transfer(src, dst, amount);\\n        _approve(src, msg.sender, allowance_[src][msg.sender].sub(amount));\\n        return true;\\n    }\\n\\n    function _approve(address owner, address spender, uint256 amount) internal {\\n        require(spender != address(0), \\\"sender should be valid address\\\");\\n        require(owner != address(0), \\\"owner should be valid address\\\");\\n        allowance_[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    function _transfer(address src, address dst, uint256 amount) internal {\\n        require(dst != address(0), \\\"dst should be valid address\\\");\\n        balanceOf_[src] = balanceOf_[src].sub(amount);\\n        balanceOf_[dst] = balanceOf_[dst].add(amount);\\n        emit Transfer(src, dst, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x7eee15e70d6c6f83c75682dd0aeecaa207416ee4d9d50fa488cae20784d4be17\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2859,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetToken","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":2861,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetToken","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":2863,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetToken","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":2865,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetToken","label":"totalSupply","offset":0,"slot":"3","type":"t_uint256"},{"astId":2871,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetToken","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":2875,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetToken","label":"balanceOf","offset":0,"slot":"5","type":"t_mapping(t_address,t_uint256)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"methods":{},"notice":"A simple test token that lets anyone get more of it."}},"FaucetTokenReEntrantHarness":{"abi":[{"inputs":[{"internalType":"uint256","name":"_initialAmount","type":"uint256"},{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"uint8","name":"_decimalUnits","type":"uint8"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"bytes","name":"_reEntryCallData","type":"bytes"},{"internalType":"string","name":"_reEntryFun","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"allocateTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reEntryCallData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reEntryFun","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","methods":{},"title":"The Venus Faucet Re-Entrant Test Token"},"evm":{"bytecode":{"linkReferences":{},"object":"60806040523480156200001157600080fd5b506040516200193438038062001934833981810160405260c08110156200003757600080fd5b8151602083018051604051929492938301929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82516401000000008111828201881017156200009057600080fd5b82525081516020918201929091019080838360005b83811015620000bf578181015183820152602001620000a5565b50505050905090810190601f168015620000ed5780820380516001836020036101000a031916815260200191505b506040818152602083015192018051929491939192846401000000008211156200011657600080fd5b9083019060208201858111156200012c57600080fd5b82516401000000008111828201881017156200014757600080fd5b82525081516020918201929091019080838360005b83811015620001765781810151838201526020016200015c565b50505050905090810190601f168015620001a45780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001c857600080fd5b908301906020820185811115620001de57600080fd5b8251640100000000811182820188101715620001f957600080fd5b82525081516020918201929091019080838360005b83811015620002285781810151838201526020016200020e565b50505050905090810190601f168015620002565780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200027a57600080fd5b9083019060208201858111156200029057600080fd5b8251640100000000811182820188101715620002ab57600080fd5b82525081516020918201929091019080838360005b83811015620002da578181015183820152602001620002c0565b50505050905090810190601f168015620003085780820380516001836020036101000a031916815260200191505b50604090815260038a9055336000908152600560209081529181208b905589516200033c955090935090890191506200039a565b508251620003529060019060208601906200039a565b506002805460ff191660ff86161790558151620003779060069060208501906200039a565b5080516200038d9060079060208401906200039a565b505050505050506200043f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003dd57805160ff19168380011785556200040d565b828001600101855582156200040d579182015b828111156200040d578251825591602001919060010190620003f0565b506200041b9291506200041f565b5090565b6200043c91905b808211156200041b576000815560010162000426565b90565b6114e5806200044f6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80636f19d6ff116100715780636f19d6ff1461021257806370a082311461021a57806395d89b4114610240578063a9059cbb14610248578063a952e07114610274578063dd62ed3e1461027c576100b4565b806306fdde03146100b957806308bca56614610136578063095ea7b31461016457806318160ddd146101a457806323b872dd146101be578063313ce567146101f4575b600080fd5b6100c16102aa565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b038135169060200135610338565b005b6101906004803603604081101561017a57600080fd5b506001600160a01b038135169060200135610398565b604080519115158252519081900360200190f35b6101ac610555565b60408051918252519081900360200190f35b610190600480360360608110156101d457600080fd5b506001600160a01b0381358116916020810135909116906040013561070c565b6101fc610911565b6040805160ff9092168252519081900360200190f35b6100c161091a565b6101ac6004803603602081101561023057600080fd5b50356001600160a01b0316610975565b6100c1610b3e565b6101906004803603604081101561025e57600080fd5b506001600160a01b038135169060200135610b98565b6100c1610d4d565b6101ac6004803603604081101561029257600080fd5b506001600160a01b0381358116916020013516610da8565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103305780601f1061030557610100808354040283529160200191610330565b820191906000526020600020905b81548152906001019060200180831161031357829003601f168201915b505050505081565b6001600160a01b03821660008181526005602090815260409182902080548501905560038054850190558151848152915130927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a35050565b604080518082018252600780825266617070726f766560c81b6020808401919091528154845160026001831615610100026000190190921691909104601f810183900483028201830190955284815260009460609391928301828280156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b505050505090506104518183610f81565b1561053f5760408051602081019182905260009081905261047491600791611415565b5060006060336001600160a01b0316600660405180828054600181600116156101000203166002900480156104e05780601f106104be5761010080835404028352918201916104e0565b820191906000526020600020905b8154815290600101906020018083116104cc575b50509150506000604051808303816000865af19150503d8060008114610522576040519150601f19603f3d011682016040523d82523d6000602084013e610527565b606091505b5091509150600082141561053c573d60208201fd5b50505b61054a338686611068565b506001949350505050565b604080518082018252600b81526a746f74616c537570706c7960a81b60208083019190915260078054845160026001831615610100026000190190921691909104601f81018490048402820184019095528481526000946060939192918301828280156106035780601f106105d857610100808354040283529160200191610603565b820191906000526020600020905b8154815290600101906020018083116105e657829003601f168201915b505050505090506106148183610f81565b156107025760408051602081019182905260009081905261063791600791611415565b5060006060336001600160a01b0316600660405180828054600181600116156101000203166002900480156106a35780601f106106815761010080835404028352918201916106a3565b820191906000526020600020905b81548152906001019060200180831161068f575b50509150506000604051808303816000865af19150503d80600081146106e5576040519150601f19603f3d011682016040523d82523d6000602084013e6106ea565b606091505b509150915060008214156106ff573d60208201fd5b50505b6003549250505090565b604080518082018252600c81526b7472616e7366657246726f6d60a01b60208083019190915260078054845160026001831615610100026000190190921691909104601f81018490048402820184019095528481526000946060939192918301828280156107bb5780601f10610790576101008083540402835291602001916107bb565b820191906000526020600020905b81548152906001019060200180831161079e57829003601f168201915b505050505090506107cc8183610f81565b156108ba576040805160208101918290526000908190526107ef91600791611415565b5060006060336001600160a01b03166006604051808280546001816001161561010002031660029004801561085b5780601f1061083957610100808354040283529182019161085b565b820191906000526020600020905b815481529060010190602001808311610847575b50509150506000604051808303816000865af19150503d806000811461089d576040519150601f19603f3d011682016040523d82523d6000602084013e6108a2565b606091505b509150915060008214156108b7573d60208201fd5b50505b6108c5868686611180565b6001600160a01b038616600090815260046020908152604080832033808552925290912054610905918891610900908863ffffffff61129516565b611068565b50600195945050505050565b60025460ff1681565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103305780601f1061030557610100808354040283529160200191610330565b60408051808201825260098152683130b630b731b2a7b360b91b60208083019190915260078054845160026001831615610100026000190190921691909104601f8101849004840282018401909552848152600094606093919291830182828015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b50505050509050610a328183610f81565b15610b2057604080516020810191829052600090819052610a5591600791611415565b5060006060336001600160a01b031660066040518082805460018160011615610100020316600290048015610ac15780601f10610a9f576101008083540402835291820191610ac1565b820191906000526020600020905b815481529060010190602001808311610aad575b50509150506000604051808303816000865af19150503d8060008114610b03576040519150601f19603f3d011682016040523d82523d6000602084013e610b08565b606091505b50915091506000821415610b1d573d60208201fd5b50505b5050506001600160a01b031660009081526005602052604090205490565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103305780601f1061030557610100808354040283529160200191610330565b60408051808201825260088152673a3930b739b332b960c11b60208083019190915260078054845160026001831615610100026000190190921691909104601f8101849004840282018401909552848152600094606093919291830182828015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b50505050509050610c548183610f81565b15610d4257604080516020810191829052600090819052610c7791600791611415565b5060006060336001600160a01b031660066040518082805460018160011615610100020316600290048015610ce35780601f10610cc1576101008083540402835291820191610ce3565b820191906000526020600020905b815481529060010190602001808311610ccf575b50509150506000604051808303816000865af19150503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b50915091506000821415610d3f573d60208201fd5b50505b61054a338686611180565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103305780601f1061030557610100808354040283529160200191610330565b6040805180820182526009815268616c6c6f77616e636560b81b60208083019190915260078054845160026001831615610100026000190190921691909104601f8101849004840282018401909552848152600094606093919291830182828015610e545780601f10610e2957610100808354040283529160200191610e54565b820191906000526020600020905b815481529060010190602001808311610e3757829003601f168201915b50505050509050610e658183610f81565b15610f5357604080516020810191829052600090819052610e8891600791611415565b5060006060336001600160a01b031660066040518082805460018160011615610100020316600290048015610ef45780601f10610ed2576101008083540402835291820191610ef4565b820191906000526020600020905b815481529060010190602001808311610ee0575b50509150506000604051808303816000865af19150503d8060008114610f36576040519150601f19603f3d011682016040523d82523d6000602084013e610f3b565b606091505b50915091506000821415610f50573d60208201fd5b50505b5050506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000816040516020018082805190602001908083835b60208310610fb65780518252601f199092019160209182019101610f97565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106110245780518252601f199092019160209182019101611005565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b6001600160a01b0382166110c3576040805162461bcd60e51b815260206004820152601e60248201527f73656e6465722073686f756c642062652076616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03831661111e576040805162461bcd60e51b815260206004820152601d60248201527f6f776e65722073686f756c642062652076616c69642061646472657373000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0382166111db576040805162461bcd60e51b815260206004820152601b60248201527f6473742073686f756c642062652076616c696420616464726573730000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260056020526040902054611204908263ffffffff61129516565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611239908263ffffffff6112de16565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60006112d783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611320565b9392505050565b60006112d783836040518060400160405280601b81526020017f536166654d6174683a206164646974696f6e206f766572666c6f7700000000008152506113b7565b600081848411156113af5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561137457818101518382015260200161135c565b50505050905090810190601f1680156113a15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000838301828582101561140c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561137457818101518382015260200161135c565b50949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061145657805160ff1916838001178555611483565b82800160010185558215611483579182015b82811115611483578251825591602001919060010190611468565b5061148f929150611493565b5090565b6114ad91905b8082111561148f5760008155600101611499565b9056fea265627a7a72315820a57c7438aa5481a5c9cbff30777b144454ed48e8c2b54a50c493f2002dd46f0d64736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1934 CODESIZE SUB DUP1 PUSH3 0x1934 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xC0 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xBF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xA5 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xED JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD DUP1 MLOAD SWAP3 SWAP5 SWAP2 SWAP4 SWAP2 SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x12C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x176 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x15C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1A4 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x228 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x20E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x256 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x27A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x290 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x2DA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x2C0 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x308 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x3 DUP11 SWAP1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE SWAP2 DUP2 KECCAK256 DUP12 SWAP1 SSTORE DUP10 MLOAD PUSH3 0x33C SWAP6 POP SWAP1 SWAP4 POP SWAP1 DUP10 ADD SWAP2 POP PUSH3 0x39A JUMP JUMPDEST POP DUP3 MLOAD PUSH3 0x352 SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x39A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF DUP7 AND OR SWAP1 SSTORE DUP2 MLOAD PUSH3 0x377 SWAP1 PUSH1 0x6 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x39A JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x38D SWAP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x39A JUMP JUMPDEST POP POP POP POP POP POP POP PUSH3 0x43F JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x3DD JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x40D JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x40D JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x40D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x3F0 JUMP JUMPDEST POP PUSH3 0x41B SWAP3 SWAP2 POP PUSH3 0x41F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x43C SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x41B JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x426 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x14E5 DUP1 PUSH3 0x44F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F19D6FF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x6F19D6FF EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x240 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xA952E071 EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x27C JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x8BCA566 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x2AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x128 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x338 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x190 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x398 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1AC PUSH2 0x555 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x190 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x70C JUMP JUMPDEST PUSH2 0x1FC PUSH2 0x911 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x91A JUMP JUMPDEST PUSH2 0x1AC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x975 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0xB3E JUMP JUMPDEST PUSH2 0x190 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x25E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xB98 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0xD4D JUMP JUMPDEST PUSH2 0x1AC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xDA8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x330 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x305 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x330 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x313 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD ADDRESS SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x7 DUP1 DUP3 MSTORE PUSH7 0x617070726F7665 PUSH1 0xC8 SHL PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP3 ADD DUP4 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x440 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x415 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x440 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x423 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x451 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0x53F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0x474 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x4E0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4BE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x4E0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4CC JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x522 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x527 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x53C JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH2 0x54A CALLER DUP7 DUP7 PUSH2 0x1068 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xB DUP2 MSTORE PUSH11 0x746F74616C537570706C79 PUSH1 0xA8 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x603 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5D8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x603 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5E6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x614 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0x702 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0x637 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x6A3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x681 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x6A3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x68F JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6E5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6EA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x6FF JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH1 0x3 SLOAD SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xC DUP2 MSTORE PUSH12 0x7472616E7366657246726F6D PUSH1 0xA0 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7BB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x790 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7BB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x79E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x7CC DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0x8BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0x7EF SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x85B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x839 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x85B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x847 JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x89D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x8A2 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x8B7 JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH2 0x8C5 DUP7 DUP7 DUP7 PUSH2 0x1180 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x905 SWAP2 DUP9 SWAP2 PUSH2 0x900 SWAP1 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x1295 AND JUMP JUMPDEST PUSH2 0x1068 JUMP JUMPDEST POP PUSH1 0x1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x330 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x305 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x9 DUP2 MSTORE PUSH9 0x3130B630B731B2A7B3 PUSH1 0xB9 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xA21 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x9F6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA21 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA04 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0xA32 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0xB20 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xA55 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xAC1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA9F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xAC1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xAAD JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xB03 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xB08 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xB1D JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x330 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x305 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x8 DUP2 MSTORE PUSH8 0x3A3930B739B332B9 PUSH1 0xC1 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC43 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC18 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC43 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC26 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0xC54 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0xD42 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xC77 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xCE3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCC1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xCE3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCCF JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xD25 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xD3F JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH2 0x54A CALLER DUP7 DUP7 PUSH2 0x1180 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x330 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x305 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x9 DUP2 MSTORE PUSH9 0x616C6C6F77616E6365 PUSH1 0xB8 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xE54 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xE29 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xE54 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xE37 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0xE65 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0xF53 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xE88 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xEF4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xED2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xEF4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xEE0 JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xF36 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xF3B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xF50 JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xFB6 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF97 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1024 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1005 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x10C3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E6465722073686F756C642062652076616C696420616464726573730000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x111E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E65722073686F756C642062652076616C69642061646472657373000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x11DB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6473742073686F756C642062652076616C696420616464726573730000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1204 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1295 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1239 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x12DE AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12D7 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x1320 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12D7 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH2 0x13B7 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x13AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1374 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x135C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13A1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x140C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x1374 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x135C JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1456 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1483 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1483 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1483 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1468 JUMP JUMPDEST POP PUSH2 0x148F SWAP3 SWAP2 POP PUSH2 0x1493 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x14AD SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x148F JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1499 JUMP JUMPDEST SWAP1 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xA5 PUSH29 0x7438AA5481A5C9CBFF30777B144454ED48E8C2B54A50C493F2002DD46F 0xD PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ","sourceMap":"1415:3575:11:-;;;1956:495;8:9:-1;5:2;;;30:1;27;20:12;5:2;1956:495:11;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1956:495:11;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;1956:495:11;;420:4:-1;411:14;;;;1956:495:11;;;;;411:14:-1;1956:495:11;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1956:495:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1956:495:11;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;1956:495:11;;420:4:-1;411:14;;;;1956:495:11;;;;;411:14:-1;1956:495:11;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1956:495:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;1956:495:11;;420:4:-1;411:14;;;;1956:495:11;;;;;411:14:-1;1956:495:11;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1956:495:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;1956:495:11;;420:4:-1;411:14;;;;1956:495:11;;;;;411:14:-1;1956:495:11;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1956:495:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1956:495:11;;;;2196:12;:29;;;2246:10;2235:22;;;;:10;:22;;;;;;;:39;;;2284:17;;;;-1:-1:-1;2235:22:11;;-1:-1:-1;2284:17:11;;;;-1:-1:-1;2284:17:11;:::i;:::-;-1:-1:-1;2311:21:11;;;;:6;;:21;;;;;:::i;:::-;-1:-1:-1;2342:8:11;:24;;-1:-1:-1;;2342:24:11;;;;;;;2376:34;;;;:15;;:34;;;;;:::i;:::-;-1:-1:-1;2420:24:11;;;;:10;;:24;;;;;:::i;:::-;;1956:495;;;;;;1415:3575;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1415:3575:11;;;-1:-1:-1;1415:3575:11;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100b45760003560e01c80636f19d6ff116100715780636f19d6ff1461021257806370a082311461021a57806395d89b4114610240578063a9059cbb14610248578063a952e07114610274578063dd62ed3e1461027c576100b4565b806306fdde03146100b957806308bca56614610136578063095ea7b31461016457806318160ddd146101a457806323b872dd146101be578063313ce567146101f4575b600080fd5b6100c16102aa565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100fb5781810151838201526020016100e3565b50505050905090810190601f1680156101285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101626004803603604081101561014c57600080fd5b506001600160a01b038135169060200135610338565b005b6101906004803603604081101561017a57600080fd5b506001600160a01b038135169060200135610398565b604080519115158252519081900360200190f35b6101ac610555565b60408051918252519081900360200190f35b610190600480360360608110156101d457600080fd5b506001600160a01b0381358116916020810135909116906040013561070c565b6101fc610911565b6040805160ff9092168252519081900360200190f35b6100c161091a565b6101ac6004803603602081101561023057600080fd5b50356001600160a01b0316610975565b6100c1610b3e565b6101906004803603604081101561025e57600080fd5b506001600160a01b038135169060200135610b98565b6100c1610d4d565b6101ac6004803603604081101561029257600080fd5b506001600160a01b0381358116916020013516610da8565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103305780601f1061030557610100808354040283529160200191610330565b820191906000526020600020905b81548152906001019060200180831161031357829003601f168201915b505050505081565b6001600160a01b03821660008181526005602090815260409182902080548501905560038054850190558151848152915130927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92908290030190a35050565b604080518082018252600780825266617070726f766560c81b6020808401919091528154845160026001831615610100026000190190921691909104601f810183900483028201830190955284815260009460609391928301828280156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b505050505090506104518183610f81565b1561053f5760408051602081019182905260009081905261047491600791611415565b5060006060336001600160a01b0316600660405180828054600181600116156101000203166002900480156104e05780601f106104be5761010080835404028352918201916104e0565b820191906000526020600020905b8154815290600101906020018083116104cc575b50509150506000604051808303816000865af19150503d8060008114610522576040519150601f19603f3d011682016040523d82523d6000602084013e610527565b606091505b5091509150600082141561053c573d60208201fd5b50505b61054a338686611068565b506001949350505050565b604080518082018252600b81526a746f74616c537570706c7960a81b60208083019190915260078054845160026001831615610100026000190190921691909104601f81018490048402820184019095528481526000946060939192918301828280156106035780601f106105d857610100808354040283529160200191610603565b820191906000526020600020905b8154815290600101906020018083116105e657829003601f168201915b505050505090506106148183610f81565b156107025760408051602081019182905260009081905261063791600791611415565b5060006060336001600160a01b0316600660405180828054600181600116156101000203166002900480156106a35780601f106106815761010080835404028352918201916106a3565b820191906000526020600020905b81548152906001019060200180831161068f575b50509150506000604051808303816000865af19150503d80600081146106e5576040519150601f19603f3d011682016040523d82523d6000602084013e6106ea565b606091505b509150915060008214156106ff573d60208201fd5b50505b6003549250505090565b604080518082018252600c81526b7472616e7366657246726f6d60a01b60208083019190915260078054845160026001831615610100026000190190921691909104601f81018490048402820184019095528481526000946060939192918301828280156107bb5780601f10610790576101008083540402835291602001916107bb565b820191906000526020600020905b81548152906001019060200180831161079e57829003601f168201915b505050505090506107cc8183610f81565b156108ba576040805160208101918290526000908190526107ef91600791611415565b5060006060336001600160a01b03166006604051808280546001816001161561010002031660029004801561085b5780601f1061083957610100808354040283529182019161085b565b820191906000526020600020905b815481529060010190602001808311610847575b50509150506000604051808303816000865af19150503d806000811461089d576040519150601f19603f3d011682016040523d82523d6000602084013e6108a2565b606091505b509150915060008214156108b7573d60208201fd5b50505b6108c5868686611180565b6001600160a01b038616600090815260046020908152604080832033808552925290912054610905918891610900908863ffffffff61129516565b611068565b50600195945050505050565b60025460ff1681565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103305780601f1061030557610100808354040283529160200191610330565b60408051808201825260098152683130b630b731b2a7b360b91b60208083019190915260078054845160026001831615610100026000190190921691909104601f8101849004840282018401909552848152600094606093919291830182828015610a215780601f106109f657610100808354040283529160200191610a21565b820191906000526020600020905b815481529060010190602001808311610a0457829003601f168201915b50505050509050610a328183610f81565b15610b2057604080516020810191829052600090819052610a5591600791611415565b5060006060336001600160a01b031660066040518082805460018160011615610100020316600290048015610ac15780601f10610a9f576101008083540402835291820191610ac1565b820191906000526020600020905b815481529060010190602001808311610aad575b50509150506000604051808303816000865af19150503d8060008114610b03576040519150601f19603f3d011682016040523d82523d6000602084013e610b08565b606091505b50915091506000821415610b1d573d60208201fd5b50505b5050506001600160a01b031660009081526005602052604090205490565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103305780601f1061030557610100808354040283529160200191610330565b60408051808201825260088152673a3930b739b332b960c11b60208083019190915260078054845160026001831615610100026000190190921691909104601f8101849004840282018401909552848152600094606093919291830182828015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b50505050509050610c548183610f81565b15610d4257604080516020810191829052600090819052610c7791600791611415565b5060006060336001600160a01b031660066040518082805460018160011615610100020316600290048015610ce35780601f10610cc1576101008083540402835291820191610ce3565b820191906000526020600020905b815481529060010190602001808311610ccf575b50509150506000604051808303816000865af19150503d8060008114610d25576040519150601f19603f3d011682016040523d82523d6000602084013e610d2a565b606091505b50915091506000821415610d3f573d60208201fd5b50505b61054a338686611180565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156103305780601f1061030557610100808354040283529160200191610330565b6040805180820182526009815268616c6c6f77616e636560b81b60208083019190915260078054845160026001831615610100026000190190921691909104601f8101849004840282018401909552848152600094606093919291830182828015610e545780601f10610e2957610100808354040283529160200191610e54565b820191906000526020600020905b815481529060010190602001808311610e3757829003601f168201915b50505050509050610e658183610f81565b15610f5357604080516020810191829052600090819052610e8891600791611415565b5060006060336001600160a01b031660066040518082805460018160011615610100020316600290048015610ef45780601f10610ed2576101008083540402835291820191610ef4565b820191906000526020600020905b815481529060010190602001808311610ee0575b50509150506000604051808303816000865af19150503d8060008114610f36576040519150601f19603f3d011682016040523d82523d6000602084013e610f3b565b606091505b50915091506000821415610f50573d60208201fd5b50505b5050506001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6000816040516020018082805190602001908083835b60208310610fb65780518252601f199092019160209182019101610f97565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106110245780518252601f199092019160209182019101611005565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b6001600160a01b0382166110c3576040805162461bcd60e51b815260206004820152601e60248201527f73656e6465722073686f756c642062652076616c696420616464726573730000604482015290519081900360640190fd5b6001600160a01b03831661111e576040805162461bcd60e51b815260206004820152601d60248201527f6f776e65722073686f756c642062652076616c69642061646472657373000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0382166111db576040805162461bcd60e51b815260206004820152601b60248201527f6473742073686f756c642062652076616c696420616464726573730000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260056020526040902054611204908263ffffffff61129516565b6001600160a01b038085166000908152600560205260408082209390935590841681522054611239908263ffffffff6112de16565b6001600160a01b0380841660008181526005602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60006112d783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611320565b9392505050565b60006112d783836040518060400160405280601b81526020017f536166654d6174683a206164646974696f6e206f766572666c6f7700000000008152506113b7565b600081848411156113af5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561137457818101518382015260200161135c565b50505050905090810190601f1680156113a15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000838301828582101561140c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561137457818101518382015260200161135c565b50949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061145657805160ff1916838001178555611483565b82800160010185558215611483579182015b82811115611483578251825591602001919060010190611468565b5061148f929150611493565b5090565b6114ad91905b8082111561148f5760008155600101611499565b9056fea265627a7a72315820a57c7438aa5481a5c9cbff30777b144454ed48e8c2b54a50c493f2002dd46f0d64736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xB4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6F19D6FF GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x6F19D6FF EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x240 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xA952E071 EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x27C JUMPI PUSH2 0xB4 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0x8BCA566 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x164 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0x2AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x128 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x338 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x190 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x398 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1AC PUSH2 0x555 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x190 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x70C JUMP JUMPDEST PUSH2 0x1FC PUSH2 0x911 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC1 PUSH2 0x91A JUMP JUMPDEST PUSH2 0x1AC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x975 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0xB3E JUMP JUMPDEST PUSH2 0x190 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x25E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xB98 JUMP JUMPDEST PUSH2 0xC1 PUSH2 0xD4D JUMP JUMPDEST PUSH2 0x1AC PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0xDA8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x330 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x305 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x330 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x313 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE PUSH1 0x3 DUP1 SLOAD DUP6 ADD SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD ADDRESS SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x7 DUP1 DUP3 MSTORE PUSH7 0x617070726F7665 PUSH1 0xC8 SHL PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP4 SWAP1 DIV DUP4 MUL DUP3 ADD DUP4 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x440 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x415 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x440 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x423 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x451 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0x53F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0x474 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x4E0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x4BE JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x4E0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x4CC JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x522 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x527 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x53C JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH2 0x54A CALLER DUP7 DUP7 PUSH2 0x1068 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xB DUP2 MSTORE PUSH11 0x746F74616C537570706C79 PUSH1 0xA8 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x603 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5D8 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x603 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x5E6 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x614 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0x702 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0x637 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x6A3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x681 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x6A3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x68F JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6E5 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6EA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x6FF JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH1 0x3 SLOAD SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0xC DUP2 MSTORE PUSH12 0x7472616E7366657246726F6D PUSH1 0xA0 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7BB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x790 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7BB JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x79E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0x7CC DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0x8BA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0x7EF SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0x85B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x839 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0x85B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x847 JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x89D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x8A2 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x8B7 JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH2 0x8C5 DUP7 DUP7 DUP7 PUSH2 0x1180 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x905 SWAP2 DUP9 SWAP2 PUSH2 0x900 SWAP1 DUP9 PUSH4 0xFFFFFFFF PUSH2 0x1295 AND JUMP JUMPDEST PUSH2 0x1068 JUMP JUMPDEST POP PUSH1 0x1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x6 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x330 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x305 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x9 DUP2 MSTORE PUSH9 0x3130B630B731B2A7B3 PUSH1 0xB9 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xA21 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x9F6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xA21 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA04 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0xA32 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0xB20 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xA55 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xAC1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xA9F JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xAC1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xAAD JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xB03 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xB08 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xB1D JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 DUP5 DUP7 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x330 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x305 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x8 DUP2 MSTORE PUSH8 0x3A3930B739B332B9 PUSH1 0xC1 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xC43 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xC18 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xC43 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xC26 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0xC54 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0xD42 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xC77 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xCE3 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCC1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xCE3 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCCF JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xD25 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xD3F JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST PUSH2 0x54A CALLER DUP7 DUP7 PUSH2 0x1180 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x2 PUSH1 0x1 DUP6 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP3 MSTORE DUP2 DUP2 MSTORE SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x330 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x305 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x9 DUP2 MSTORE PUSH9 0x616C6C6F77616E6365 PUSH1 0xB8 SHL PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP1 SLOAD DUP5 MLOAD PUSH1 0x2 PUSH1 0x1 DUP4 AND ISZERO PUSH2 0x100 MUL PUSH1 0x0 NOT ADD SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP5 SWAP1 DIV DUP5 MUL DUP3 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP5 DUP2 MSTORE PUSH1 0x0 SWAP5 PUSH1 0x60 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xE54 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xE29 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xE54 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xE37 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP PUSH2 0xE65 DUP2 DUP4 PUSH2 0xF81 JUMP JUMPDEST ISZERO PUSH2 0xF53 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xE88 SWAP2 PUSH1 0x7 SWAP2 PUSH2 0x1415 JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x60 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV DUP1 ISZERO PUSH2 0xEF4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xED2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 DUP3 ADD SWAP2 PUSH2 0xEF4 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xEE0 JUMPI JUMPDEST POP POP SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xF36 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xF3B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0xF50 JUMPI RETURNDATASIZE PUSH1 0x20 DUP3 ADD REVERT JUMPDEST POP POP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0xFB6 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xF97 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x1024 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1005 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 EQ SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x10C3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73656E6465722073686F756C642062652076616C696420616464726573730000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x111E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6F776E65722073686F756C642062652076616C69642061646472657373000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x11DB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6473742073686F756C642062652076616C696420616464726573730000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1204 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x1295 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1239 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x12DE AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12D7 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x1320 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12D7 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH2 0x13B7 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x13AF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1374 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x135C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13A1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 ADD DUP3 DUP6 DUP3 LT ISZERO PUSH2 0x140C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x1374 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x135C JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x1456 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1483 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1483 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1483 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1468 JUMP JUMPDEST POP PUSH2 0x148F SWAP3 SWAP2 POP PUSH2 0x1493 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x14AD SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x148F JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1499 JUMP JUMPDEST SWAP1 JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 0xA5 PUSH29 0x7438AA5481A5C9CBFF30777B144454ED48E8C2B54A50C493F2002DD46F 0xD PUSH5 0x736F6C6343 STOP SDIV LT STOP ORIGIN ","sourceMap":"1415:3575:11:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1415:3575:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1652:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1652:18:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3115:186;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3115:186:11;;;;;;;;:::i;:::-;;3583:174;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3583:174:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3307:107;;;:::i;:::-;;;;;;;;;;;;;;;;4073:289;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4073:289:11;;;;;;;;;;;;;;;;;:::i;1702:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1891:28;;;:::i;3763:129::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3763:129:11;-1:-1:-1;;;;;3763:129:11;;:::i;1676:20::-;;;:::i;3898:169::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3898:169:11;;;;;;;;:::i;1925:24::-;;;:::i;3420:157::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3420:157:11;;;;;;;;;;:::i;1652:18::-;;;;;;;;;;;;;;;-1:-1:-1;;1652:18:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3115:186::-;-1:-1:-1;;;;;3183:18:11;;;;;;:10;:18;;;;;;;;;:27;;;;;;3220:12;:21;;;;;;3256:38;;;;;;;3273:4;;3256:38;;;;;;;;;3115:186;;:::o;3583:174::-;2457:467;;;;;;;;;;;;-1:-1:-1;;;2457:467:11;;;;;;;;2507:38;;;;;;;;;;;-1:-1:-1;;2507:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2507:25:11;;:38;;;;2457:467;2507:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2559:36;2574:11;2587:7;2559:14;:36::i;:::-;2555:351;;;2611:15;;;;;;;;;;-1:-1:-1;2611:15:11;;;;;;:10;;:15;:::i;:::-;;2663:12;2677:23;2704:10;-1:-1:-1;;;;;2704:15:11;2720;2704:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2662:74:11;;;;2792:1;2783:7;2780:14;2777:2;;;2847:16;2840:4;2828:10;2824:21;2817:47;2777:2;2759:137;;;3692:37;3701:10;3713:7;3722:6;3692:8;:37::i;:::-;-1:-1:-1;3746:4:11;;3583:174;-1:-1:-1;;;;3583:174:11:o;3307:107::-;2457:467;;;;;;;;;;;-1:-1:-1;;;2457:467:11;;;;;;;;2535:10;2507:38;;;;;;;;;;;-1:-1:-1;;2507:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2507:25:11;;:38;;2535:10;2507:38;;2535:10;2507:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2559:36;2574:11;2587:7;2559:14;:36::i;:::-;2555:351;;;2611:15;;;;;;;;;;-1:-1:-1;2611:15:11;;;;;;:10;;:15;:::i;:::-;;2663:12;2677:23;2704:10;-1:-1:-1;;;;;2704:15:11;2720;2704:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2662:74:11;;;;2792:1;2783:7;2780:14;2777:2;;;2847:16;2840:4;2828:10;2824:21;2817:47;2777:2;2759:137;;;3395:12;;3388:19;;3307:107;;;:::o;4073:289::-;2457:467;;;;;;;;;;;-1:-1:-1;;;2457:467:11;;;;;;;;2535:10;2507:38;;;;;;;;;;;-1:-1:-1;;2507:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2507:25:11;;:38;;2535:10;2507:38;;2535:10;2507:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2559:36;2574:11;2587:7;2559:14;:36::i;:::-;2555:351;;;2611:15;;;;;;;;;;-1:-1:-1;2611:15:11;;;;;;:10;;:15;:::i;:::-;;2663:12;2677:23;2704:10;-1:-1:-1;;;;;2704:15:11;2720;2704:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2662:74:11;;;;2792:1;2783:7;2780:14;2777:2;;;2847:16;2840:4;2828:10;2824:21;2817:47;2777:2;2759:137;;;4231:27;4241:3;4246;4251:6;4231:9;:27::i;:::-;-1:-1:-1;;;;;4294:15:11;;;;;;:10;:15;;;;;;;;4282:10;4294:27;;;;;;;;;4268:66;;4277:3;;4294:39;;4326:6;4294:39;:31;:39;:::i;:::-;4268:8;:66::i;:::-;-1:-1:-1;4351:4:11;;4073:289;-1:-1:-1;;;;;4073:289:11:o;1702:21::-;;;;;;:::o;1891:28::-;;;;;;;;;;;;;;;-1:-1:-1;;1891:28:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3763:129;2457:467;;;;;;;;;;;-1:-1:-1;;;2457:467:11;;;;;;;;2535:10;2507:38;;;;;;;;;;;-1:-1:-1;;2507:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2507:25:11;;:38;;2535:10;2507:38;;2535:10;2507:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2559:36;2574:11;2587:7;2559:14;:36::i;:::-;2555:351;;;2611:15;;;;;;;;;;-1:-1:-1;2611:15:11;;;;;;:10;;:15;:::i;:::-;;2663:12;2677:23;2704:10;-1:-1:-1;;;;;2704:15:11;2720;2704:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2662:74:11;;;;2792:1;2783:7;2780:14;2777:2;;;2847:16;2840:4;2828:10;2824:21;2817:47;2777:2;2759:137;;;-1:-1:-1;;;;;;;;3868:17:11;;;;;:10;:17;;;;;;;3763:129::o;1676:20::-;;;;;;;;;;;;;;;-1:-1:-1;;1676:20:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3898:169;2457:467;;;;;;;;;;;-1:-1:-1;;;2457:467:11;;;;;;;;2535:10;2507:38;;;;;;;;;;;-1:-1:-1;;2507:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2507:25:11;;:38;;2535:10;2507:38;;2535:10;2507:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2559:36;2574:11;2587:7;2559:14;:36::i;:::-;2555:351;;;2611:15;;;;;;;;;;-1:-1:-1;2611:15:11;;;;;;:10;;:15;:::i;:::-;;2663:12;2677:23;2704:10;-1:-1:-1;;;;;2704:15:11;2720;2704:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2662:74:11;;;;2792:1;2783:7;2780:14;2777:2;;;2847:16;2840:4;2828:10;2824:21;2817:47;2777:2;2759:137;;;4005:34;4015:10;4027:3;4032:6;4005:9;:34::i;1925:24::-;;;;;;;;;;;;;;;-1:-1:-1;;1925:24:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:157;2457:467;;;;;;;;;;;-1:-1:-1;;;2457:467:11;;;;;;;;2535:10;2507:38;;;;;;;;;;;-1:-1:-1;;2507:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2507:25:11;;:38;;2535:10;2507:38;;2535:10;2507:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2559:36;2574:11;2587:7;2559:14;:36::i;:::-;2555:351;;;2611:15;;;;;;;;;;-1:-1:-1;2611:15:11;;;;;;:10;;:15;:::i;:::-;;2663:12;2677:23;2704:10;-1:-1:-1;;;;;2704:15:11;2720;2704:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2662:74:11;;;;2792:1;2783:7;2780:14;2777:2;;;2847:16;2840:4;2828:10;2824:21;2817:47;2777:2;2759:137;;;-1:-1:-1;;;;;;;;3544:17:11;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;3420:157::o;2930:179::-;3011:4;3098:1;3080:21;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3080:21:11;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3080:21:11;;;3070:32;;;;;;3062:1;3044:21;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3044:21:11;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3044:21:11;;;3034:32;;;;;;:68;3027:75;;2930:179;;;;:::o;4368:319::-;-1:-1:-1;;;;;4461:21:11;;4453:64;;;;;-1:-1:-1;;;4453:64:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4535:19:11;;4527:61;;;;;-1:-1:-1;;;4527:61:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4598:17:11;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;:35;;;4648:32;;;;;;;;;;;;;;;;;4368:319;;;:::o;4693:295::-;-1:-1:-1;;;;;4781:17:11;;4773:57;;;;;-1:-1:-1;;;4773:57:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4858:15:11;;;;;;:10;:15;;;;;;:27;;4878:6;4858:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;4840:15:11;;;;;;;:10;:15;;;;;;:45;;;;4913:15;;;;;;;:27;;4933:6;4913:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;4895:15:11;;;;;;;:10;:15;;;;;;;;;:45;;;;4955:26;;;;;;;4895:15;;4955:26;;;;;;;;;;;;;4693:295;;;:::o;1701:134:9:-;1759:7;1785:43;1789:1;1792;1785:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1778:50;1701:134;-1:-1:-1;;;1701:134:9:o;835:131::-;893:7;919:40;923:1;926;919:40;;;;;;;;;;;;;;;;;:3;:40::i;2119:187::-;2205:7;2240:12;2232:6;;;;2224:29;;;;-1:-1:-1;;;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2224:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2275:5:9;;;2119:187::o;1250:::-;1336:7;1367:5;;;1398:12;1390:6;;;;1382:29;;;;-1:-1:-1;;;1382:29:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1382:29:9;-1:-1:-1;1429:1:9;1250:187;-1:-1:-1;;;;1250:187:9:o;1415:3575:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1415:3575:11;;;-1:-1:-1;1415:3575:11;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"1069800","executionCost":"infinite","totalCost":"infinite"},"external":{"allocateTo(address,uint256)":"43787","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","balanceOf(address)":"infinite","decimals()":"1124","name()":"infinite","reEntryCallData()":"infinite","reEntryFun()":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"_approve(address,address,uint256)":"infinite","_transfer(address,address,uint256)":"infinite","compareStrings(string memory,string memory)":"infinite"}},"methodIdentifiers":{"allocateTo(address,uint256)":"08bca566","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","reEntryCallData()":"6f19d6ff","reEntryFun()":"a952e071","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_tokenName\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimalUnits\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_reEntryCallData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_reEntryFun\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"allocateTo\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"reEntryCallData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"reEntryFun\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{},\"title\":\"The Venus Faucet Re-Entrant Test Token\"},\"userdoc\":{\"methods\":{},\"notice\":\"A test token that is malicious and tries to re-enter callers\"}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol\":\"FaucetTokenReEntrantHarness\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./GovernorBravoInterfaces.sol\\\";\\n\\n/**\\n * @title GovernorBravoDelegate\\n * @notice Venus Governance latest on chain governance includes several new features including variable proposal routes and fine grained pause control.\\n * Variable routes for proposals allows for governance paramaters such as voting threshold and timelocks to be customized based on the risk level and\\n * impact of the proposal. Added granularity to the pause control mechanism allows governance to pause individual actions on specific markets,\\n * which reduces impact on the protocol as a whole. This is particularly useful when applied to isolated pools.\\n *\\n * The goal of **Governance** is to increase governance efficiency, while mitigating and eliminating malicious or erroneous proposals.\\n *\\n * ## Details\\n *\\n * Governance has **3 main contracts**: **GovernanceBravoDelegate, XVSVault, XVS** token.\\n *\\n * - XVS token is the protocol token used for protocol users to cast their vote on submitted proposals.\\n * - XVSVault is the main staking contract for XVS. Users first stake their XVS in the vault and receive voting power proportional to their staked\\n * tokens that they can use to vote on proposals. Users also can choose to delegate their voting power to other users.\\n *\\n * # Governor Bravo\\n *\\n * `GovernanceBravoDelegate` is main Venus Governance contract. Users interact with it to:\\n * - Submit new proposal\\n * - Vote on a proposal\\n * - Cancel a proposal\\n * - Queue a proposal for execution with a timelock executor contract.\\n * `GovernanceBravoDelegate` uses the XVSVault to get restrict certain actions based on a user's voting power. The governance rules it inforces are:\\n * - A user's voting power must be greater than the `proposalThreshold` to submit a proposal\\n * - If a user's voting power drops below certain amount, anyone can cancel the the proposal. The governance guardian and proposal creator can also\\n * cancel a proposal at anytime before it is queued for execution.\\n *\\n * ## Venus Improvement Proposal\\n *\\n * Venus Governance allows for Venus Improvement Proposals (VIPs) to be categorized based on their impact and risk levels. This allows for optimizing proposals\\n * execution to allow for things such as expediting interest rate changes and quickly updating risk parameters, while moving slower on other types of proposals\\n * that can prevent a larger risk to the protocol and are not urgent. There are three different types of VIPs with different proposal paramters:\\n *\\n * - `NORMAL`\\n * - `FASTTRACK`\\n * - `CRITICAL`\\n *\\n * When initializing the `GovernorBravo` contract, the parameters for the three routes are set. The parameters are:\\n *\\n * - `votingDelay`: The delay in blocks between submitting a proposal and when voting begins\\n * - `votingPeriod`: The number of blocks where voting will be open\\n * - `proposalThreshold`: The number of votes required in order submit a proposal\\n *\\n * There is also a separate timelock executor contract for each route, which is used to dispatch the VIP for execution, giving even more control over the\\n * flow of each type of VIP.\\n *\\n * ## Voting\\n *\\n * After a VIP is proposed, voting is opened after the `votingDelay` has passed. For example, if `votingDelay = 0`, then voting will begin in the next block\\n * after the proposal has been submitted. After the delay, the proposal state is `ACTIVE` and users can cast their vote `for`, `against`, or `abstain`,\\n * weighted by their total voting power (tokens + delegated voting power). Abstaining from a voting allows for a vote to be cast and optionally include a\\n * comment, without the incrementing for or against vote count. The total voting power for the user is obtained by calling XVSVault's `getPriorVotes`.\\n *\\n * `GovernorBravoDelegate` also accepts [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signatures for voting on proposals via the external function\\n * `castVoteBySig`.\\n *\\n * ## Delegating\\n *\\n * A users voting power includes the amount of staked XVS the have staked as well as the votes delegate to them. Delegating is the process of a user loaning\\n * their voting power to another, so that the latter has the combined voting power of both users. This is an important feature because it allows for a user\\n * to let another user who they trust propose or vote in their place.\\n *\\n * The delegation of votes happens through the `XVSVault` contract by calling the `delegate` or `delegateBySig` functions. These same functions can revert\\n * vote delegation by calling the same function with a value of `0`.\\n */\\ncontract GovernorBravoDelegate is GovernorBravoDelegateStorageV3, GovernorBravoEvents {\\n    /// @notice The name of this contract\\n    string public constant name = \\\"Venus Governor Bravo\\\";\\n\\n    /// @notice The minimum setable proposal threshold\\n    uint public constant MIN_PROPOSAL_THRESHOLD = 150000e18; // 150,000 Xvs\\n\\n    /// @notice The maximum setable proposal threshold\\n    uint public constant MAX_PROPOSAL_THRESHOLD = 300000e18; //300,000 Xvs\\n\\n    /// @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\\n    uint public constant quorumVotes = 600000e18; // 600,000 = 2% of Xvs\\n\\n    /// @notice The EIP-712 typehash for the contract's domain\\n    bytes32 public constant DOMAIN_TYPEHASH =\\n        keccak256(\\\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\\\");\\n\\n    /// @notice The EIP-712 typehash for the ballot struct used by the contract\\n    bytes32 public constant BALLOT_TYPEHASH = keccak256(\\\"Ballot(uint256 proposalId,uint8 support)\\\");\\n\\n    /**\\n     * @notice Used to initialize the contract during delegator contructor\\n     * @param xvsVault_ The address of the XvsVault\\n     * @param proposalConfigs_ Governance configs for each governance route\\n     * @param timelocks Timelock addresses for each governance route\\n     */\\n    function initialize(\\n        address xvsVault_,\\n        ValidationParams memory validationParams_,\\n        ProposalConfig[] memory proposalConfigs_,\\n        TimelockInterface[] memory timelocks,\\n        address guardian_\\n    ) public {\\n        require(address(proposalTimelocks[0]) == address(0), \\\"GovernorBravo::initialize: cannot initialize twice\\\");\\n        require(msg.sender == admin, \\\"GovernorBravo::initialize: admin only\\\");\\n        require(xvsVault_ != address(0), \\\"GovernorBravo::initialize: invalid xvs vault address\\\");\\n        require(guardian_ != address(0), \\\"GovernorBravo::initialize: invalid guardian\\\");\\n        require(\\n            timelocks.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of timelocks should match number of governance routes\\\"\\n        );\\n        require(\\n            proposalConfigs_.length == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::initialize:number of proposal configs should match number of governance routes\\\"\\n        );\\n\\n        xvsVault = XvsVaultInterface(xvsVault_);\\n        proposalMaxOperations = 10;\\n        guardian = guardian_;\\n\\n        // Set parameters for each Governance Route\\n        setValidationParams(validationParams_);\\n        setProposalConfigs(proposalConfigs_);\\n\\n        uint256 arrLength = timelocks.length;\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(address(timelocks[i]) != address(0), \\\"GovernorBravo::initialize:invalid timelock address\\\");\\n            proposalTimelocks[i] = timelocks[i];\\n        }\\n    }\\n\\n    /**\\n     ** @notice Sets the validation parameters for voting delay and voting period\\n     ** @param newValidationParams Struct containing new minimum and maximum voting period and delay\\n     */\\n    function setValidationParams(ValidationParams memory newValidationParams) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setValidationParams: admin only\\\");\\n        require(\\n            newValidationParams.minVotingPeriod > 0 &&\\n                newValidationParams.minVotingDelay > 0 &&\\n                newValidationParams.minVotingDelay < newValidationParams.maxVotingDelay &&\\n                newValidationParams.minVotingPeriod < newValidationParams.maxVotingPeriod,\\n            \\\"GovernorBravo::setValidationParams: invalid params\\\"\\n        );\\n        emit SetValidationParams(\\n            validationParams.minVotingPeriod,\\n            newValidationParams.minVotingPeriod,\\n            validationParams.maxVotingPeriod,\\n            newValidationParams.maxVotingPeriod,\\n            validationParams.minVotingDelay,\\n            newValidationParams.minVotingDelay,\\n            validationParams.maxVotingDelay,\\n            newValidationParams.maxVotingDelay\\n        );\\n        validationParams = newValidationParams;\\n    }\\n\\n    /**\\n     ** @notice Sets the configuration for different proposal types\\n     ** @dev Requires validationParams to be configured before also it will set proposal config for all proposal types\\n     ** @param proposalConfigs_ Array of proposal configuration structs to update\\n     */\\n    function setProposalConfigs(ProposalConfig[] memory proposalConfigs_) public {\\n        require(msg.sender == admin, \\\"GovernorBravo::setProposalConfigs: admin only\\\");\\n        require(\\n            validationParams.minVotingPeriod > 0 &&\\n                validationParams.maxVotingPeriod > 0 &&\\n                validationParams.minVotingDelay > 0 &&\\n                validationParams.maxVotingDelay > 0,\\n            \\\"GovernorBravo::setProposalConfigs: validation params not configured yet\\\"\\n        );\\n        uint256 arrLength = proposalConfigs_.length;\\n        require(\\n            arrLength == getGovernanceRouteCount(),\\n            \\\"GovernorBravo::setProposalConfigs: invalid proposal config length\\\"\\n        );\\n        for (uint256 i; i < arrLength; ++i) {\\n            require(\\n                proposalConfigs_[i].votingPeriod >= validationParams.minVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingPeriod <= validationParams.maxVotingPeriod,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting period\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay >= validationParams.minVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].votingDelay <= validationParams.maxVotingDelay,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max voting delay\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold >= MIN_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid min proposal threshold\\\"\\n            );\\n            require(\\n                proposalConfigs_[i].proposalThreshold <= MAX_PROPOSAL_THRESHOLD,\\n                \\\"GovernorBravo::setProposalConfigs: invalid max proposal threshold\\\"\\n            );\\n\\n            proposalConfigs[i] = proposalConfigs_[i];\\n            emit SetProposalConfigs(\\n                proposalConfigs_[i].votingPeriod,\\n                proposalConfigs_[i].votingDelay,\\n                proposalConfigs_[i].proposalThreshold\\n            );\\n        }\\n    }\\n\\n    /**\\n     * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold.\\n     * targets, values, signatures, and calldatas must be of equal length\\n     * @dev NOTE: Proposals with duplicate set of actions can not be queued for execution. If the proposals consists\\n     *  of duplicate actions, it's recommended to split those actions into separate proposals\\n     * @param targets Target addresses for proposal calls\\n     * @param values BNB values for proposal calls\\n     * @param signatures Function signatures for proposal calls\\n     * @param calldatas Calldatas for proposal calls\\n     * @param description String description of the proposal\\n     * @param proposalType the type of the proposal (e.g NORMAL, FASTTRACK, CRITICAL)\\n     * @return Proposal id of new proposal\\n     */\\n    function propose(\\n        address[] memory targets,\\n        uint[] memory values,\\n        string[] memory signatures,\\n        bytes[] memory calldatas,\\n        string memory description,\\n        ProposalType proposalType\\n    ) public returns (uint) {\\n        // Reject proposals before initiating as Governor\\n        require(initialProposalId != 0, \\\"GovernorBravo::propose: Governor Bravo not active\\\");\\n        require(\\n            xvsVault.getPriorVotes(msg.sender, sub256(block.number, 1)) >=\\n                proposalConfigs[uint8(proposalType)].proposalThreshold,\\n            \\\"GovernorBravo::propose: proposer votes below proposal threshold\\\"\\n        );\\n        require(\\n            targets.length == values.length &&\\n                targets.length == signatures.length &&\\n                targets.length == calldatas.length,\\n            \\\"GovernorBravo::propose: proposal function information arity mismatch\\\"\\n        );\\n        require(targets.length != 0, \\\"GovernorBravo::propose: must provide actions\\\");\\n        require(targets.length <= proposalMaxOperations, \\\"GovernorBravo::propose: too many actions\\\");\\n\\n        uint latestProposalId = latestProposalIds[msg.sender];\\n        if (latestProposalId != 0) {\\n            ProposalState proposersLatestProposalState = state(latestProposalId);\\n            require(\\n                proposersLatestProposalState != ProposalState.Active,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already active proposal\\\"\\n            );\\n            require(\\n                proposersLatestProposalState != ProposalState.Pending,\\n                \\\"GovernorBravo::propose: one live proposal per proposer, found an already pending proposal\\\"\\n            );\\n        }\\n\\n        uint startBlock = add256(block.number, proposalConfigs[uint8(proposalType)].votingDelay);\\n        uint endBlock = add256(startBlock, proposalConfigs[uint8(proposalType)].votingPeriod);\\n\\n        proposalCount++;\\n        Proposal memory newProposal = Proposal({\\n            id: proposalCount,\\n            proposer: msg.sender,\\n            eta: 0,\\n            targets: targets,\\n            values: values,\\n            signatures: signatures,\\n            calldatas: calldatas,\\n            startBlock: startBlock,\\n            endBlock: endBlock,\\n            forVotes: 0,\\n            againstVotes: 0,\\n            abstainVotes: 0,\\n            canceled: false,\\n            executed: false,\\n            proposalType: uint8(proposalType)\\n        });\\n\\n        proposals[newProposal.id] = newProposal;\\n        latestProposalIds[newProposal.proposer] = newProposal.id;\\n\\n        emit ProposalCreated(\\n            newProposal.id,\\n            msg.sender,\\n            targets,\\n            values,\\n            signatures,\\n            calldatas,\\n            startBlock,\\n            endBlock,\\n            description,\\n            uint8(proposalType)\\n        );\\n        return newProposal.id;\\n    }\\n\\n    /**\\n     * @notice Queues a proposal of state succeeded\\n     * @param proposalId The id of the proposal to queue\\n     */\\n    function queue(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Succeeded,\\n            \\\"GovernorBravo::queue: proposal can only be queued if it is succeeded\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        uint eta = add256(block.timestamp, proposalTimelocks[uint8(proposal.proposalType)].delay());\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            queueOrRevertInternal(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                eta,\\n                uint8(proposal.proposalType)\\n            );\\n        }\\n        proposal.eta = eta;\\n        emit ProposalQueued(proposalId, eta);\\n    }\\n\\n    function queueOrRevertInternal(\\n        address target,\\n        uint value,\\n        string memory signature,\\n        bytes memory data,\\n        uint eta,\\n        uint8 proposalType\\n    ) internal {\\n        require(\\n            !proposalTimelocks[proposalType].queuedTransactions(\\n                keccak256(abi.encode(target, value, signature, data, eta))\\n            ),\\n            \\\"GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta\\\"\\n        );\\n        proposalTimelocks[proposalType].queueTransaction(target, value, signature, data, eta);\\n    }\\n\\n    /**\\n     * @notice Executes a queued proposal if eta has passed\\n     * @param proposalId The id of the proposal to execute\\n     */\\n    function execute(uint proposalId) external {\\n        require(\\n            state(proposalId) == ProposalState.Queued,\\n            \\\"GovernorBravo::execute: proposal can only be executed if it is queued\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        proposal.executed = true;\\n        for (uint i; i < proposal.targets.length; ++i) {\\n            proposalTimelocks[uint8(proposal.proposalType)].executeTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n        emit ProposalExecuted(proposalId);\\n    }\\n\\n    /**\\n     * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold\\n     * @param proposalId The id of the proposal to cancel\\n     */\\n    function cancel(uint proposalId) external {\\n        require(state(proposalId) != ProposalState.Executed, \\\"GovernorBravo::cancel: cannot cancel executed proposal\\\");\\n\\n        Proposal storage proposal = proposals[proposalId];\\n        require(\\n            msg.sender == guardian ||\\n                msg.sender == proposal.proposer ||\\n                xvsVault.getPriorVotes(proposal.proposer, sub256(block.number, 1)) <\\n                proposalConfigs[proposal.proposalType].proposalThreshold,\\n            \\\"GovernorBravo::cancel: proposer above threshold\\\"\\n        );\\n\\n        proposal.canceled = true;\\n        for (uint i = 0; i < proposal.targets.length; i++) {\\n            proposalTimelocks[proposal.proposalType].cancelTransaction(\\n                proposal.targets[i],\\n                proposal.values[i],\\n                proposal.signatures[i],\\n                proposal.calldatas[i],\\n                proposal.eta\\n            );\\n        }\\n\\n        emit ProposalCanceled(proposalId);\\n    }\\n\\n    /**\\n     * @notice Gets actions of a proposal\\n     * @param proposalId the id of the proposal\\n     * @return targets, values, signatures, and calldatas of the proposal actions\\n     */\\n    function getActions(\\n        uint proposalId\\n    )\\n        external\\n        view\\n        returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas)\\n    {\\n        Proposal storage p = proposals[proposalId];\\n        return (p.targets, p.values, p.signatures, p.calldatas);\\n    }\\n\\n    /**\\n     * @notice Gets the receipt for a voter on a given proposal\\n     * @param proposalId the id of proposal\\n     * @param voter The address of the voter\\n     * @return The voting receipt\\n     */\\n    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {\\n        return proposals[proposalId].receipts[voter];\\n    }\\n\\n    /**\\n     * @notice Gets the state of a proposal\\n     * @param proposalId The id of the proposal\\n     * @return Proposal state\\n     */\\n    function state(uint proposalId) public view returns (ProposalState) {\\n        require(\\n            proposalCount >= proposalId && proposalId > initialProposalId,\\n            \\\"GovernorBravo::state: invalid proposal id\\\"\\n        );\\n        Proposal storage proposal = proposals[proposalId];\\n        if (proposal.canceled) {\\n            return ProposalState.Canceled;\\n        } else if (block.number <= proposal.startBlock) {\\n            return ProposalState.Pending;\\n        } else if (block.number <= proposal.endBlock) {\\n            return ProposalState.Active;\\n        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {\\n            return ProposalState.Defeated;\\n        } else if (proposal.eta == 0) {\\n            return ProposalState.Succeeded;\\n        } else if (proposal.executed) {\\n            return ProposalState.Executed;\\n        } else if (\\n            block.timestamp >= add256(proposal.eta, proposalTimelocks[uint8(proposal.proposalType)].GRACE_PERIOD())\\n        ) {\\n            return ProposalState.Expired;\\n        } else {\\n            return ProposalState.Queued;\\n        }\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     */\\n    function castVote(uint proposalId, uint8 support) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal with a reason\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param reason The reason given for the vote by the voter\\n     */\\n    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {\\n        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);\\n    }\\n\\n    /**\\n     * @notice Cast a vote for a proposal by signature\\n     * @dev External function that accepts EIP-712 signatures for voting on proposals.\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @param v recovery id of ECDSA signature\\n     * @param r part of the ECDSA sig output\\n     * @param s part of the ECDSA sig output\\n     */\\n    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {\\n        bytes32 domainSeparator = keccak256(\\n            abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))\\n        );\\n        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));\\n        bytes32 digest = keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n        address signatory = ecrecover(digest, v, r, s);\\n        require(signatory != address(0), \\\"GovernorBravo::castVoteBySig: invalid signature\\\");\\n        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), \\\"\\\");\\n    }\\n\\n    /**\\n     * @notice Internal function that caries out voting logic\\n     * @param voter The voter that is casting their vote\\n     * @param proposalId The id of the proposal to vote on\\n     * @param support The support value for the vote. 0=against, 1=for, 2=abstain\\n     * @return The number of votes cast\\n     */\\n    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {\\n        require(state(proposalId) == ProposalState.Active, \\\"GovernorBravo::castVoteInternal: voting is closed\\\");\\n        require(support <= 2, \\\"GovernorBravo::castVoteInternal: invalid vote type\\\");\\n        Proposal storage proposal = proposals[proposalId];\\n        Receipt storage receipt = proposal.receipts[voter];\\n        require(receipt.hasVoted == false, \\\"GovernorBravo::castVoteInternal: voter already voted\\\");\\n        uint96 votes = xvsVault.getPriorVotes(voter, proposal.startBlock);\\n\\n        if (support == 0) {\\n            proposal.againstVotes = add256(proposal.againstVotes, votes);\\n        } else if (support == 1) {\\n            proposal.forVotes = add256(proposal.forVotes, votes);\\n        } else if (support == 2) {\\n            proposal.abstainVotes = add256(proposal.abstainVotes, votes);\\n        }\\n\\n        receipt.hasVoted = true;\\n        receipt.support = support;\\n        receipt.votes = votes;\\n\\n        return votes;\\n    }\\n\\n    /**\\n     * @notice Sets the new governance guardian\\n     * @param newGuardian the address of the new guardian\\n     */\\n    function _setGuardian(address newGuardian) external {\\n        require(msg.sender == guardian || msg.sender == admin, \\\"GovernorBravo::_setGuardian: admin or guardian only\\\");\\n        require(newGuardian != address(0), \\\"GovernorBravo::_setGuardian: cannot live without a guardian\\\");\\n        address oldGuardian = guardian;\\n        guardian = newGuardian;\\n\\n        emit NewGuardian(oldGuardian, newGuardian);\\n    }\\n\\n    /**\\n     * @notice Initiate the GovernorBravo contract\\n     * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count\\n     * @param governorAlpha The address for the Governor to continue the proposal id count from\\n     */\\n    function _initiate(address governorAlpha) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_initiate: admin only\\\");\\n        require(initialProposalId == 0, \\\"GovernorBravo::_initiate: can only initiate once\\\");\\n        proposalCount = GovernorAlphaInterface(governorAlpha).proposalCount();\\n        initialProposalId = proposalCount;\\n        for (uint256 i; i < getGovernanceRouteCount(); ++i) {\\n            proposalTimelocks[i].acceptAdmin();\\n        }\\n    }\\n\\n    /**\\n     * @notice Set max proposal operations\\n     * @dev Admin only.\\n     * @param proposalMaxOperations_ Max proposal operations\\n     */\\n    function _setProposalMaxOperations(uint proposalMaxOperations_) external {\\n        require(msg.sender == admin, \\\"GovernorBravo::_setProposalMaxOperations: admin only\\\");\\n        uint oldProposalMaxOperations = proposalMaxOperations;\\n        proposalMaxOperations = proposalMaxOperations_;\\n\\n        emit ProposalMaxOperationsUpdated(oldProposalMaxOperations, proposalMaxOperations_);\\n    }\\n\\n    /**\\n     * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.\\n     * @param newPendingAdmin New pending admin.\\n     */\\n    function _setPendingAdmin(address newPendingAdmin) external {\\n        // Check caller = admin\\n        require(msg.sender == admin, \\\"GovernorBravo:_setPendingAdmin: admin only\\\");\\n\\n        // Save current value, if any, for inclusion in log\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store pendingAdmin with value newPendingAdmin\\n        pendingAdmin = newPendingAdmin;\\n\\n        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)\\n        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);\\n    }\\n\\n    /**\\n     * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin\\n     * @dev Admin function for pending admin to accept role and update admin\\n     */\\n    function _acceptAdmin() external {\\n        // Check caller is pendingAdmin and pendingAdmin \\u2260 address(0)\\n        require(\\n            msg.sender == pendingAdmin && msg.sender != address(0),\\n            \\\"GovernorBravo:_acceptAdmin: pending admin only\\\"\\n        );\\n\\n        // Save current values for inclusion in log\\n        address oldAdmin = admin;\\n        address oldPendingAdmin = pendingAdmin;\\n\\n        // Store admin with value pendingAdmin\\n        admin = pendingAdmin;\\n\\n        // Clear the pending value\\n        pendingAdmin = address(0);\\n\\n        emit NewAdmin(oldAdmin, admin);\\n        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);\\n    }\\n\\n    function add256(uint256 a, uint256 b) internal pure returns (uint) {\\n        uint c = a + b;\\n        require(c >= a, \\\"addition overflow\\\");\\n        return c;\\n    }\\n\\n    function sub256(uint256 a, uint256 b) internal pure returns (uint) {\\n        require(b <= a, \\\"subtraction underflow\\\");\\n        return a - b;\\n    }\\n\\n    function getChainIdInternal() internal pure returns (uint) {\\n        uint chainId;\\n        assembly {\\n            chainId := chainid()\\n        }\\n        return chainId;\\n    }\\n\\n    function getGovernanceRouteCount() internal pure returns (uint8) {\\n        return uint8(ProposalType.CRITICAL) + 1;\\n    }\\n}\\n\",\"keccak256\":\"0xebfa7fbbd689a648d1771a76508090d09ac2290a0d0ee4d95a0729413058ebc4\"},\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoInterfaces.sol\":{\"content\":\"pragma solidity ^0.5.16;\\npragma experimental ABIEncoderV2;\\n\\n/**\\n * @title GovernorBravoEvents\\n * @author Venus\\n * @notice Set of events emitted by the GovernorBravo contracts.\\n */\\ncontract GovernorBravoEvents {\\n    /// @notice An event emitted when a new proposal is created\\n    event ProposalCreated(\\n        uint id,\\n        address proposer,\\n        address[] targets,\\n        uint[] values,\\n        string[] signatures,\\n        bytes[] calldatas,\\n        uint startBlock,\\n        uint endBlock,\\n        string description,\\n        uint8 proposalType\\n    );\\n\\n    /// @notice An event emitted when a vote has been cast on a proposal\\n    /// @param voter The address which casted a vote\\n    /// @param proposalId The proposal id which was voted on\\n    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain\\n    /// @param votes Number of votes which were cast by the voter\\n    /// @param reason The reason given for the vote by the voter\\n    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);\\n\\n    /// @notice An event emitted when a proposal has been canceled\\n    event ProposalCanceled(uint id);\\n\\n    /// @notice An event emitted when a proposal has been queued in the Timelock\\n    event ProposalQueued(uint id, uint eta);\\n\\n    /// @notice An event emitted when a proposal has been executed in the Timelock\\n    event ProposalExecuted(uint id);\\n\\n    /// @notice An event emitted when the voting delay is set\\n    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);\\n\\n    /// @notice An event emitted when the voting period is set\\n    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);\\n\\n    /// @notice Emitted when implementation is changed\\n    event NewImplementation(address oldImplementation, address newImplementation);\\n\\n    /// @notice Emitted when proposal threshold is set\\n    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);\\n\\n    /// @notice Emitted when pendingAdmin is changed\\n    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);\\n\\n    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated\\n    event NewAdmin(address oldAdmin, address newAdmin);\\n\\n    /// @notice Emitted when the new guardian address is set\\n    event NewGuardian(address oldGuardian, address newGuardian);\\n\\n    /// @notice Emitted when the maximum number of operations in one proposal is updated\\n    event ProposalMaxOperationsUpdated(uint oldMaxOperations, uint newMaxOperations);\\n\\n    /// @notice Emitted when the new validation params are set\\n    event SetValidationParams(\\n        uint256 oldMinVotingPeriod,\\n        uint256 newMinVotingPeriod,\\n        uint256 oldmaxVotingPeriod,\\n        uint256 newmaxVotingPeriod,\\n        uint256 oldminVotingDelay,\\n        uint256 newminVotingDelay,\\n        uint256 oldmaxVotingDelay,\\n        uint256 newmaxVotingDelay\\n    );\\n\\n    /// @notice Emitted when new Proposal configs added\\n    event SetProposalConfigs(uint256 votingPeriod, uint256 votingDelay, uint256 proposalThreshold);\\n}\\n\\n/**\\n * @title GovernorBravoDelegatorStorage\\n * @author Venus\\n * @notice Storage layout of the `GovernorBravoDelegator` contract\\n */\\ncontract GovernorBravoDelegatorStorage {\\n    /// @notice Administrator for this contract\\n    address public admin;\\n\\n    /// @notice Pending administrator for this contract\\n    address public pendingAdmin;\\n\\n    /// @notice Active brains of Governor\\n    address public implementation;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV1\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new\\n * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {\\n    /// @notice DEPRECATED The delay before voting on a proposal may take place, once proposed, in blocks\\n    uint public votingDelay;\\n\\n    /// @notice DEPRECATED The duration of voting on a proposal, in blocks\\n    uint public votingPeriod;\\n\\n    /// @notice DEPRECATED The number of votes required in order for a voter to become a proposer\\n    uint public proposalThreshold;\\n\\n    /// @notice Initial proposal id set at become\\n    uint public initialProposalId;\\n\\n    /// @notice The total number of proposals\\n    uint public proposalCount;\\n\\n    /// @notice The address of the Venus Protocol Timelock\\n    TimelockInterface public timelock;\\n\\n    /// @notice The address of the Venus governance token\\n    XvsVaultInterface public xvsVault;\\n\\n    /// @notice The official record of all proposals ever proposed\\n    mapping(uint => Proposal) public proposals;\\n\\n    /// @notice The latest proposal for each proposer\\n    mapping(address => uint) public latestProposalIds;\\n\\n    struct Proposal {\\n        /// @notice Unique id for looking up a proposal\\n        uint id;\\n        /// @notice Creator of the proposal\\n        address proposer;\\n        /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds\\n        uint eta;\\n        /// @notice the ordered list of target addresses for calls to be made\\n        address[] targets;\\n        /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made\\n        uint[] values;\\n        /// @notice The ordered list of function signatures to be called\\n        string[] signatures;\\n        /// @notice The ordered list of calldata to be passed to each call\\n        bytes[] calldatas;\\n        /// @notice The block at which voting begins: holders must delegate their votes prior to this block\\n        uint startBlock;\\n        /// @notice The block at which voting ends: votes must be cast prior to this block\\n        uint endBlock;\\n        /// @notice Current number of votes in favor of this proposal\\n        uint forVotes;\\n        /// @notice Current number of votes in opposition to this proposal\\n        uint againstVotes;\\n        /// @notice Current number of votes for abstaining for this proposal\\n        uint abstainVotes;\\n        /// @notice Flag marking whether the proposal has been canceled\\n        bool canceled;\\n        /// @notice Flag marking whether the proposal has been executed\\n        bool executed;\\n        /// @notice Receipts of ballots for the entire set of voters\\n        mapping(address => Receipt) receipts;\\n        /// @notice The type of the proposal\\n        uint8 proposalType;\\n    }\\n\\n    /// @notice Ballot receipt record for a voter\\n    struct Receipt {\\n        /// @notice Whether or not a vote has been cast\\n        bool hasVoted;\\n        /// @notice Whether or not the voter supports the proposal or abstains\\n        uint8 support;\\n        /// @notice The number of votes the voter had, which were cast\\n        uint96 votes;\\n    }\\n\\n    /// @notice Possible states that a proposal may be in\\n    enum ProposalState {\\n        Pending,\\n        Active,\\n        Canceled,\\n        Defeated,\\n        Succeeded,\\n        Queued,\\n        Expired,\\n        Executed\\n    }\\n\\n    /// @notice The maximum number of actions that can be included in a proposal\\n    uint public proposalMaxOperations;\\n\\n    /// @notice A privileged role that can cancel any proposal\\n    address public guardian;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV2\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV2. Create a new\\n * contract which implements GovernorBravoDelegateStorageV2 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 {\\n    enum ProposalType {\\n        NORMAL,\\n        FASTTRACK,\\n        CRITICAL\\n    }\\n\\n    struct ProposalConfig {\\n        /// @notice The delay before voting on a proposal may take place, once proposed, in blocks\\n        uint256 votingDelay;\\n        /// @notice The duration of voting on a proposal, in blocks\\n        uint256 votingPeriod;\\n        /// @notice The number of votes required in order for a voter to become a proposer\\n        uint256 proposalThreshold;\\n    }\\n\\n    /// @notice mapping containing configuration for each proposal type\\n    mapping(uint => ProposalConfig) public proposalConfigs;\\n\\n    /// @notice mapping containing Timelock addresses for each proposal type\\n    mapping(uint => TimelockInterface) public proposalTimelocks;\\n}\\n\\n/**\\n * @title GovernorBravoDelegateStorageV3\\n * @dev For future upgrades, do not change GovernorBravoDelegateStorageV3. Create a new\\n * contract which implements GovernorBravoDelegateStorageV3 and following the naming convention\\n * GovernorBravoDelegateStorageVX.\\n */\\ncontract GovernorBravoDelegateStorageV3 is GovernorBravoDelegateStorageV2 {\\n    struct ValidationParams {\\n        uint256 minVotingPeriod;\\n        uint256 maxVotingPeriod;\\n        uint256 minVotingDelay;\\n        uint256 maxVotingDelay;\\n    }\\n    /// @notice Stores the current minimum and maximum values of voting delay and voting period\\n    ValidationParams public validationParams;\\n}\\n\\n/**\\n * @title TimelockInterface\\n * @author Venus\\n * @notice Interface implemented by the Timelock contract.\\n */\\ninterface TimelockInterface {\\n    function delay() external view returns (uint);\\n\\n    function GRACE_PERIOD() external view returns (uint);\\n\\n    function acceptAdmin() external;\\n\\n    function queuedTransactions(bytes32 hash) external view returns (bool);\\n\\n    function queueTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external returns (bytes32);\\n\\n    function cancelTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external;\\n\\n    function executeTransaction(\\n        address target,\\n        uint value,\\n        string calldata signature,\\n        bytes calldata data,\\n        uint eta\\n    ) external payable returns (bytes memory);\\n}\\n\\ninterface XvsVaultInterface {\\n    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);\\n}\\n\\ninterface GovernorAlphaInterface {\\n    /// @notice The total number of proposals\\n    function proposalCount() external returns (uint);\\n}\\n\",\"keccak256\":\"0x62c89309d4351dbeb5516465211fab0b566d83d60dc0148377deaad1f1929b85\"},\"@venusprotocol/venus-protocol/contracts/Utils/SafeMath.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n    /**\\n     * @dev Returns the addition of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `+` operator.\\n     *\\n     * Requirements:\\n     * - Addition cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return add(a, b, \\\"SafeMath: addition overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        uint256 c = a + b;\\n        require(c >= a, errorMessage);\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return sub(a, b, \\\"SafeMath: subtraction overflow\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n     * overflow (when the result is negative).\\n     *\\n     * Counterpart to Solidity's `-` operator.\\n     *\\n     * Requirements:\\n     * - Subtraction cannot overflow.\\n     */\\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b <= a, errorMessage);\\n        uint256 c = a - b;\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the multiplication of two unsigned integers, reverting on\\n     * overflow.\\n     *\\n     * Counterpart to Solidity's `*` operator.\\n     *\\n     * Requirements:\\n     * - Multiplication cannot overflow.\\n     */\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n        // benefit is lost if 'b' is also tested.\\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n        if (a == 0) {\\n            return 0;\\n        }\\n\\n        uint256 c = a * b;\\n        require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return div(a, b, \\\"SafeMath: division by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\\n     * division by zero. The result is rounded towards zero.\\n     *\\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n     * uses an invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        // Solidity only automatically asserts when dividing by 0\\n        require(b > 0, errorMessage);\\n        uint256 c = a / b;\\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\\n\\n        return c;\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n        return mod(a, b, \\\"SafeMath: modulo by zero\\\");\\n    }\\n\\n    /**\\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n     * Reverts with custom message when dividing by zero.\\n     *\\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\\n     * invalid opcode to revert (consuming all remaining gas).\\n     *\\n     * Requirements:\\n     * - The divisor cannot be zero.\\n     */\\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n        require(b != 0, errorMessage);\\n        return a % b;\\n    }\\n}\\n\",\"keccak256\":\"0x9431fd772ed4abc038cdfe9ce6c0066897bd1685ad45848748d1952935d5b8ef\"},\"@venusprotocol/venus-protocol/contracts/test/BEP20.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../Utils/SafeMath.sol\\\";\\n\\n// Mock import\\nimport { GovernorBravoDelegate } from \\\"@venusprotocol/governance-contracts/contracts/Governance/GovernorBravoDelegate.sol\\\";\\n\\ninterface BEP20Base {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function balanceOf(address who) external view returns (uint256);\\n}\\n\\ncontract BEP20 is BEP20Base {\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\\ncontract BEP20NS is BEP20Base {\\n    function transfer(address to, uint256 value) external;\\n\\n    function transferFrom(address from, address to, uint256 value) external;\\n}\\n\\n/**\\n * @title Standard BEP20 token\\n * @dev Implementation of the basic standard token.\\n *  See https://github.com/ethereum/EIPs/issues/20\\n */\\ncontract StandardToken is BEP20 {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool) {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\n/**\\n * @title Non-Standard BEP20 token\\n * @dev Version of BEP20 with no return values for `transfer` and `transferFrom`\\n *  See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca\\n */\\ncontract NonStandardToken is BEP20NS {\\n    using SafeMath for uint256;\\n\\n    string public name;\\n    uint8 public decimals;\\n    string public symbol;\\n    uint256 public totalSupply;\\n    mapping(address => mapping(address => uint256)) public allowance;\\n    mapping(address => uint256) public balanceOf;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public {\\n        totalSupply = _initialAmount;\\n        balanceOf[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external {\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external {\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n    }\\n\\n    function approve(address _spender, uint256 amount) external returns (bool) {\\n        allowance[msg.sender][_spender] = amount;\\n        emit Approval(msg.sender, _spender, amount);\\n        return true;\\n    }\\n}\\n\\ncontract BEP20Harness is StandardToken {\\n    // To support testing, we can specify addresses for which transferFrom should fail and return false\\n    mapping(address => bool) public failTransferFromAddresses;\\n\\n    // To support testing, we allow the contract to always fail `transfer`.\\n    mapping(address => bool) public failTransferToAddresses;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function harnessSetFailTransferFromAddress(address src, bool _fail) public {\\n        failTransferFromAddresses[src] = _fail;\\n    }\\n\\n    function harnessSetFailTransferToAddress(address dst, bool _fail) public {\\n        failTransferToAddresses[dst] = _fail;\\n    }\\n\\n    function harnessSetBalance(address _account, uint _amount) public {\\n        balanceOf[_account] = _amount;\\n    }\\n\\n    function transfer(address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferToAddresses[dst]) {\\n            return false;\\n        }\\n        balanceOf[msg.sender] = balanceOf[msg.sender].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(address src, address dst, uint256 amount) external returns (bool success) {\\n        // Added for testing purposes\\n        if (failTransferFromAddresses[src]) {\\n            return false;\\n        }\\n        allowance[src][msg.sender] = allowance[src][msg.sender].sub(amount, \\\"Insufficient allowance\\\");\\n        balanceOf[src] = balanceOf[src].sub(amount, \\\"Insufficient balance\\\");\\n        balanceOf[dst] = balanceOf[dst].add(amount, \\\"Balance overflow\\\");\\n        emit Transfer(src, dst, amount);\\n        return true;\\n    }\\n}\\n\",\"keccak256\":\"0x7d98ad3c72919f5bd9656594de427f427479b3f7f7355c459159de56d5ef4304\"},\"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"./BEP20.sol\\\";\\n\\n/**\\n * @title The Venus Faucet Test Token\\n * @author Venus\\n * @notice A simple test token that lets anyone get more of it.\\n */\\ncontract FaucetToken is StandardToken {\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public StandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf[_owner] += value;\\n        totalSupply += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n}\\n\\n/**\\n * @title The Venus Faucet Test Token (non-standard)\\n * @author Venus\\n * @notice A simple test token that lets anyone get more of it.\\n */\\ncontract FaucetNonStandardToken is NonStandardToken {\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol\\n    ) public NonStandardToken(_initialAmount, _tokenName, _decimalUnits, _tokenSymbol) {}\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf[_owner] += value;\\n        totalSupply += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n}\\n\\n/**\\n * @title The Venus Faucet Re-Entrant Test Token\\n * @author Venus\\n * @notice A test token that is malicious and tries to re-enter callers\\n */\\ncontract FaucetTokenReEntrantHarness {\\n    using SafeMath for uint256;\\n\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    string public name;\\n    string public symbol;\\n    uint8 public decimals;\\n    uint256 internal totalSupply_;\\n    mapping(address => mapping(address => uint256)) internal allowance_;\\n    mapping(address => uint256) internal balanceOf_;\\n\\n    bytes public reEntryCallData;\\n    string public reEntryFun;\\n\\n    constructor(\\n        uint256 _initialAmount,\\n        string memory _tokenName,\\n        uint8 _decimalUnits,\\n        string memory _tokenSymbol,\\n        bytes memory _reEntryCallData,\\n        string memory _reEntryFun\\n    ) public {\\n        totalSupply_ = _initialAmount;\\n        balanceOf_[msg.sender] = _initialAmount;\\n        name = _tokenName;\\n        symbol = _tokenSymbol;\\n        decimals = _decimalUnits;\\n        reEntryCallData = _reEntryCallData;\\n        reEntryFun = _reEntryFun;\\n    }\\n\\n    modifier reEnter(string memory funName) {\\n        string memory _reEntryFun = reEntryFun;\\n        if (compareStrings(_reEntryFun, funName)) {\\n            reEntryFun = \\\"\\\"; // Clear re-entry fun\\n            (bool success, bytes memory returndata) = msg.sender.call(reEntryCallData);\\n            assembly {\\n                if eq(success, 0) {\\n                    revert(add(returndata, 0x20), returndatasize())\\n                }\\n            }\\n        }\\n\\n        _;\\n    }\\n\\n    function compareStrings(string memory a, string memory b) internal pure returns (bool) {\\n        return keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)));\\n    }\\n\\n    function allocateTo(address _owner, uint256 value) public {\\n        balanceOf_[_owner] += value;\\n        totalSupply_ += value;\\n        emit Transfer(address(this), _owner, value);\\n    }\\n\\n    function totalSupply() public reEnter(\\\"totalSupply\\\") returns (uint256) {\\n        return totalSupply_;\\n    }\\n\\n    function allowance(address owner, address spender) public reEnter(\\\"allowance\\\") returns (uint256 remaining) {\\n        return allowance_[owner][spender];\\n    }\\n\\n    function approve(address spender, uint256 amount) public reEnter(\\\"approve\\\") returns (bool success) {\\n        _approve(msg.sender, spender, amount);\\n        return true;\\n    }\\n\\n    function balanceOf(address owner) public reEnter(\\\"balanceOf\\\") returns (uint256 balance) {\\n        return balanceOf_[owner];\\n    }\\n\\n    function transfer(address dst, uint256 amount) public reEnter(\\\"transfer\\\") returns (bool success) {\\n        _transfer(msg.sender, dst, amount);\\n        return true;\\n    }\\n\\n    function transferFrom(\\n        address src,\\n        address dst,\\n        uint256 amount\\n    ) public reEnter(\\\"transferFrom\\\") returns (bool success) {\\n        _transfer(src, dst, amount);\\n        _approve(src, msg.sender, allowance_[src][msg.sender].sub(amount));\\n        return true;\\n    }\\n\\n    function _approve(address owner, address spender, uint256 amount) internal {\\n        require(spender != address(0), \\\"sender should be valid address\\\");\\n        require(owner != address(0), \\\"owner should be valid address\\\");\\n        allowance_[owner][spender] = amount;\\n        emit Approval(owner, spender, amount);\\n    }\\n\\n    function _transfer(address src, address dst, uint256 amount) internal {\\n        require(dst != address(0), \\\"dst should be valid address\\\");\\n        balanceOf_[src] = balanceOf_[src].sub(amount);\\n        balanceOf_[dst] = balanceOf_[dst].add(amount);\\n        emit Transfer(src, dst, amount);\\n    }\\n}\\n\",\"keccak256\":\"0x7eee15e70d6c6f83c75682dd0aeecaa207416ee4d9d50fa488cae20784d4be17\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3542,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetTokenReEntrantHarness","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":3544,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetTokenReEntrantHarness","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":3546,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetTokenReEntrantHarness","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":3548,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetTokenReEntrantHarness","label":"totalSupply_","offset":0,"slot":"3","type":"t_uint256"},{"astId":3554,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetTokenReEntrantHarness","label":"allowance_","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":3558,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetTokenReEntrantHarness","label":"balanceOf_","offset":0,"slot":"5","type":"t_mapping(t_address,t_uint256)"},{"astId":3560,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetTokenReEntrantHarness","label":"reEntryCallData","offset":0,"slot":"6","type":"t_bytes_storage"},{"astId":3562,"contract":"@venusprotocol/venus-protocol/contracts/test/FaucetToken.sol:FaucetTokenReEntrantHarness","label":"reEntryFun","offset":0,"slot":"7","type":"t_string_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes_storage":{"encoding":"bytes","label":"bytes","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"methods":{},"notice":"A test token that is malicious and tries to re-enter callers"}}},"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol":{"InterestRateModelHarness":{"abi":[{"inputs":[{"internalType":"uint256","name":"borrowRate_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"borrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"failBorrowRate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_cash","type":"uint256"},{"internalType":"uint256","name":"_borrows","type":"uint256"},{"internalType":"uint256","name":"_reserves","type":"uint256"}],"name":"getBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_cash","type":"uint256"},{"internalType":"uint256","name":"_borrows","type":"uint256"},{"internalType":"uint256","name":"_reserves","type":"uint256"},{"internalType":"uint256","name":"_reserveFactor","type":"uint256"}],"name":"getSupplyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInterestRateModel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"opaqueBorrowFailureCode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"borrowRate_","type":"uint256"}],"name":"setBorrowRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"failBorrowRate_","type":"bool"}],"name":"setFailBorrowRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","methods":{},"title":"An Interest Rate Model for tests that can be instructed to return a failure instead of doing a calculation"},"evm":{"bytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b506040516102893803806102898339818101604052602081101561003357600080fd5b5051600155610242806100476000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063b81688161161005b578063b81688161461010d578063c4fd6b2d1461013c578063c914b43714610144578063dd3eaf041461014c57610088565b806315f240531461008d5780631f64eb4e146100c85780632191f92a146100e95780637ddeded114610105575b600080fd5b6100b6600480360360608110156100a357600080fd5b5080359060208101359060400135610169565b60408051918252519081900360200190f35b6100e7600480360360208110156100de57600080fd5b503515156101cd565b005b6100f16101e0565b604080519115158252519081900360200190f35b6100b66101e5565b6100b66004803603608081101561012357600080fd5b50803590602081013590604081013590606001356101ea565b6100f16101f9565b6100b6610202565b6100e76004803603602081101561016257600080fd5b5035610208565b6000805460ff16156101c2576040805162461bcd60e51b815260206004820152601960248201527f494e5445524553545f524154455f4d4f44454c5f4552524f5200000000000000604482015290519081900360640190fd5b506001549392505050565b6000805460ff1916911515919091179055565b600181565b601481565b60018054919003029392505050565b60005460ff1681565b60015481565b60015556fea265627a7a7231582090b2e7590a37b37fb130b80503e573258eb0f7226c9acf4fc10eb92ed3db9df964736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x289 CODESIZE SUB DUP1 PUSH2 0x289 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 SSTORE PUSH2 0x242 DUP1 PUSH2 0x47 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB8168816 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB8168816 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xC4FD6B2D EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0xC914B437 EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xDD3EAF04 EQ PUSH2 0x14C JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x15F24053 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x1F64EB4E EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x2191F92A EQ PUSH2 0xE9 JUMPI DUP1 PUSH4 0x7DDEDED1 EQ PUSH2 0x105 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x169 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xE7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x1CD JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF1 PUSH2 0x1E0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB6 PUSH2 0x1E5 JUMP JUMPDEST PUSH2 0xB6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x1EA JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x1F9 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x202 JUMP JUMPDEST PUSH2 0xE7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x162 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x208 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E5445524553545F524154455F4D4F44454C5F4552524F5200000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x14 DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD SWAP2 SWAP1 SUB MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 SWAP1 0xB2 0xE7 MSIZE EXP CALLDATACOPY 0xB3 PUSH32 0xB130B80503E573258EB0F7226C9ACF4FC10EB92ED3DB9DF964736F6C63430005 LT STOP ORIGIN ","sourceMap":"223:1040:12:-;;;400:78;8:9:-1;5:2;;;30:1;27;20:12;5:2;400:78:12;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;400:78:12;447:10;:24;223:1040;;;;;;"},"deployedBytecode":{"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c8063b81688161161005b578063b81688161461010d578063c4fd6b2d1461013c578063c914b43714610144578063dd3eaf041461014c57610088565b806315f240531461008d5780631f64eb4e146100c85780632191f92a146100e95780637ddeded114610105575b600080fd5b6100b6600480360360608110156100a357600080fd5b5080359060208101359060400135610169565b60408051918252519081900360200190f35b6100e7600480360360208110156100de57600080fd5b503515156101cd565b005b6100f16101e0565b604080519115158252519081900360200190f35b6100b66101e5565b6100b66004803603608081101561012357600080fd5b50803590602081013590604081013590606001356101ea565b6100f16101f9565b6100b6610202565b6100e76004803603602081101561016257600080fd5b5035610208565b6000805460ff16156101c2576040805162461bcd60e51b815260206004820152601960248201527f494e5445524553545f524154455f4d4f44454c5f4552524f5200000000000000604482015290519081900360640190fd5b506001549392505050565b6000805460ff1916911515919091179055565b600181565b601481565b60018054919003029392505050565b60005460ff1681565b60015481565b60015556fea265627a7a7231582090b2e7590a37b37fb130b80503e573258eb0f7226c9acf4fc10eb92ed3db9df964736f6c63430005100032","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB8168816 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB8168816 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xC4FD6B2D EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0xC914B437 EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0xDD3EAF04 EQ PUSH2 0x14C JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x15F24053 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x1F64EB4E EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x2191F92A EQ PUSH2 0xE9 JUMPI DUP1 PUSH4 0x7DDEDED1 EQ PUSH2 0x105 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x169 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xE7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x1CD JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF1 PUSH2 0x1E0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xB6 PUSH2 0x1E5 JUMP JUMPDEST PUSH2 0xB6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x1EA JUMP JUMPDEST PUSH2 0xF1 PUSH2 0x1F9 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x202 JUMP JUMPDEST PUSH2 0xE7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x162 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x208 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E5445524553545F524154455F4D4F44454C5F4552524F5200000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH1 0x1 SLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x14 DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD SWAP2 SWAP1 SUB MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP INVALID LOG2 PUSH6 0x627A7A723158 KECCAK256 SWAP1 0xB2 0xE7 MSIZE EXP CALLDATACOPY 0xB3 PUSH32 0xB130B80503E573258EB0F7226C9ACF4FC10EB92ED3DB9DF964736F6C63430005 LT STOP ORIGIN ","sourceMap":"223:1040:12:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;223:1040:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;690:272;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;690:272:12;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;484:105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;484:105:12;;;;:::i;:::-;;257:47:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;284:49:12;;;:::i;968:293::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;968:293:12;;;;;;;;;;;;;;;;;:::i;339:26::-;;;:::i;371:22::-;;;:::i;595:89::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;595:89:12;;:::i;690:272::-;777:4;884:14;;;;883:15;875:53;;;;;-1:-1:-1;;;875:53:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;945:10:12;;690:272;;;;;:::o;484:105::-;550:14;:32;;-1:-1:-1;;550:32:12;;;;;;;;;;484:105::o;257:47:3:-;300:4;257:47;:::o;284:49:12:-;331:2;284:49;:::o;968:293::-;1235:1;1221:10;;1235:18;;;1221:33;;968:293;-1:-1:-1;;;968:293:12:o;339:26::-;;;;;;:::o;371:22::-;;;;:::o;595:89::-;653:10;:24;595:89::o"},"gasEstimates":{"creation":{"codeDepositCost":"115600","executionCost":"infinite","totalCost":"infinite"},"external":{"borrowRate()":"1042","failBorrowRate()":"1032","getBorrowRate(uint256,uint256,uint256)":"1911","getSupplyRate(uint256,uint256,uint256,uint256)":"1111","isInterestRateModel()":"249","opaqueBorrowFailureCode()":"265","setBorrowRate(uint256)":"20255","setFailBorrowRate(bool)":"21054"}},"methodIdentifiers":{"borrowRate()":"c914b437","failBorrowRate()":"c4fd6b2d","getBorrowRate(uint256,uint256,uint256)":"15f24053","getSupplyRate(uint256,uint256,uint256,uint256)":"b8168816","isInterestRateModel()":"2191f92a","opaqueBorrowFailureCode()":"7ddeded1","setBorrowRate(uint256)":"dd3eaf04","setFailBorrowRate(bool)":"1f64eb4e"}},"metadata":"{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowRate_\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"borrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"failBorrowRate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_borrows\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserves\",\"type\":\"uint256\"}],\"name\":\"getBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_borrows\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserves\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveFactor\",\"type\":\"uint256\"}],\"name\":\"getSupplyRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isInterestRateModel\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"opaqueBorrowFailureCode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowRate_\",\"type\":\"uint256\"}],\"name\":\"setBorrowRate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bool\",\"name\":\"failBorrowRate_\",\"type\":\"bool\"}],\"name\":\"setFailBorrowRate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"methods\":{},\"title\":\"An Interest Rate Model for tests that can be instructed to return a failure instead of doing a calculation\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol\":\"InterestRateModelHarness\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@venusprotocol/venus-protocol/contracts/InterestRateModels/InterestRateModel.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity ^0.5.16;\\n\\n/**\\n * @title Venus's InterestRateModel Interface\\n * @author Venus\\n */\\ncontract InterestRateModel {\\n    /// @notice Indicator that this is an InterestRateModel contract (for inspection)\\n    bool public constant isInterestRateModel = true;\\n\\n    /**\\n     * @notice Calculates the current borrow interest rate per block\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amnount of reserves the market has\\n     * @return The borrow rate per block (as a percentage, and scaled by 1e18)\\n     */\\n    function getBorrowRate(uint cash, uint borrows, uint reserves) external view returns (uint);\\n\\n    /**\\n     * @notice Calculates the current supply interest rate per block\\n     * @param cash The total amount of cash the market has\\n     * @param borrows The total amount of borrows the market has outstanding\\n     * @param reserves The total amnount of reserves the market has\\n     * @param reserveFactorMantissa The current reserve factor the market has\\n     * @return The supply rate per block (as a percentage, and scaled by 1e18)\\n     */\\n    function getSupplyRate(\\n        uint cash,\\n        uint borrows,\\n        uint reserves,\\n        uint reserveFactorMantissa\\n    ) external view returns (uint);\\n}\\n\",\"keccak256\":\"0x786416e63346afec50151e44b993dbbdb12f94cd3f2c9dba631afe237353605f\"},\"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol\":{\"content\":\"pragma solidity ^0.5.16;\\n\\nimport \\\"../InterestRateModels/InterestRateModel.sol\\\";\\n\\n/**\\n * @title An Interest Rate Model for tests that can be instructed to return a failure instead of doing a calculation\\n * @author Venus\\n */\\ncontract InterestRateModelHarness is InterestRateModel {\\n    uint public constant opaqueBorrowFailureCode = 20;\\n    bool public failBorrowRate;\\n    uint public borrowRate;\\n\\n    constructor(uint borrowRate_) public {\\n        borrowRate = borrowRate_;\\n    }\\n\\n    function setFailBorrowRate(bool failBorrowRate_) public {\\n        failBorrowRate = failBorrowRate_;\\n    }\\n\\n    function setBorrowRate(uint borrowRate_) public {\\n        borrowRate = borrowRate_;\\n    }\\n\\n    function getBorrowRate(uint _cash, uint _borrows, uint _reserves) public view returns (uint) {\\n        _cash; // unused\\n        _borrows; // unused\\n        _reserves; // unused\\n        require(!failBorrowRate, \\\"INTEREST_RATE_MODEL_ERROR\\\");\\n        return borrowRate;\\n    }\\n\\n    function getSupplyRate(\\n        uint _cash,\\n        uint _borrows,\\n        uint _reserves,\\n        uint _reserveFactor\\n    ) external view returns (uint) {\\n        _cash; // unused\\n        _borrows; // unused\\n        _reserves; // unused\\n        return borrowRate * (1 - _reserveFactor);\\n    }\\n}\\n\",\"keccak256\":\"0xb37bf74ecf557270391836d1e292129d7caafcee2ab40d02395aecf2243e4115\"}},\"version\":1}","storageLayout":{"storage":[{"astId":3919,"contract":"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol:InterestRateModelHarness","label":"failBorrowRate","offset":0,"slot":"0","type":"t_bool"},{"astId":3921,"contract":"@venusprotocol/venus-protocol/contracts/test/InterestRateModelHarness.sol:InterestRateModelHarness","label":"borrowRate","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"methods":{}}}}}}}