{"file_path":"VoteDelegateExtension.sol","creation_status":"success","source_code":"// File: contracts\\interfaces\\IBooster.sol\r\n\r\n// SPDX-License-Identifier: MIT\r\npragma solidity 0.6.12;\r\n\r\ninterface IBooster {\r\n    function owner() external view returns(address);\r\n    function setVoteDelegate(address _voteDelegate) external;\r\n    function vote(uint256 _voteId, address _votingAddress, bool _support) external returns(bool);\r\n    function voteGaugeWeight(address[] calldata _gauge, uint256[] calldata _weight ) external returns(bool);\r\n}\r\n\r\n// File: @openzeppelin\\contracts\\math\\SafeMath.sol\r\n\r\npragma solidity >=0.6.0 <0.8.0;\r\n\r\n/**\r\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\r\n * checks.\r\n *\r\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\r\n * in bugs, because programmers usually assume that an overflow raises an\r\n * error, which is the standard behavior in high level programming languages.\r\n * `SafeMath` restores this intuition by reverting the transaction when an\r\n * operation overflows.\r\n *\r\n * Using this library instead of the unchecked operations eliminates an entire\r\n * class of bugs, so it's recommended to use it always.\r\n */\r\nlibrary SafeMath {\r\n    /**\r\n     * @dev Returns the addition of two unsigned integers, with an overflow flag.\r\n     *\r\n     * _Available since v3.4._\r\n     */\r\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\r\n        uint256 c = a + b;\r\n        if (c < a) return (false, 0);\r\n        return (true, c);\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the substraction of two unsigned integers, with an overflow flag.\r\n     *\r\n     * _Available since v3.4._\r\n     */\r\n    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\r\n        if (b > a) return (false, 0);\r\n        return (true, a - b);\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\r\n     *\r\n     * _Available since v3.4._\r\n     */\r\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\r\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\r\n        // benefit is lost if 'b' is also tested.\r\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\r\n        if (a == 0) return (true, 0);\r\n        uint256 c = a * b;\r\n        if (c / a != b) return (false, 0);\r\n        return (true, c);\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the division of two unsigned integers, with a division by zero flag.\r\n     *\r\n     * _Available since v3.4._\r\n     */\r\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\r\n        if (b == 0) return (false, 0);\r\n        return (true, a / b);\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\r\n     *\r\n     * _Available since v3.4._\r\n     */\r\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\r\n        if (b == 0) return (false, 0);\r\n        return (true, a % b);\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the addition of two unsigned integers, reverting on\r\n     * overflow.\r\n     *\r\n     * Counterpart to Solidity's `+` operator.\r\n     *\r\n     * Requirements:\r\n     *\r\n     * - Addition cannot overflow.\r\n     */\r\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\r\n        uint256 c = a + b;\r\n        require(c >= a, \"SafeMath: addition overflow\");\r\n        return c;\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the subtraction of two unsigned integers, reverting on\r\n     * overflow (when the result is negative).\r\n     *\r\n     * Counterpart to Solidity's `-` operator.\r\n     *\r\n     * Requirements:\r\n     *\r\n     * - Subtraction cannot overflow.\r\n     */\r\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\r\n        require(b <= a, \"SafeMath: subtraction overflow\");\r\n        return a - b;\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the multiplication of two unsigned integers, reverting on\r\n     * overflow.\r\n     *\r\n     * Counterpart to Solidity's `*` operator.\r\n     *\r\n     * Requirements:\r\n     *\r\n     * - Multiplication cannot overflow.\r\n     */\r\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\r\n        if (a == 0) return 0;\r\n        uint256 c = a * b;\r\n        require(c / a == b, \"SafeMath: multiplication overflow\");\r\n        return c;\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the integer division of two unsigned integers, reverting on\r\n     * division by zero. The result is rounded towards zero.\r\n     *\r\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\r\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\r\n     * uses an invalid opcode to revert (consuming all remaining gas).\r\n     *\r\n     * Requirements:\r\n     *\r\n     * - The divisor cannot be zero.\r\n     */\r\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\r\n        require(b > 0, \"SafeMath: division by zero\");\r\n        return a / b;\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\r\n     * reverting when dividing by zero.\r\n     *\r\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\r\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\r\n     * invalid opcode to revert (consuming all remaining gas).\r\n     *\r\n     * Requirements:\r\n     *\r\n     * - The divisor cannot be zero.\r\n     */\r\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\r\n        require(b > 0, \"SafeMath: modulo by zero\");\r\n        return a % b;\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\r\n     * overflow (when the result is negative).\r\n     *\r\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\r\n     * message unnecessarily. For custom revert reasons use {trySub}.\r\n     *\r\n     * Counterpart to Solidity's `-` operator.\r\n     *\r\n     * Requirements:\r\n     *\r\n     * - Subtraction cannot overflow.\r\n     */\r\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\r\n        require(b <= a, errorMessage);\r\n        return a - b;\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the integer division of two unsigned integers, reverting with custom message on\r\n     * division by zero. The result is rounded towards zero.\r\n     *\r\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\r\n     * message unnecessarily. For custom revert reasons use {tryDiv}.\r\n     *\r\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\r\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\r\n     * uses an invalid opcode to revert (consuming all remaining gas).\r\n     *\r\n     * Requirements:\r\n     *\r\n     * - The divisor cannot be zero.\r\n     */\r\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\r\n        require(b > 0, errorMessage);\r\n        return a / b;\r\n    }\r\n\r\n    /**\r\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\r\n     * reverting with custom message when dividing by zero.\r\n     *\r\n     * CAUTION: This function is deprecated because it requires allocating memory for the error\r\n     * message unnecessarily. For custom revert reasons use {tryMod}.\r\n     *\r\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\r\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\r\n     * invalid opcode to revert (consuming all remaining gas).\r\n     *\r\n     * Requirements:\r\n     *\r\n     * - The divisor cannot be zero.\r\n     */\r\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\r\n        require(b > 0, errorMessage);\r\n        return a % b;\r\n    }\r\n}\r\n\r\n// File: contracts\\VoteDelegateExtension.sol\r\npragma solidity 0.6.12;\r\n\r\n\r\n/*\r\nAdd a layer to voting to easily apply data packing into vote id, as well as simplify calling functions\r\n*/\r\ncontract VoteDelegateExtension{\r\n    using SafeMath for uint256;\r\n\r\n    address public constant voteOwnership = address(0xE478de485ad2fe566d49342Cbd03E49ed7DB3356);\r\n    address public constant voteParameter = address(0xBCfF8B0b9419b9A88c44546519b1e909cF330399);\r\n    address public constant booster = address(0xF403C135812408BFbE8713b5A23a04b3D48AAE31);\r\n\r\n    uint256 private constant MAX_UINT_128  = (2**128) - 1;\r\n    uint256 private constant MAX_UINT_64  = (2**64) - 1;\r\n    uint256 private constant MAX_VOTE = 1e18;\r\n\r\n    address public owner;\r\n    address public daoOperator;\r\n    address public gaugeOperator;\r\n\r\n    constructor() public {\r\n        //default to multisig\r\n        owner = address(0xa3C5A1e09150B75ff251c1a7815A07182c3de2FB);\r\n        daoOperator = address(0xa3C5A1e09150B75ff251c1a7815A07182c3de2FB);\r\n        gaugeOperator = address(0xa3C5A1e09150B75ff251c1a7815A07182c3de2FB);\r\n    }\r\n\r\n    modifier onlyOwner() {\r\n        require(owner == msg.sender, \"!owner\");\r\n        _;\r\n    }\r\n\r\n    modifier onlyDaoOperator() {\r\n        require(daoOperator == msg.sender, \"!dop\");\r\n        _;\r\n    }\r\n\r\n    modifier onlyGaugeOperator() {\r\n        require(gaugeOperator == msg.sender, \"!gop\");\r\n        _;\r\n    }\r\n\r\n    //set owner - only OWNER\r\n    function setOwner(address _owner) external onlyOwner{\r\n        owner = _owner;\r\n    }\r\n\r\n    //set dao vote operator - only OWNER\r\n    function setDaoOperator(address _operator) external onlyOwner{\r\n        daoOperator = _operator;\r\n    }\r\n\r\n    //set gauge vote operator - only OWNER\r\n    function setGaugeOperator(address _operator) external onlyOwner{\r\n        gaugeOperator = _operator;\r\n    }\r\n\r\n    //revert to booster's owner\r\n    function revertControl() external onlyOwner{\r\n        IBooster(booster).setVoteDelegate(IBooster(booster).owner());\r\n    }\r\n\r\n    //pack data by shifting and ORing\r\n    function _encodeData(uint256 _value, uint256 _shiftValue, uint256 _base) internal pure returns(uint256) {\r\n        return uint256((_value << _shiftValue) | _base);\r\n    }\r\n\r\n    function packData(uint256 _voteId, uint256 _yay, uint256 _nay) public pure returns(uint256){\r\n        uint256 pack = _encodeData(_yay, 192, 0);\r\n        pack = _encodeData(_nay,128,pack);\r\n        pack = _encodeData(_voteId, 0, pack);\r\n        return pack;\r\n    }\r\n\r\n    //Submit a DAO vote (with weights)\r\n    function DaoVoteWithWeights(uint256 _voteId, uint256 _yay, uint256 _nay, bool _isOwnership) external onlyDaoOperator returns(bool){\r\n        //convert 10,000 to 1e18\r\n        _yay = _yay.mul(1e18).div(10000);\r\n        _nay = _nay.mul(1e18).div(10000);\r\n        require(_yay.add(_nay) == MAX_VOTE, \"!equal max_vote\");\r\n\r\n        uint256 data = packData(_voteId, _yay, _nay);\r\n\r\n        //vote with enocded vote id.  \"supported\" needs to be false if doing this type\r\n        return IBooster(booster).vote(data, _isOwnership ? voteOwnership : voteParameter, false);\r\n    }\r\n\r\n    //Submit a DAO vote\r\n    function DaoVote(uint256 _voteId, bool _support, bool _isOwnership) external onlyDaoOperator returns(bool){\r\n        //vote with full voting power on either choice\r\n        return IBooster(booster).vote(_voteId, _isOwnership ? voteOwnership : voteParameter, _support);\r\n    }\r\n\r\n    //Submit Gauge Weights\r\n    function GaugeVote(address[] calldata _gauge, uint256[] calldata _weight) external onlyGaugeOperator returns(bool){\r\n        //vote for gauge weights\r\n        return IBooster(booster).voteGaugeWeight(_gauge, _weight);\r\n    }\r\n}","deployed_bytecode":"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638c9bc2081161008c578063b42eda7111610066578063b42eda71146102dd578063c33d8755146102e5578063c6def07614610316578063f7b48e961461031e576100ea565b80638c9bc208146102c55780638da5cb5b146102cd578063a386a080146102d5576100ea565b80632d1e639d116100c85780632d1e639d146101785780634b35f39e1461024e578063521be1961461027b57806364354d651461029f576100ea565b806313af4035146100ef578063156f9d8f146101175780632888fc5314610152575b600080fd5b6101156004803603602081101561010557600080fd5b50356001600160a01b0316610326565b005b6101406004803603606081101561012d57600080fd5b5080359060208101359060400135610390565b60408051918252519081900360200190f35b6101156004803603602081101561016857600080fd5b50356001600160a01b03166103c5565b61023a6004803603604081101561018e57600080fd5b8101906020810181356401000000008111156101a957600080fd5b8201836020820111156101bb57600080fd5b803590602001918460208302840111640100000000831117156101dd57600080fd5b9193909290916020810190356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184602083028401116401000000008311171561022f57600080fd5b50909250905061042f565b604080519115158252519081900360200190f35b61023a6004803603606081101561026457600080fd5b508035906020810135151590604001351515610562565b610283610681565b604080516001600160a01b039092168252519081900360200190f35b610115600480360360208110156102b557600080fd5b50356001600160a01b0316610690565b6102836106fa565b610283610709565b610283610718565b610283610730565b61023a600480360360808110156102fb57600080fd5b50803590602081013590604081013590606001351515610748565b61028361090a565b610115610922565b6000546001600160a01b0316331461036e576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806103a08460c06000610a66565b90506103ae83608083610a66565b90506103bc85600083610a66565b95945050505050565b6000546001600160a01b0316331461040d576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546000906001600160a01b0316331461047a576040805162461bcd60e51b81526020600480830191909152602482015263021676f760e41b604482015290519081900360640190fd5b60408051635fd6cb5d60e11b8152600481019182526044810186905273f403c135812408bfbe8713b5a23a04b3d48aae319163bfad96ba91889188918891889181906024810190606401876020880280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050506040513d602081101561055757600080fd5b505195945050505050565b6001546000906001600160a01b031633146105ad576040805162461bcd60e51b81526020600480830191909152602482015263021646f760e41b604482015290519081900360640190fd5b73f403c135812408bfbe8713b5a23a04b3d48aae3163e2cdd42a85846105e75773bcff8b0b9419b9a88c44546519b1e909cf3303996105fd565b73e478de485ad2fe566d49342cbd03e49ed7db33565b866040518463ffffffff1660e01b815260040180848152602001836001600160a01b0316815260200182151581526020019350505050602060405180830381600087803b15801561064d57600080fd5b505af1158015610661573d6000803e3d6000fd5b505050506040513d602081101561067757600080fd5b5051949350505050565b6002546001600160a01b031681565b6000546001600160a01b031633146106d8576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6000546001600160a01b031681565b73e478de485ad2fe566d49342cbd03e49ed7db335681565b73bcff8b0b9419b9a88c44546519b1e909cf33039981565b6001546000906001600160a01b03163314610793576040805162461bcd60e51b81526020600480830191909152602482015263021646f760e41b604482015290519081900360640190fd5b6107b16127106107ab86670de0b6b3a7640000610a6d565b90610acf565b93506107cb6127106107ab85670de0b6b3a7640000610a6d565b9250670de0b6b3a76400006107e08585610b36565b14610824576040805162461bcd60e51b815260206004820152600f60248201526e21657175616c206d61785f766f746560881b604482015290519081900360640190fd5b6000610831868686610390565b905073f403c135812408bfbe8713b5a23a04b3d48aae3163e2cdd42a828561086d5773bcff8b0b9419b9a88c44546519b1e909cf330399610883565b73e478de485ad2fe566d49342cbd03e49ed7db33565b60006040518463ffffffff1660e01b815260040180848152602001836001600160a01b0316815260200182151581526020019350505050602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d60208110156108fe57600080fd5b50519695505050505050565b73f403c135812408bfbe8713b5a23a04b3d48aae3181565b6000546001600160a01b0316331461096a576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b73f403c135812408bfbe8713b5a23a04b3d48aae316001600160a01b0316637487432373f403c135812408bfbe8713b5a23a04b3d48aae316001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109da57600080fd5b505afa1580156109ee573d6000803e3d6000fd5b505050506040513d6020811015610a0457600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015251602480830192600092919082900301818387803b158015610a4c57600080fd5b505af1158015610a60573d6000803e3d6000fd5b50505050565b91901b1790565b600082610a7c57506000610ac9565b82820282848281610a8957fe5b0414610ac65760405162461bcd60e51b8152600401808060200182810382526021815260200180610b916021913960400191505060405180910390fd5b90505b92915050565b6000808211610b25576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610b2e57fe5b049392505050565b600082820183811015610ac6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f6c590a3c460e7aef539616dc9042e09cea62838a65170b8dbe1f2ddd909a8df64736f6c634300060c0033","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"istanbul","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[]},"optimization_runs":200,"sourcify_repo_url":null,"decoded_constructor_args":null,"compiler_version":"0.6.12+commit.27d51765","is_verified_via_verifier_alliance":true,"verified_at":"2026-01-04T11:02:30.051483Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x608060405234801561001057600080fd5b506000805473a3c5a1e09150b75ff251c1a7815a07182c3de2fb6001600160a01b0319918216811783556001805483168217905560028054909216179055610be790819061005e90396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638c9bc2081161008c578063b42eda7111610066578063b42eda71146102dd578063c33d8755146102e5578063c6def07614610316578063f7b48e961461031e576100ea565b80638c9bc208146102c55780638da5cb5b146102cd578063a386a080146102d5576100ea565b80632d1e639d116100c85780632d1e639d146101785780634b35f39e1461024e578063521be1961461027b57806364354d651461029f576100ea565b806313af4035146100ef578063156f9d8f146101175780632888fc5314610152575b600080fd5b6101156004803603602081101561010557600080fd5b50356001600160a01b0316610326565b005b6101406004803603606081101561012d57600080fd5b5080359060208101359060400135610390565b60408051918252519081900360200190f35b6101156004803603602081101561016857600080fd5b50356001600160a01b03166103c5565b61023a6004803603604081101561018e57600080fd5b8101906020810181356401000000008111156101a957600080fd5b8201836020820111156101bb57600080fd5b803590602001918460208302840111640100000000831117156101dd57600080fd5b9193909290916020810190356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184602083028401116401000000008311171561022f57600080fd5b50909250905061042f565b604080519115158252519081900360200190f35b61023a6004803603606081101561026457600080fd5b508035906020810135151590604001351515610562565b610283610681565b604080516001600160a01b039092168252519081900360200190f35b610115600480360360208110156102b557600080fd5b50356001600160a01b0316610690565b6102836106fa565b610283610709565b610283610718565b610283610730565b61023a600480360360808110156102fb57600080fd5b50803590602081013590604081013590606001351515610748565b61028361090a565b610115610922565b6000546001600160a01b0316331461036e576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806103a08460c06000610a66565b90506103ae83608083610a66565b90506103bc85600083610a66565b95945050505050565b6000546001600160a01b0316331461040d576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546000906001600160a01b0316331461047a576040805162461bcd60e51b81526020600480830191909152602482015263021676f760e41b604482015290519081900360640190fd5b60408051635fd6cb5d60e11b8152600481019182526044810186905273f403c135812408bfbe8713b5a23a04b3d48aae319163bfad96ba91889188918891889181906024810190606401876020880280828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b505050506040513d602081101561055757600080fd5b505195945050505050565b6001546000906001600160a01b031633146105ad576040805162461bcd60e51b81526020600480830191909152602482015263021646f760e41b604482015290519081900360640190fd5b73f403c135812408bfbe8713b5a23a04b3d48aae3163e2cdd42a85846105e75773bcff8b0b9419b9a88c44546519b1e909cf3303996105fd565b73e478de485ad2fe566d49342cbd03e49ed7db33565b866040518463ffffffff1660e01b815260040180848152602001836001600160a01b0316815260200182151581526020019350505050602060405180830381600087803b15801561064d57600080fd5b505af1158015610661573d6000803e3d6000fd5b505050506040513d602081101561067757600080fd5b5051949350505050565b6002546001600160a01b031681565b6000546001600160a01b031633146106d8576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6000546001600160a01b031681565b73e478de485ad2fe566d49342cbd03e49ed7db335681565b73bcff8b0b9419b9a88c44546519b1e909cf33039981565b6001546000906001600160a01b03163314610793576040805162461bcd60e51b81526020600480830191909152602482015263021646f760e41b604482015290519081900360640190fd5b6107b16127106107ab86670de0b6b3a7640000610a6d565b90610acf565b93506107cb6127106107ab85670de0b6b3a7640000610a6d565b9250670de0b6b3a76400006107e08585610b36565b14610824576040805162461bcd60e51b815260206004820152600f60248201526e21657175616c206d61785f766f746560881b604482015290519081900360640190fd5b6000610831868686610390565b905073f403c135812408bfbe8713b5a23a04b3d48aae3163e2cdd42a828561086d5773bcff8b0b9419b9a88c44546519b1e909cf330399610883565b73e478de485ad2fe566d49342cbd03e49ed7db33565b60006040518463ffffffff1660e01b815260040180848152602001836001600160a01b0316815260200182151581526020019350505050602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d60208110156108fe57600080fd5b50519695505050505050565b73f403c135812408bfbe8713b5a23a04b3d48aae3181565b6000546001600160a01b0316331461096a576040805162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b604482015290519081900360640190fd5b73f403c135812408bfbe8713b5a23a04b3d48aae316001600160a01b0316637487432373f403c135812408bfbe8713b5a23a04b3d48aae316001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109da57600080fd5b505afa1580156109ee573d6000803e3d6000fd5b505050506040513d6020811015610a0457600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015251602480830192600092919082900301818387803b158015610a4c57600080fd5b505af1158015610a60573d6000803e3d6000fd5b50505050565b91901b1790565b600082610a7c57506000610ac9565b82820282848281610a8957fe5b0414610ac65760405162461bcd60e51b8152600401808060200182810382526021815260200180610b916021913960400191505060405180910390fd5b90505b92915050565b6000808211610b25576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610b2e57fe5b049392505050565b600082820183811015610ac6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220f6c590a3c460e7aef539616dc9042e09cea62838a65170b8dbe1f2ddd909a8df64736f6c634300060c0033","name":"VoteDelegateExtension","is_blueprint":false,"license_type":"none","is_fully_verified":false,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"istanbul","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":false,"additional_sources":[],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_voteId","type":"uint256"},{"internalType":"bool","name":"_support","type":"bool"},{"internalType":"bool","name":"_isOwnership","type":"bool"}],"name":"DaoVote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_voteId","type":"uint256"},{"internalType":"uint256","name":"_yay","type":"uint256"},{"internalType":"uint256","name":"_nay","type":"uint256"},{"internalType":"bool","name":"_isOwnership","type":"bool"}],"name":"DaoVoteWithWeights","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauge","type":"address[]"},{"internalType":"uint256[]","name":"_weight","type":"uint256[]"}],"name":"GaugeVote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"booster","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gaugeOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_voteId","type":"uint256"},{"internalType":"uint256","name":"_yay","type":"uint256"},{"internalType":"uint256","name":"_nay","type":"uint256"}],"name":"packData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"revertControl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setDaoOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setGaugeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voteOwnership","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteParameter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":true,"constructor_args":null}