ETH Price: $2,865.25 (-2.50%)

Contract

0xbf6fabcc707aC239Be2D7818797745F678A411ad

Overview

ETH Balance

Taiko Alethia LogoTaiko Alethia LogoTaiko Alethia Logo0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Reset40389812026-01-15 14:05:2110 days ago1768485921IN
0xbf6fabcc...678A411ad
0 ETH0.000020290.05
Poke39462802026-01-08 1:47:5518 days ago1767836875IN
0xbf6fabcc...678A411ad
0 ETH0.000001220.02736
Poke38684892026-01-01 20:20:2124 days ago1767298821IN
0xbf6fabcc...678A411ad
0 ETH0.000002240.05
Reset38684862026-01-01 20:20:0524 days ago1767298805IN
0xbf6fabcc...678A411ad
0 ETH0.000055930.05
Distro37707762025-12-25 4:31:5931 days ago1766637119IN
0xbf6fabcc...678A411ad
0 ETH0.000166180.02734
Distro36838572025-12-18 4:16:0738 days ago1766031367IN
0xbf6fabcc...678A411ad
0 ETH0.000173870.02734
Distro35962422025-12-11 4:55:2745 days ago1765428927IN
0xbf6fabcc...678A411ad
0 ETH0.000184290.02736
Distro35025802025-12-04 1:29:1953 days ago1764811759IN
0xbf6fabcc...678A411ad
0 ETH0.000162280.02736
Distro34159132025-11-27 16:32:5759 days ago1764261177IN
0xbf6fabcc...678A411ad
0 ETH0.000193680.02735
Distro33185882025-11-20 4:33:2766 days ago1763613207IN
0xbf6fabcc...678A411ad
0 ETH0.000175680.02736
Distro32233272025-11-13 3:42:1973 days ago1763005339IN
0xbf6fabcc...678A411ad
0 ETH0.000143890.02736
Distro31774792025-11-09 16:08:5777 days ago1762704537IN
0xbf6fabcc...678A411ad
0 ETH0.000198990.03063
Claim Bribes30633022025-10-31 18:06:5386 days ago1761934013IN
0xbf6fabcc...678A411ad
0 ETH0.000063620.0251
Claim Fees30632982025-10-31 18:06:2186 days ago1761933981IN
0xbf6fabcc...678A411ad
0 ETH0.000009440.0251
Distro30515612025-10-30 19:26:5287 days ago1761852412IN
0xbf6fabcc...678A411ad
0 ETH0.000239210.02735
Claim Bribes30400542025-10-29 21:03:5788 days ago1761771837IN
0xbf6fabcc...678A411ad
0 ETH0.000003420.05
Claim Fees30400512025-10-29 21:03:3388 days ago1761771813IN
0xbf6fabcc...678A411ad
0 ETH0.000016890.05
Claim Bribes30399332025-10-29 20:50:3388 days ago1761771033IN
0xbf6fabcc...678A411ad
0 ETH0.0000210.05
Claim Fees30399292025-10-29 20:50:1188 days ago1761771011IN
0xbf6fabcc...678A411ad
0 ETH0.000020150.05
Claim Fees30046712025-10-27 0:26:4791 days ago1761524807IN
0xbf6fabcc...678A411ad
0 ETH0.000012450.027
Claim Fees30046612025-10-27 0:25:2991 days ago1761524729IN
0xbf6fabcc...678A411ad
0 ETH0.000015090.027
Claim Fees30046412025-10-27 0:22:5791 days ago1761524577IN
0xbf6fabcc...678A411ad
0 ETH0.000019560.03
Claim Fees30043962025-10-27 0:00:5391 days ago1761523253IN
0xbf6fabcc...678A411ad
0 ETH0.000070190.125
Vote30021812025-10-26 19:55:5991 days ago1761508559IN
0xbf6fabcc...678A411ad
0 ETH0.000094030.1824516
Claim Fees29958432025-10-26 8:21:5391 days ago1761466913IN
0xbf6fabcc...678A411ad
0 ETH0.000017560.027
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Voter

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 12 : Voter.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

import 'contracts/libraries/Math.sol';
import 'contracts/interfaces/IBribe.sol';
import 'contracts/interfaces/IBribeFactory.sol';
import 'contracts/interfaces/IGauge.sol';
import 'contracts/interfaces/IGaugeFactory.sol';
import 'contracts/interfaces/IERC20.sol';
import 'contracts/interfaces/IMinter.sol';
import 'contracts/interfaces/IPair.sol';
import 'contracts/interfaces/IPairFactory.sol';
import 'contracts/interfaces/IVoter.sol';
import 'contracts/interfaces/IVotingEscrow.sol';

contract Voter is IVoter {

    address public immutable _ve; // the ve token that governs these contracts
    address public immutable factory; // the PairFactory
    address internal immutable base;
    address public immutable gaugefactory;
    address public immutable bribefactory;
    uint internal constant DURATION = 7 days; // rewards are released over 7 days
    address public minter;
    address public governor; // should be set to an IGovernor
    address public emergencyCouncil; // credibly neutral party similar to Curve's Emergency DAO

    uint public totalWeight; // total voting weight

    address[] public pools; // all pools viable for incentives
    mapping(address => address) public gauges; // pool => gauge
    mapping(address => address) public poolForGauge; // gauge => pool
    mapping(address => address) public internal_bribes; // gauge => internal bribe (only fees)
    mapping(address => address) public external_bribes; // gauge => external bribe (real bribes)
    mapping(address => uint256) public weights; // pool => weight
    mapping(uint => mapping(address => uint256)) public votes; // nft => pool => votes
    mapping(uint => address[]) public poolVote; // nft => pools
    mapping(uint => uint) public usedWeights;  // nft => total voting weight of user
    mapping(uint => uint) public lastVoted; // nft => timestamp of last vote, to ensure one vote per epoch
    mapping(address => bool) public isGauge;
    mapping(address => bool) public isWhitelisted;
    mapping(address => bool) public isAlive;

    event GaugeCreated(address indexed gauge, address creator, address internal_bribe, address indexed external_bribe, address indexed pool);
    event GaugeKilled(address indexed gauge);
    event GaugeRevived(address indexed gauge);
    event Voted(address indexed voter, uint tokenId, uint256 weight);
    event Abstained(uint tokenId, uint256 weight);
    event Deposit(address indexed lp, address indexed gauge, uint tokenId, uint amount);
    event Withdraw(address indexed lp, address indexed gauge, uint tokenId, uint amount);
    event NotifyReward(address indexed sender, address indexed reward, uint amount);
    event DistributeReward(address indexed sender, address indexed gauge, uint amount);
    event Attach(address indexed owner, address indexed gauge, uint tokenId);
    event Detach(address indexed owner, address indexed gauge, uint tokenId);
    event Whitelisted(address indexed whitelister, address indexed token);

    constructor(address __ve, address _factory, address  _gauges, address _bribes) {
        _ve = __ve;
        factory = _factory;
        base = IVotingEscrow(__ve).token();
        gaugefactory = _gauges;
        bribefactory = _bribes;
        minter = msg.sender;
        governor = msg.sender;
        emergencyCouncil = msg.sender;
    }

    // simple re-entrancy check
    uint internal _unlocked = 1;
    modifier lock() {
        require(_unlocked == 1);
        _unlocked = 2;
        _;
        _unlocked = 1;
    }

    modifier onlyNewEpoch(uint _tokenId) {
        // ensure new epoch since last vote 
        require((block.timestamp / DURATION) * DURATION > lastVoted[_tokenId], "TOKEN_ALREADY_VOTED_THIS_EPOCH");
        _;
    }

    function initialize(address[] memory _tokens, address _minter) external {
        require(msg.sender == minter);
        for (uint i = 0; i < _tokens.length; i++) {
            _whitelist(_tokens[i]);
        }
        minter = _minter;
    }

    function setGovernor(address _governor) public {
        require(msg.sender == governor);
        governor = _governor;
    }

    function setEmergencyCouncil(address _council) public {
        require(msg.sender == emergencyCouncil);
        emergencyCouncil = _council;
    }

    function reset(uint _tokenId) external onlyNewEpoch(_tokenId) {
        require(IVotingEscrow(_ve).isApprovedOrOwner(msg.sender, _tokenId));
        lastVoted[_tokenId] = block.timestamp;
        _reset(_tokenId);
        IVotingEscrow(_ve).abstain(_tokenId);
    }

    function _reset(uint _tokenId) internal {
        address[] storage _poolVote = poolVote[_tokenId];
        uint _poolVoteCnt = _poolVote.length;
        uint256 _totalWeight = 0;

        for (uint i = 0; i < _poolVoteCnt; i ++) {
            address _pool = _poolVote[i];
            uint256 _votes = votes[_tokenId][_pool];

            if (_votes != 0) {
                _updateFor(gauges[_pool]);
                weights[_pool] -= _votes;
                votes[_tokenId][_pool] -= _votes;
                if (_votes > 0) {
                    IBribe(internal_bribes[gauges[_pool]])._withdraw(uint256(_votes), _tokenId);
                    IBribe(external_bribes[gauges[_pool]])._withdraw(uint256(_votes), _tokenId);
                    _totalWeight += _votes;
                } else {
                    _totalWeight -= _votes;
                }
                emit Abstained(_tokenId, _votes);
            }
        }
        totalWeight -= uint256(_totalWeight);
        usedWeights[_tokenId] = 0;
        delete poolVote[_tokenId];
    }

    function poke(uint _tokenId) external {
        address[] memory _poolVote = poolVote[_tokenId];
        uint _poolCnt = _poolVote.length;
        uint256[] memory _weights = new uint256[](_poolCnt);

        for (uint i = 0; i < _poolCnt; i ++) {
            _weights[i] = votes[_tokenId][_poolVote[i]];
        }

        _vote(_tokenId, _poolVote, _weights);
    }

    function _vote(uint _tokenId, address[] memory _poolVote, uint256[] memory _weights) internal {
        _reset(_tokenId);
        uint _poolCnt = _poolVote.length;
        uint256 _weight = IVotingEscrow(_ve).balanceOfNFT(_tokenId);
        uint256 _totalVoteWeight = 0;
        uint256 _totalWeight = 0;
        uint256 _usedWeight = 0;

        for (uint i = 0; i < _poolCnt; i++) {
            _totalVoteWeight += _weights[i];
        }

        for (uint i = 0; i < _poolCnt; i++) {
            address _pool = _poolVote[i];
            address _gauge = gauges[_pool];

            if (isGauge[_gauge]) {
                uint256 _poolWeight = _weights[i] * _weight / _totalVoteWeight;
                require(votes[_tokenId][_pool] == 0);
                require(_poolWeight != 0);
                _updateFor(_gauge);

                poolVote[_tokenId].push(_pool);

                weights[_pool] += _poolWeight;
                votes[_tokenId][_pool] += _poolWeight;
                IBribe(internal_bribes[_gauge])._deposit(uint256(_poolWeight), _tokenId);
                IBribe(external_bribes[_gauge])._deposit(uint256(_poolWeight), _tokenId);
                _usedWeight += _poolWeight;
                _totalWeight += _poolWeight;
                emit Voted(msg.sender, _tokenId, _poolWeight);
            }
        }
        if (_usedWeight > 0) IVotingEscrow(_ve).voting(_tokenId);
        totalWeight += uint256(_totalWeight);
        usedWeights[_tokenId] = uint256(_usedWeight);
    }

    function vote(uint tokenId, address[] calldata _poolVote, uint256[] calldata _weights) external onlyNewEpoch(tokenId) {
        require(IVotingEscrow(_ve).isApprovedOrOwner(msg.sender, tokenId));
        require(_poolVote.length == _weights.length);
        lastVoted[tokenId] = block.timestamp;
        _vote(tokenId, _poolVote, _weights);
    }

    function whitelist(address _token) external {
        require(msg.sender == governor);
        _whitelist(_token);
    }

    function _whitelist(address _token) internal {
        require(!isWhitelisted[_token]);
        isWhitelisted[_token] = true;
        emit Whitelisted(msg.sender, _token);
    }

    function removeFromWhitelist(address[] calldata _tokens) external {
        require(msg.sender == governor);
        for (uint i = 0; i < _tokens.length; i++) {
            delete isWhitelisted[_tokens[i]];
        }
    }

    function createGauge(address _pool) external returns (address) {
        require(gauges[_pool] == address(0x0), "exists");
        address[] memory allowedRewards = new address[](3);
        address[] memory internalRewards = new address[](2);
        bool isPair = IPairFactory(factory).isPair(_pool);
        address tokenA;
        address tokenB;

        if (isPair) {
            (tokenA, tokenB) = IPair(_pool).tokens();
            allowedRewards[0] = tokenA;
            allowedRewards[1] = tokenB;
            internalRewards[0] = tokenA;
            internalRewards[1] = tokenB;

            if (base != tokenA && base != tokenB) {
              allowedRewards[2] = base;
            }
        }

        if (msg.sender != governor) { // gov can create for any pool, even non-Kodo pairs
            require(isPair, "!_pool");
            require(isWhitelisted[tokenA] && isWhitelisted[tokenB], "!whitelisted");
        }

        address _internal_bribe = IBribeFactory(bribefactory).createInternalBribe(internalRewards);
        address _external_bribe = IBribeFactory(bribefactory).createExternalBribe(allowedRewards);
        address _gauge = IGaugeFactory(gaugefactory).createGauge(_pool, _internal_bribe, _external_bribe, _ve, isPair, allowedRewards);

        IERC20(base).approve(_gauge, type(uint).max);
        internal_bribes[_gauge] = _internal_bribe;
        external_bribes[_gauge] = _external_bribe;
        gauges[_pool] = _gauge;
        poolForGauge[_gauge] = _pool;
        isGauge[_gauge] = true;
        isAlive[_gauge] = true;
        _updateFor(_gauge);
        pools.push(_pool);
        emit GaugeCreated(_gauge, msg.sender, _internal_bribe, _external_bribe, _pool);
        return _gauge;
    }

    function killGauge(address _gauge) external {
        require(msg.sender == emergencyCouncil, "not emergency council");
        require(isAlive[_gauge], "gauge already dead");
        isAlive[_gauge] = false;
        claimable[_gauge] = 0;
        emit GaugeKilled(_gauge);
    }

    function reviveGauge(address _gauge) external {
        require(msg.sender == emergencyCouncil, "not emergency council");
        require(!isAlive[_gauge], "gauge already alive");
        isAlive[_gauge] = true;
        emit GaugeRevived(_gauge);
    }

    function attachTokenToGauge(uint tokenId, address account) external {
        require(isGauge[msg.sender]);
        require(isAlive[msg.sender]); // killed gauges cannot attach tokens to themselves
        if (tokenId > 0) IVotingEscrow(_ve).attach(tokenId);
        emit Attach(account, msg.sender, tokenId);
    }

    function emitDeposit(uint tokenId, address account, uint amount) external {
        require(isGauge[msg.sender]);
        require(isAlive[msg.sender]);
        emit Deposit(account, msg.sender, tokenId, amount);
    }

    function detachTokenFromGauge(uint tokenId, address account) external {
        require(isGauge[msg.sender]);
        if (tokenId > 0) IVotingEscrow(_ve).detach(tokenId);
        emit Detach(account, msg.sender, tokenId);
    }

    function emitWithdraw(uint tokenId, address account, uint amount) external {
        require(isGauge[msg.sender]);
        emit Withdraw(account, msg.sender, tokenId, amount);
    }

    function length() external view returns (uint) {
        return pools.length;
    }

    uint internal index;
    mapping(address => uint) internal supplyIndex;
    mapping(address => uint) public claimable;

    function notifyRewardAmount(uint amount) external {
        _safeTransferFrom(base, msg.sender, address(this), amount); // transfer the distro in
        uint256 _ratio = amount * 1e18 / totalWeight; // 1e18 adjustment is removed during claim
        if (_ratio > 0) {
            index += _ratio;
        }
        emit NotifyReward(msg.sender, base, amount);
    }

    function updateFor(address[] memory _gauges) external {
        for (uint i = 0; i < _gauges.length; i++) {
            _updateFor(_gauges[i]);
        }
    }

    function updateForRange(uint start, uint end) public {
        for (uint i = start; i < end; i++) {
            _updateFor(gauges[pools[i]]);
        }
    }

    function updateAll() external {
        updateForRange(0, pools.length);
    }

    function updateGauge(address _gauge) external {
        _updateFor(_gauge);
    }

    function _updateFor(address _gauge) internal {
        address _pool = poolForGauge[_gauge];
        uint256 _supplied = weights[_pool];
        if (_supplied > 0) {
            uint _supplyIndex = supplyIndex[_gauge];
            uint _index = index; // get global index0 for accumulated distro
            supplyIndex[_gauge] = _index; // update _gauge current position to global position
            uint _delta = _index - _supplyIndex; // see if there is any difference that need to be accrued
            if (_delta > 0) {
                uint _share = uint(_supplied) * _delta / 1e18; // add accrued difference for each supplied token
                if (isAlive[_gauge]) {
                    claimable[_gauge] += _share;
                }
            }
        } else {
            supplyIndex[_gauge] = index; // new users are set to the default global state
        }
    }

    function claimRewards(address[] memory _gauges, address[][] memory _tokens) external {
        for (uint i = 0; i < _gauges.length; i++) {
            IGauge(_gauges[i]).getReward(msg.sender, _tokens[i]);
        }
    }

    function claimBribes(address[] memory _bribes, address[][] memory _tokens, uint _tokenId) external {
        require(IVotingEscrow(_ve).isApprovedOrOwner(msg.sender, _tokenId));
        for (uint i = 0; i < _bribes.length; i++) {
            IBribe(_bribes[i]).getRewardForOwner(_tokenId, _tokens[i]);
        }
    }

    function claimFees(address[] memory _fees, address[][] memory _tokens, uint _tokenId) external {
        require(IVotingEscrow(_ve).isApprovedOrOwner(msg.sender, _tokenId));
        for (uint i = 0; i < _fees.length; i++) {
            IBribe(_fees[i]).getRewardForOwner(_tokenId, _tokens[i]);
        }
    }

    function distributeFees(address[] memory _gauges) external {
        for (uint i = 0; i < _gauges.length; i++) {
            if (IGauge(_gauges[i]).isForPair()){
                IGauge(_gauges[i]).claimFees();
            }
        }
    }

    function distribute(address _gauge) public lock {
        IMinter(minter).update_period();
        _updateFor(_gauge); // should set claimable to 0 if killed
        uint _claimable = claimable[_gauge];
        if (_claimable > IGauge(_gauge).left(base) && _claimable / DURATION > 0) {
            claimable[_gauge] = 0;
            IGauge(_gauge).notifyRewardAmount(base, _claimable);
            emit DistributeReward(msg.sender, _gauge, _claimable);
        }
    }

    function distro() external {
        distribute(0, pools.length);
    }

    function distribute() external {
        distribute(0, pools.length);
    }

    function distribute(uint start, uint finish) public {
        for (uint x = start; x < finish; x++) {
            distribute(gauges[pools[x]]);
        }
    }

    function distribute(address[] memory _gauges) external {
        for (uint x = 0; x < _gauges.length; x++) {
            distribute(_gauges[x]);
        }
    }

    function _safeTransferFrom(address token, address from, address to, uint256 value) internal {
        require(token.code.length > 0);
        (bool success, bytes memory data) =
        token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))));
    }
}

pragma solidity 0.8.13;

interface IBribe {
    function _deposit(uint amount, uint tokenId) external;
    function _withdraw(uint amount, uint tokenId) external;
    function getRewardForOwner(uint tokenId, address[] memory tokens) external;
    function notifyRewardAmount(address token, uint amount) external;
    function left(address token) external view returns (uint);
}

pragma solidity 0.8.13;

interface IBribeFactory {
    function createInternalBribe(address[] memory) external returns (address);
    function createExternalBribe(address[] memory) external returns (address);
}

pragma solidity 0.8.13;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function transfer(address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function balanceOf(address) external view returns (uint);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

pragma solidity 0.8.13;

interface IGauge {
    function notifyRewardAmount(address token, uint amount) external;
    function getReward(address account, address[] memory tokens) external;
    function claimFees() external returns (uint claimed0, uint claimed1);
    function left(address token) external view returns (uint);
    function isForPair() external view returns (bool);
}

pragma solidity 0.8.13;

interface IGaugeFactory {
    function createGauge(address, address, address, address, bool, address[] memory) external returns (address);
}

pragma solidity 0.8.13;

interface IMinter {
    function update_period() external returns (uint);
}

pragma solidity 0.8.13;

interface IPair {
    function metadata() external view returns (uint dec0, uint dec1, uint r0, uint r1, bool st, address t0, address t1);
    function claimFees() external returns (uint, uint);
    function tokens() external returns (address, address);
    function transferFrom(address src, address dst, uint amount) external returns (bool);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function burn(address to) external returns (uint amount0, uint amount1);
    function mint(address to) external returns (uint liquidity);
    function getReserves() external view returns (uint _reserve0, uint _reserve1, uint _blockTimestampLast);
    function getAmountOut(uint, address) external view returns (uint);
}

pragma solidity 0.8.13;

interface IPairFactory {
    function allPairsLength() external view returns (uint);
    function isPair(address pair) external view returns (bool);
    function pairCodeHash() external pure returns (bytes32);
    function getPair(address tokenA, address token, bool stable) external view returns (address);
    function createPair(address tokenA, address tokenB, bool stable) external returns (address pair);
}

pragma solidity 0.8.13;

interface IVoter {
    function _ve() external view returns (address);
    function governor() external view returns (address);
    function emergencyCouncil() external view returns (address);
    function attachTokenToGauge(uint _tokenId, address account) external;
    function detachTokenFromGauge(uint _tokenId, address account) external;
    function emitDeposit(uint _tokenId, address account, uint amount) external;
    function emitWithdraw(uint _tokenId, address account, uint amount) external;
    function isWhitelisted(address token) external view returns (bool);
    function notifyRewardAmount(uint amount) external;
    function distribute(address _gauge) external;
}

pragma solidity 0.8.13;

interface IVotingEscrow {

    struct Point {
        int128 bias;
        int128 slope; // # -dweight / dt
        uint256 ts;
        uint256 blk; // block
    }

    function token() external view returns (address);
    function team() external returns (address);
    function epoch() external view returns (uint);
    function point_history(uint loc) external view returns (Point memory);
    function user_point_history(uint tokenId, uint loc) external view returns (Point memory);
    function user_point_epoch(uint tokenId) external view returns (uint);

    function ownerOf(uint) external view returns (address);
    function isApprovedOrOwner(address, uint) external view returns (bool);
    function transferFrom(address, address, uint) external;

    function voting(uint tokenId) external;
    function abstain(uint tokenId) external;
    function attach(uint tokenId) external;
    function detach(uint tokenId) external;

    function checkpoint() external;
    function deposit_for(uint tokenId, uint value) external;
    function create_lock_for(uint, uint, address) external returns (uint);

    function balanceOfNFT(uint) external view returns (uint);
    function totalSupply() external view returns (uint);
}

pragma solidity 0.8.13;

library Math {
    function max(uint a, uint b) internal pure returns (uint) {
        return a >= b ? a : b;
    }
    function min(uint a, uint b) internal pure returns (uint) {
        return a < b ? a : b;
    }
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
    function cbrt(uint256 n) internal pure returns (uint256) { unchecked {
        uint256 x = 0;
        for (uint256 y = 1 << 255; y > 0; y >>= 3) {
            x <<= 1;
            uint256 z = 3 * x * (x + 1) + 1;
            if (n / y >= z) {
                n -= y * z;
                x += 1;
            }
        }
        return x;
    }}
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"__ve","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_gauges","type":"address"},{"internalType":"address","name":"_bribes","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"Abstained","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Attach","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lp","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Detach","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DistributeReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"internal_bribe","type":"address"},{"indexed":true,"internalType":"address","name":"external_bribe","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"GaugeCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"gauge","type":"address"}],"name":"GaugeKilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"gauge","type":"address"}],"name":"GaugeRevived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NotifyReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"whitelister","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"Whitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lp","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"_ve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"attachTokenToGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bribefactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_bribes","type":"address[]"},{"internalType":"address[][]","name":"_tokens","type":"address[][]"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimBribes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_fees","type":"address[]"},{"internalType":"address[][]","name":"_tokens","type":"address[][]"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauges","type":"address[]"},{"internalType":"address[][]","name":"_tokens","type":"address[][]"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"createGauge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"detachTokenFromGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauges","type":"address[]"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"finish","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauges","type":"address[]"}],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distro","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyCouncil","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"external_bribes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gaugefactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gauges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address","name":"_minter","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"internal_bribes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAlive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isGauge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"killGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastVoted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"poke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolForGauge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolVote","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"reviveGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_council","type":"address"}],"name":"setEmergencyCouncil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governor","type":"address"}],"name":"setGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauges","type":"address[]"}],"name":"updateFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"updateForRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"updateGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"_poolVote","type":"address[]"},{"internalType":"uint256[]","name":"_weights","type":"uint256[]"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"votes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"weights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61012060405260016011553480156200001757600080fd5b5060405162003746380380620037468339810160408190526200003a916200011c565b6001600160a01b03808516608081905290841660a05260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa1580156200008c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b2919062000179565b6001600160a01b0390811660c05291821660e0521661010052505060008054336001600160a01b03199182168117909255600180548216831790556002805490911690911790556200019e565b80516001600160a01b03811681146200011757600080fd5b919050565b600080600080608085870312156200013357600080fd5b6200013e85620000ff565b93506200014e60208601620000ff565b92506200015e60408601620000ff565b91506200016e60608601620000ff565b905092959194509250565b6000602082840312156200018c57600080fd5b6200019782620000ff565b9392505050565b60805160a05160c05160e051610100516134d0620002766000396000818161040201528181611d160152611d940152600081816105010152611e27015260008181610bc201528181610c3b01528181610f8b0152818161104701528181611b7b01528181611bb401528181611be60152611f0801526000818161072a01526119d20152600081816105ba0152818161095901528181610a0501528181610cc80152818161111701528181611298015281816113c80152818161158701528181611e59015281816126930152612a5601526134d06000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c806379e938241161019d578063ac4afa38116100e9578063d23254b4116100a2578063e586875f1161007c578063e586875f1461079d578063ea94ee44146107b0578063eae40f26146107c3578063f3594be0146107ec57600080fd5b8063d23254b41461075f578063d560b0d71461078a578063e4fc6b6d146104a057600080fd5b8063ac4afa38146106ad578063ae21c4cb146106c0578063b9a09fd5146106e9578063c42cf53514610712578063c45a015514610725578063c527ee1f1461074c57600080fd5b80639b6a9d7211610156578063a61c713a11610130578063a61c713a14610644578063a7cac84614610657578063a86a366d14610677578063aa79979b1461068a57600080fd5b80639b6a9d721461060b5780639f06247b1461061e578063a5f4301e1461063157600080fd5b806379e93824146105825780637ac09bf7146105a25780638dd598fb146105b557806396c82e57146105dc578063992a7933146105e55780639b19251a146105f857600080fd5b8063462d0b2e1161025c578063666256aa116102155780636ecbe38a116101ef5780636ecbe38a146105365780637625391a146105495780637715ee751461055c5780637778960e1461056f57600080fd5b8063666256aa146104e957806368c3acb3146104fc578063698473e31461052357600080fd5b8063462d0b2e1461048d57806347b3c6ba146104a057806353d78693146104a8578063548db174146104b05780636138889b146104c357806363453ae1146104d657600080fd5b8063310bd74b116102c95780633af32abf116102a35780633af32abf146104245780633c6b16ab14610447578063402914f51461045a578063411b1f771461047a57600080fd5b8063310bd74b146103d757806332145f90146103ea57806338752a9d146103fd57600080fd5b806306d6a1b21461031157806307546172146103575780630c340a241461036a5780631703e5f91461037d5780631f7b6d32146103b057806320b1cb6f146103c2575b600080fd5b61033a61031f366004612d98565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60005461033a906001600160a01b031681565b60015461033a906001600160a01b031681565b6103a061038b366004612d98565b60106020526000908152604090205460ff1681565b604051901515815260200161034e565b6004545b60405190815260200161034e565b6103d56103d0366004612f1b565b61080c565b005b6103d56103e5366004612f7f565b6108c2565b6103d56103f8366004612f7f565b610a6d565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6103a0610432366004612d98565b600f6020526000908152604090205460ff1681565b6103d5610455366004612f7f565b610bbd565b6103b4610468366004612d98565b60146020526000908152604090205481565b6103d5610488366004612f98565b610c90565b6103d561049b366004612fc8565b610d6a565b6103d5610de5565b6103d5610df6565b6103d56104be36600461305b565b610e05565b6103d56104d136600461309d565b610e85565b6103d56104e4366004612d98565b610ec9565b6103d56104f73660046130da565b6110fb565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6103d5610531366004612f98565b611244565b6103d5610544366004612d98565b61133a565b6103d5610557366004613147565b611346565b6103d561056a3660046130da565b6113ac565b60025461033a906001600160a01b031681565b6103b4610590366004612f7f565b600c6020526000908152604090205481565b6103d56105b0366004613169565b6114f5565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6103b460035481565b6103d56105f3366004612d98565b61168d565b6103d5610606366004612d98565b611792565b6103d5610619366004613147565b6117b2565b6103d561062c366004612d98565b611818565b61033a61063f366004612d98565b611915565b6103d56106523660046131e3565b6120b4565b6103b4610665366004612d98565b60096020526000908152604090205481565b61033a610685366004613147565b612138565b6103a0610698366004612d98565b600e6020526000908152604090205460ff1681565b61033a6106bb366004612f7f565b612170565b61033a6106ce366004612d98565b6008602052600090815260409020546001600160a01b031681565b61033a6106f7366004612d98565b6005602052600090815260409020546001600160a01b031681565b6103d5610720366004612d98565b61219a565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6103d561075a36600461309d565b6121d3565b6103b461076d366004612f98565b600a60209081526000928352604080842090915290825290205481565b6103d561079836600461309d565b6122f0565b6103d56107ab366004612d98565b612330565b6103d56107be3660046131e3565b612369565b61033a6107d1366004612d98565b6007602052600090815260409020546001600160a01b031681565b6103b46107fa366004612f7f565b600d6020526000908152604090205481565b60005b82518110156108bd5782818151811061082a5761082a61321b565b60200260200101516001600160a01b03166331279d3d338484815181106108535761085361321b565b60200260200101516040518363ffffffff1660e01b8152600401610878929190613275565b600060405180830381600087803b15801561089257600080fd5b505af11580156108a6573d6000803e3d6000fd5b5050505080806108b5906132af565b91505061080f565b505050565b6000818152600d6020526040902054819062093a806108e181426132c8565b6108eb91906132ea565b1161093d5760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e5f414c52454144595f564f5445445f544849535f45504f4348000060448201526064015b60405180910390fd5b60405163430c208160e01b8152336004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063430c208190604401602060405180830381865afa1580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc9190613309565b6109d557600080fd5b6000828152600d602052604090204290556109ef826123c8565b60405163c1f0fb9f60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1f0fb9f90602401600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b505050505050565b6000818152600b6020908152604080832080548251818502810185019093528083529192909190830182828015610acd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaf575b5050505050905060008151905060008167ffffffffffffffff811115610af557610af5612dbc565b604051908082528060200260200182016040528015610b1e578160200160208202803683370190505b50905060005b82811015610bab57600a60008681526020019081526020016000206000858381518110610b5357610b5361321b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610b8e57610b8e61321b565b602090810291909101015280610ba3816132af565b915050610b24565b50610bb784848361266f565b50505050565b610be97f0000000000000000000000000000000000000000000000000000000000000000333084612aed565b600354600090610c0183670de0b6b3a76400006132ea565b610c0b91906132c8565b90508015610c2b578060126000828254610c25919061332b565b90915550505b6040518281526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169033907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf50826906020015b60405180910390a35050565b336000908152600e602052604090205460ff16610cac57600080fd5b8115610d2d57604051634c35bec560e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063986b7d8a90602401600060405180830381600087803b158015610d1457600080fd5b505af1158015610d28573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907fae268d9aab12f3605f58efd74fd3801fa812b03fdb44317eb70f46dff0e19e2290602001610c84565b6000546001600160a01b03163314610d8157600080fd5b60005b8251811015610dc157610daf838281518110610da257610da261321b565b6020026020010151612bdd565b80610db9816132af565b915050610d84565b50600080546001600160a01b0319166001600160a01b039290921691909117905550565b600454610df490600090611346565b565b600454610df4906000906117b2565b6001546001600160a01b03163314610e1c57600080fd5b60005b818110156108bd57600f6000848484818110610e3d57610e3d61321b565b9050602002016020810190610e529190612d98565b6001600160a01b031681526020810191909152604001600020805460ff1916905580610e7d816132af565b915050610e1f565b60005b8151811015610ec557610eb3828281518110610ea657610ea661321b565b6020026020010151610ec9565b80610ebd816132af565b915050610e88565b5050565b601154600114610ed857600080fd5b600260118190555060008054906101000a90046001600160a01b03166001600160a01b031663ed29fc116040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190613343565b50610f6181612c50565b6001600160a01b0381811660008181526014602052604090819020549051634cde602960e11b81527f00000000000000000000000000000000000000000000000000000000000000009093166004840152916399bcc05290602401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190613343565b811180156110175750600061101562093a80836132c8565b115b156110f2576001600160a01b03828116600081815260146020526040808220919091555163b66503cf60e01b81527f00000000000000000000000000000000000000000000000000000000000000009092166004830152602482018390529063b66503cf90604401600060405180830381600087803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b179060200160405180910390a35b50506001601155565b60405163430c208160e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063430c208190604401602060405180830381865afa158015611166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118a9190613309565b61119357600080fd5b60005b8351811015610bb7578381815181106111b1576111b161321b565b60200260200101516001600160a01b031663a7852afa838584815181106111da576111da61321b565b60200260200101516040518363ffffffff1660e01b81526004016111ff92919061335c565b600060405180830381600087803b15801561121957600080fd5b505af115801561122d573d6000803e3d6000fd5b50505050808061123c906132af565b915050611196565b336000908152600e602052604090205460ff1661126057600080fd5b3360009081526010602052604090205460ff1661127c57600080fd5b81156112fd5760405163fbd3a29d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fbd3a29d90602401600060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907f60940192810a6fb3bce3fd3e2e3a13fd6ccc7605e963fb87ee971aba829989bd90602001610c84565b61134381612c50565b50565b815b818110156108bd5761139a600560006004848154811061136a5761136a61321b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416610ec9565b806113a4816132af565b915050611348565b60405163430c208160e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063430c208190604401602060405180830381865afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613309565b61144457600080fd5b60005b8351811015610bb7578381815181106114625761146261321b565b60200260200101516001600160a01b031663a7852afa8385848151811061148b5761148b61321b565b60200260200101516040518363ffffffff1660e01b81526004016114b092919061335c565b600060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b5050505080806114ed906132af565b915050611447565b6000858152600d6020526040902054859062093a8061151481426132c8565b61151e91906132ea565b1161156b5760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e5f414c52454144595f564f5445445f544849535f45504f434800006044820152606401610934565b60405163430c208160e01b8152336004820152602481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063430c208190604401602060405180830381865afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa9190613309565b61160357600080fd5b83821461160f57600080fd5b6000868152600d602090815260409182902042905581518682028181018301909352868152610a659289928991899182919085019084908082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525061266f92505050565b6002546001600160a01b031633146116df5760405162461bcd60e51b81526020600482015260156024820152741b9bdd08195b595c99d95b98de4818dbdd5b98da5b605a1b6044820152606401610934565b6001600160a01b03811660009081526010602052604090205460ff1661173c5760405162461bcd60e51b815260206004820152601260248201527119d85d59d948185b1c9958591e481919585960721b6044820152606401610934565b6001600160a01b0381166000818152601060209081526040808320805460ff191690556014909152808220829055517f04a5d3f5d80d22d9345acc80618f4a4e7e663cf9e1aed23b57d975acec002ba79190a250565b6001546001600160a01b031633146117a957600080fd5b61134381612bdd565b815b818110156108bd5761180660056000600484815481106117d6576117d661321b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416612c50565b80611810816132af565b9150506117b4565b6002546001600160a01b0316331461186a5760405162461bcd60e51b81526020600482015260156024820152741b9bdd08195b595c99d95b98de4818dbdd5b98da5b605a1b6044820152606401610934565b6001600160a01b03811660009081526010602052604090205460ff16156118c95760405162461bcd60e51b8152602060048201526013602482015272676175676520616c726561647920616c69766560681b6044820152606401610934565b6001600160a01b038116600081815260106020526040808220805460ff19166001179055517fed18e9faa3dccfd8aa45f69c4de40546b2ca9cccc4538a2323531656516db1aa9190a250565b6001600160a01b03818116600090815260056020526040812054909116156119685760405162461bcd60e51b815260206004820152600660248201526565786973747360d01b6044820152606401610934565b60408051600380825260808201909252600091602082016060803683375050604080516002808252606082018352939450600093909250906020830190803683370190505060405163e5e31b1360e01b81526001600160a01b0386811660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063e5e31b1390602401602060405180830381865afa158015611a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3d9190613309565b90506000808215611c3957866001600160a01b0316639d63848a6040518163ffffffff1660e01b815260040160408051808303816000875af1158015611a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aab9190613375565b80925081935050508185600081518110611ac757611ac761321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508085600181518110611afb57611afb61321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508184600081518110611b2f57611b2f61321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508084600181518110611b6357611b6361321b565b6001600160a01b0392831660209182029290920101527f0000000000000000000000000000000000000000000000000000000000000000811690831614801590611bdf5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b15611c39577f000000000000000000000000000000000000000000000000000000000000000085600281518110611c1857611c1861321b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001546001600160a01b03163314611cfc5782611c815760405162461bcd60e51b81526020600482015260066024820152650857dc1bdbdb60d21b6044820152606401610934565b6001600160a01b0382166000908152600f602052604090205460ff168015611cc157506001600160a01b0381166000908152600f602052604090205460ff165b611cfc5760405162461bcd60e51b815260206004820152600c60248201526b085dda1a5d195b1a5cdd195960a21b6044820152606401610934565b604051632a26b9eb60e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632a26b9eb90611d4b9088906004016133a4565b6020604051808303816000875af1158015611d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8e91906133b7565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636485f0c4886040518263ffffffff1660e01b8152600401611dde91906133a4565b6020604051808303816000875af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2191906133b7565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630bc25f4f8b85857f00000000000000000000000000000000000000000000000000000000000000008b8e6040518763ffffffff1660e01b8152600401611e9b969594939291906133d4565b6020604051808303816000875af1158015611eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ede91906133b7565b60405163095ea7b360e01b81526001600160a01b03808316600483015260001960248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f779190613309565b506001600160a01b03818116600081815260076020908152604080832080546001600160a01b03199081168a8816179091556008835281842080548216898816179055948f16808452600583528184208054871686179055938352600682528083208054909516909317909355600e8352818120805460ff1990811660019081179092556010909452919020805490921617905561201481612c50565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038c8116918217909255604080513381528684166020820152919285811692908516917fa4d97e9e7c65249b4cd01acb82add613adea98af32daf092366982f0a0d4e453910160405180910390a49998505050505050505050565b336000908152600e602052604090205460ff166120d057600080fd5b3360009081526010602052604090205460ff166120ec57600080fd5b604080518481526020810183905233916001600160a01b038516917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a3505050565b600b602052816000526040600020818154811061215457600080fd5b6000918252602090912001546001600160a01b03169150829050565b6004818154811061218057600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031633146121b157600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610ec5578181815181106121f1576121f161321b565b60200260200101516001600160a01b031663e57482136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225a9190613309565b156122de578181815181106122715761227161321b565b60200260200101516001600160a01b031663d294f0936040518163ffffffff1660e01b815260040160408051808303816000875af11580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190613424565b50505b806122e8816132af565b9150506121d6565b60005b8151811015610ec55761231e8282815181106123115761231161321b565b6020026020010151612c50565b80612328816132af565b9150506122f3565b6002546001600160a01b0316331461234757600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600e602052604090205460ff1661238557600080fd5b604080518481526020810183905233916001600160a01b038516917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567910161212b565b6000818152600b6020526040812080549091805b828110156126335760008482815481106123f8576123f861321b565b6000918252602080832090910154888352600a825260408084206001600160a01b0390921680855291909252912054909150801561261e576001600160a01b038083166000908152600560205260409020546124549116612c50565b6001600160a01b0382166000908152600960205260408120805483929061247c908490613448565b90915550506000878152600a602090815260408083206001600160a01b0386168452909152812080548392906124b3908490613448565b909155505080156125d7576001600160a01b038281166000908152600560209081526040808320548416835260079091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b15801561252957600080fd5b505af115801561253d573d6000803e3d6000fd5b505050506001600160a01b038281166000908152600560209081526040808320548416835260089091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b5050505080846125d0919061332b565b93506125e4565b6125e18185613448565b93505b60408051888152602081018390527fa9f3ca5f8a9e1580edb2741e0ba560084ec72e0067ba3423f9e9327a176882db910160405180910390a15b5050808061262b906132af565b9150506123dc565b5080600360008282546126469190613448565b90915550506000848152600c60209081526040808320839055600b9091528120610bb791612d51565b612678836123c8565b81516040516339f890b560e21b8152600481018590526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e7e242d490602401602060405180830381865afa1580156126e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127069190613343565b90506000806000805b85811015612750578681815181106127295761272961321b565b60200260200101518461273c919061332b565b935080612748816132af565b91505061270f565b5060005b85811015612a395760008882815181106127705761277061321b565b6020908102919091018101516001600160a01b03808216600090815260058452604080822054909216808252600e909452205490925060ff1615612a2457600086888b86815181106127c4576127c461321b565b60200260200101516127d691906132ea565b6127e091906132c8565b60008d8152600a602090815260408083206001600160a01b03881684529091529020549091501561281057600080fd5b8060000361281d57600080fd5b61282682612c50565b60008c8152600b6020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038816908117909155835260099091528120805483929061287b90849061332b565b909155505060008c8152600a602090815260408083206001600160a01b0387168452909152812080548392906128b290849061332b565b90915550506001600160a01b038083166000908152600760205260409081902054905163f320772360e01b815260048101849052602481018f905291169063f320772390604401600060405180830381600087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b5050505060086000836001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663f3207723828e6040518363ffffffff1660e01b815260040161299a929190918252602082015260400190565b600060405180830381600087803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b5050505080856129d8919061332b565b94506129e4818761332b565b604080518e81526020810184905291975033917fea66f58e474bc09f580000e81f31b334d171db387d0c6098ba47bd897741679b910160405180910390a2505b50508080612a31906132af565b915050612754565b508015612abb5760405163fd4a77f160e01b8152600481018990527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fd4a77f190602401600060405180830381600087803b158015612aa257600080fd5b505af1158015612ab6573d6000803e3d6000fd5b505050505b8160036000828254612acd919061332b565b90915550506000978852600c602052604090972096909655505050505050565b6000846001600160a01b03163b11612b0457600080fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612b68919061345f565b6000604051808303816000865af19150503d8060008114612ba5576040519150601f19603f3d011682016040523d82523d6000602084013e612baa565b606091505b5091509150818015612bd4575080511580612bd4575080806020019051810190612bd49190613309565b610a6557600080fd5b6001600160a01b0381166000908152600f602052604090205460ff1615612c0357600080fd5b6001600160a01b0381166000818152600f6020526040808220805460ff191660011790555133917f6661a7108aecd07864384529117d96c319c1163e3010c01390f6b704726e07de91a350565b6001600160a01b038082166000908152600660209081526040808320549093168083526009909152919020548015612d30576001600160a01b038316600090815260136020526040812080546012549182905591612cae8383613448565b90508015610a65576000670de0b6b3a7640000612ccb83876132ea565b612cd591906132c8565b6001600160a01b03881660009081526010602052604090205490915060ff1615612d27576001600160a01b03871660009081526014602052604081208054839290612d2190849061332b565b90915550505b50505050505050565b6012546001600160a01b038416600090815260136020526040902055505050565b508054600082559060005260206000209081019061134391905b80821115612d7f5760008155600101612d6b565b5090565b6001600160a01b038116811461134357600080fd5b600060208284031215612daa57600080fd5b8135612db581612d83565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612dfb57612dfb612dbc565b604052919050565b600067ffffffffffffffff821115612e1d57612e1d612dbc565b5060051b60200190565b600082601f830112612e3857600080fd5b81356020612e4d612e4883612e03565b612dd2565b82815260059290921b84018101918181019086841115612e6c57600080fd5b8286015b84811015612e90578035612e8381612d83565b8352918301918301612e70565b509695505050505050565b600082601f830112612eac57600080fd5b81356020612ebc612e4883612e03565b82815260059290921b84018101918181019086841115612edb57600080fd5b8286015b84811015612e9057803567ffffffffffffffff811115612eff5760008081fd5b612f0d8986838b0101612e27565b845250918301918301612edf565b60008060408385031215612f2e57600080fd5b823567ffffffffffffffff80821115612f4657600080fd5b612f5286838701612e27565b93506020850135915080821115612f6857600080fd5b50612f7585828601612e9b565b9150509250929050565b600060208284031215612f9157600080fd5b5035919050565b60008060408385031215612fab57600080fd5b823591506020830135612fbd81612d83565b809150509250929050565b60008060408385031215612fdb57600080fd5b823567ffffffffffffffff811115612ff257600080fd5b612ffe85828601612e27565b9250506020830135612fbd81612d83565b60008083601f84011261302157600080fd5b50813567ffffffffffffffff81111561303957600080fd5b6020830191508360208260051b850101111561305457600080fd5b9250929050565b6000806020838503121561306e57600080fd5b823567ffffffffffffffff81111561308557600080fd5b6130918582860161300f565b90969095509350505050565b6000602082840312156130af57600080fd5b813567ffffffffffffffff8111156130c657600080fd5b6130d284828501612e27565b949350505050565b6000806000606084860312156130ef57600080fd5b833567ffffffffffffffff8082111561310757600080fd5b61311387838801612e27565b9450602086013591508082111561312957600080fd5b5061313686828701612e9b565b925050604084013590509250925092565b6000806040838503121561315a57600080fd5b50508035926020909101359150565b60008060008060006060868803121561318157600080fd5b85359450602086013567ffffffffffffffff808211156131a057600080fd5b6131ac89838a0161300f565b909650945060408801359150808211156131c557600080fd5b506131d28882890161300f565b969995985093965092949392505050565b6000806000606084860312156131f857600080fd5b83359250602084013561320a81612d83565b929592945050506040919091013590565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561326a5781516001600160a01b031687529582019590820190600101613245565b509495945050505050565b6001600160a01b03831681526040602082018190526000906130d290830184613231565b634e487b7160e01b600052601160045260246000fd5b6000600182016132c1576132c1613299565b5060010190565b6000826132e557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561330457613304613299565b500290565b60006020828403121561331b57600080fd5b81518015158114612db557600080fd5b6000821982111561333e5761333e613299565b500190565b60006020828403121561335557600080fd5b5051919050565b8281526040602082015260006130d26040830184613231565b6000806040838503121561338857600080fd5b825161339381612d83565b6020840151909250612fbd81612d83565b602081526000612db56020830184613231565b6000602082840312156133c957600080fd5b8151612db581612d83565b6001600160a01b0387811682528681166020830152858116604083015284166060820152821515608082015260c060a0820181905260009061341890830184613231565b98975050505050505050565b6000806040838503121561343757600080fd5b505080516020909101519092909150565b60008282101561345a5761345a613299565b500390565b6000825160005b818110156134805760208186018101518583015201613466565b8181111561348f576000828501525b50919091019291505056fea26469706673582212205a5f36e5daefb2a3e6a5a9cbdcf1910c34e30383ff6ddb5a30cf55939e0a33d964736f6c634300080d00330000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb324000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc23120000000000000000000000007149e14784f9d88b5497a9bf135c643151379f95

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061030c5760003560e01c806379e938241161019d578063ac4afa38116100e9578063d23254b4116100a2578063e586875f1161007c578063e586875f1461079d578063ea94ee44146107b0578063eae40f26146107c3578063f3594be0146107ec57600080fd5b8063d23254b41461075f578063d560b0d71461078a578063e4fc6b6d146104a057600080fd5b8063ac4afa38146106ad578063ae21c4cb146106c0578063b9a09fd5146106e9578063c42cf53514610712578063c45a015514610725578063c527ee1f1461074c57600080fd5b80639b6a9d7211610156578063a61c713a11610130578063a61c713a14610644578063a7cac84614610657578063a86a366d14610677578063aa79979b1461068a57600080fd5b80639b6a9d721461060b5780639f06247b1461061e578063a5f4301e1461063157600080fd5b806379e93824146105825780637ac09bf7146105a25780638dd598fb146105b557806396c82e57146105dc578063992a7933146105e55780639b19251a146105f857600080fd5b8063462d0b2e1161025c578063666256aa116102155780636ecbe38a116101ef5780636ecbe38a146105365780637625391a146105495780637715ee751461055c5780637778960e1461056f57600080fd5b8063666256aa146104e957806368c3acb3146104fc578063698473e31461052357600080fd5b8063462d0b2e1461048d57806347b3c6ba146104a057806353d78693146104a8578063548db174146104b05780636138889b146104c357806363453ae1146104d657600080fd5b8063310bd74b116102c95780633af32abf116102a35780633af32abf146104245780633c6b16ab14610447578063402914f51461045a578063411b1f771461047a57600080fd5b8063310bd74b146103d757806332145f90146103ea57806338752a9d146103fd57600080fd5b806306d6a1b21461031157806307546172146103575780630c340a241461036a5780631703e5f91461037d5780631f7b6d32146103b057806320b1cb6f146103c2575b600080fd5b61033a61031f366004612d98565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60005461033a906001600160a01b031681565b60015461033a906001600160a01b031681565b6103a061038b366004612d98565b60106020526000908152604090205460ff1681565b604051901515815260200161034e565b6004545b60405190815260200161034e565b6103d56103d0366004612f1b565b61080c565b005b6103d56103e5366004612f7f565b6108c2565b6103d56103f8366004612f7f565b610a6d565b61033a7f0000000000000000000000007149e14784f9d88b5497a9bf135c643151379f9581565b6103a0610432366004612d98565b600f6020526000908152604090205460ff1681565b6103d5610455366004612f7f565b610bbd565b6103b4610468366004612d98565b60146020526000908152604090205481565b6103d5610488366004612f98565b610c90565b6103d561049b366004612fc8565b610d6a565b6103d5610de5565b6103d5610df6565b6103d56104be36600461305b565b610e05565b6103d56104d136600461309d565b610e85565b6103d56104e4366004612d98565b610ec9565b6103d56104f73660046130da565b6110fb565b61033a7f0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc231281565b6103d5610531366004612f98565b611244565b6103d5610544366004612d98565b61133a565b6103d5610557366004613147565b611346565b6103d561056a3660046130da565b6113ac565b60025461033a906001600160a01b031681565b6103b4610590366004612f7f565b600c6020526000908152604090205481565b6103d56105b0366004613169565b6114f5565b61033a7f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb32481565b6103b460035481565b6103d56105f3366004612d98565b61168d565b6103d5610606366004612d98565b611792565b6103d5610619366004613147565b6117b2565b6103d561062c366004612d98565b611818565b61033a61063f366004612d98565b611915565b6103d56106523660046131e3565b6120b4565b6103b4610665366004612d98565b60096020526000908152604090205481565b61033a610685366004613147565b612138565b6103a0610698366004612d98565b600e6020526000908152604090205460ff1681565b61033a6106bb366004612f7f565b612170565b61033a6106ce366004612d98565b6008602052600090815260409020546001600160a01b031681565b61033a6106f7366004612d98565b6005602052600090815260409020546001600160a01b031681565b6103d5610720366004612d98565b61219a565b61033a7f000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc81565b6103d561075a36600461309d565b6121d3565b6103b461076d366004612f98565b600a60209081526000928352604080842090915290825290205481565b6103d561079836600461309d565b6122f0565b6103d56107ab366004612d98565b612330565b6103d56107be3660046131e3565b612369565b61033a6107d1366004612d98565b6007602052600090815260409020546001600160a01b031681565b6103b46107fa366004612f7f565b600d6020526000908152604090205481565b60005b82518110156108bd5782818151811061082a5761082a61321b565b60200260200101516001600160a01b03166331279d3d338484815181106108535761085361321b565b60200260200101516040518363ffffffff1660e01b8152600401610878929190613275565b600060405180830381600087803b15801561089257600080fd5b505af11580156108a6573d6000803e3d6000fd5b5050505080806108b5906132af565b91505061080f565b505050565b6000818152600d6020526040902054819062093a806108e181426132c8565b6108eb91906132ea565b1161093d5760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e5f414c52454144595f564f5445445f544849535f45504f4348000060448201526064015b60405180910390fd5b60405163430c208160e01b8152336004820152602481018390527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063430c208190604401602060405180830381865afa1580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc9190613309565b6109d557600080fd5b6000828152600d602052604090204290556109ef826123c8565b60405163c1f0fb9f60e01b8152600481018390527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063c1f0fb9f90602401600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b505050505050565b6000818152600b6020908152604080832080548251818502810185019093528083529192909190830182828015610acd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaf575b5050505050905060008151905060008167ffffffffffffffff811115610af557610af5612dbc565b604051908082528060200260200182016040528015610b1e578160200160208202803683370190505b50905060005b82811015610bab57600a60008681526020019081526020016000206000858381518110610b5357610b5361321b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610b8e57610b8e61321b565b602090810291909101015280610ba3816132af565b915050610b24565b50610bb784848361266f565b50505050565b610be97f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb333084612aed565b600354600090610c0183670de0b6b3a76400006132ea565b610c0b91906132c8565b90508015610c2b578060126000828254610c25919061332b565b90915550505b6040518281526001600160a01b037f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb169033907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf50826906020015b60405180910390a35050565b336000908152600e602052604090205460ff16610cac57600080fd5b8115610d2d57604051634c35bec560e11b8152600481018390527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063986b7d8a90602401600060405180830381600087803b158015610d1457600080fd5b505af1158015610d28573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907fae268d9aab12f3605f58efd74fd3801fa812b03fdb44317eb70f46dff0e19e2290602001610c84565b6000546001600160a01b03163314610d8157600080fd5b60005b8251811015610dc157610daf838281518110610da257610da261321b565b6020026020010151612bdd565b80610db9816132af565b915050610d84565b50600080546001600160a01b0319166001600160a01b039290921691909117905550565b600454610df490600090611346565b565b600454610df4906000906117b2565b6001546001600160a01b03163314610e1c57600080fd5b60005b818110156108bd57600f6000848484818110610e3d57610e3d61321b565b9050602002016020810190610e529190612d98565b6001600160a01b031681526020810191909152604001600020805460ff1916905580610e7d816132af565b915050610e1f565b60005b8151811015610ec557610eb3828281518110610ea657610ea661321b565b6020026020010151610ec9565b80610ebd816132af565b915050610e88565b5050565b601154600114610ed857600080fd5b600260118190555060008054906101000a90046001600160a01b03166001600160a01b031663ed29fc116040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190613343565b50610f6181612c50565b6001600160a01b0381811660008181526014602052604090819020549051634cde602960e11b81527f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb9093166004840152916399bcc05290602401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190613343565b811180156110175750600061101562093a80836132c8565b115b156110f2576001600160a01b03828116600081815260146020526040808220919091555163b66503cf60e01b81527f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb9092166004830152602482018390529063b66503cf90604401600060405180830381600087803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b179060200160405180910390a35b50506001601155565b60405163430c208160e01b8152336004820152602481018290527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063430c208190604401602060405180830381865afa158015611166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118a9190613309565b61119357600080fd5b60005b8351811015610bb7578381815181106111b1576111b161321b565b60200260200101516001600160a01b031663a7852afa838584815181106111da576111da61321b565b60200260200101516040518363ffffffff1660e01b81526004016111ff92919061335c565b600060405180830381600087803b15801561121957600080fd5b505af115801561122d573d6000803e3d6000fd5b50505050808061123c906132af565b915050611196565b336000908152600e602052604090205460ff1661126057600080fd5b3360009081526010602052604090205460ff1661127c57600080fd5b81156112fd5760405163fbd3a29d60e01b8152600481018390527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063fbd3a29d90602401600060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907f60940192810a6fb3bce3fd3e2e3a13fd6ccc7605e963fb87ee971aba829989bd90602001610c84565b61134381612c50565b50565b815b818110156108bd5761139a600560006004848154811061136a5761136a61321b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416610ec9565b806113a4816132af565b915050611348565b60405163430c208160e01b8152336004820152602481018290527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063430c208190604401602060405180830381865afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613309565b61144457600080fd5b60005b8351811015610bb7578381815181106114625761146261321b565b60200260200101516001600160a01b031663a7852afa8385848151811061148b5761148b61321b565b60200260200101516040518363ffffffff1660e01b81526004016114b092919061335c565b600060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b5050505080806114ed906132af565b915050611447565b6000858152600d6020526040902054859062093a8061151481426132c8565b61151e91906132ea565b1161156b5760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e5f414c52454144595f564f5445445f544849535f45504f434800006044820152606401610934565b60405163430c208160e01b8152336004820152602481018790527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063430c208190604401602060405180830381865afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa9190613309565b61160357600080fd5b83821461160f57600080fd5b6000868152600d602090815260409182902042905581518682028181018301909352868152610a659289928991899182919085019084908082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525061266f92505050565b6002546001600160a01b031633146116df5760405162461bcd60e51b81526020600482015260156024820152741b9bdd08195b595c99d95b98de4818dbdd5b98da5b605a1b6044820152606401610934565b6001600160a01b03811660009081526010602052604090205460ff1661173c5760405162461bcd60e51b815260206004820152601260248201527119d85d59d948185b1c9958591e481919585960721b6044820152606401610934565b6001600160a01b0381166000818152601060209081526040808320805460ff191690556014909152808220829055517f04a5d3f5d80d22d9345acc80618f4a4e7e663cf9e1aed23b57d975acec002ba79190a250565b6001546001600160a01b031633146117a957600080fd5b61134381612bdd565b815b818110156108bd5761180660056000600484815481106117d6576117d661321b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416612c50565b80611810816132af565b9150506117b4565b6002546001600160a01b0316331461186a5760405162461bcd60e51b81526020600482015260156024820152741b9bdd08195b595c99d95b98de4818dbdd5b98da5b605a1b6044820152606401610934565b6001600160a01b03811660009081526010602052604090205460ff16156118c95760405162461bcd60e51b8152602060048201526013602482015272676175676520616c726561647920616c69766560681b6044820152606401610934565b6001600160a01b038116600081815260106020526040808220805460ff19166001179055517fed18e9faa3dccfd8aa45f69c4de40546b2ca9cccc4538a2323531656516db1aa9190a250565b6001600160a01b03818116600090815260056020526040812054909116156119685760405162461bcd60e51b815260206004820152600660248201526565786973747360d01b6044820152606401610934565b60408051600380825260808201909252600091602082016060803683375050604080516002808252606082018352939450600093909250906020830190803683370190505060405163e5e31b1360e01b81526001600160a01b0386811660048301529192506000917f000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc169063e5e31b1390602401602060405180830381865afa158015611a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3d9190613309565b90506000808215611c3957866001600160a01b0316639d63848a6040518163ffffffff1660e01b815260040160408051808303816000875af1158015611a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aab9190613375565b80925081935050508185600081518110611ac757611ac761321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508085600181518110611afb57611afb61321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508184600081518110611b2f57611b2f61321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508084600181518110611b6357611b6361321b565b6001600160a01b0392831660209182029290920101527f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb811690831614801590611bdf5750806001600160a01b03167f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb6001600160a01b031614155b15611c39577f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb85600281518110611c1857611c1861321b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001546001600160a01b03163314611cfc5782611c815760405162461bcd60e51b81526020600482015260066024820152650857dc1bdbdb60d21b6044820152606401610934565b6001600160a01b0382166000908152600f602052604090205460ff168015611cc157506001600160a01b0381166000908152600f602052604090205460ff165b611cfc5760405162461bcd60e51b815260206004820152600c60248201526b085dda1a5d195b1a5cdd195960a21b6044820152606401610934565b604051632a26b9eb60e01b81526000906001600160a01b037f0000000000000000000000007149e14784f9d88b5497a9bf135c643151379f951690632a26b9eb90611d4b9088906004016133a4565b6020604051808303816000875af1158015611d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8e91906133b7565b905060007f0000000000000000000000007149e14784f9d88b5497a9bf135c643151379f956001600160a01b0316636485f0c4886040518263ffffffff1660e01b8152600401611dde91906133a4565b6020604051808303816000875af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2191906133b7565b905060007f0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc23126001600160a01b0316630bc25f4f8b85857f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3248b8e6040518763ffffffff1660e01b8152600401611e9b969594939291906133d4565b6020604051808303816000875af1158015611eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ede91906133b7565b60405163095ea7b360e01b81526001600160a01b03808316600483015260001960248301529192507f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb9091169063095ea7b3906044016020604051808303816000875af1158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f779190613309565b506001600160a01b03818116600081815260076020908152604080832080546001600160a01b03199081168a8816179091556008835281842080548216898816179055948f16808452600583528184208054871686179055938352600682528083208054909516909317909355600e8352818120805460ff1990811660019081179092556010909452919020805490921617905561201481612c50565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038c8116918217909255604080513381528684166020820152919285811692908516917fa4d97e9e7c65249b4cd01acb82add613adea98af32daf092366982f0a0d4e453910160405180910390a49998505050505050505050565b336000908152600e602052604090205460ff166120d057600080fd5b3360009081526010602052604090205460ff166120ec57600080fd5b604080518481526020810183905233916001600160a01b038516917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a3505050565b600b602052816000526040600020818154811061215457600080fd5b6000918252602090912001546001600160a01b03169150829050565b6004818154811061218057600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031633146121b157600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610ec5578181815181106121f1576121f161321b565b60200260200101516001600160a01b031663e57482136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225a9190613309565b156122de578181815181106122715761227161321b565b60200260200101516001600160a01b031663d294f0936040518163ffffffff1660e01b815260040160408051808303816000875af11580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190613424565b50505b806122e8816132af565b9150506121d6565b60005b8151811015610ec55761231e8282815181106123115761231161321b565b6020026020010151612c50565b80612328816132af565b9150506122f3565b6002546001600160a01b0316331461234757600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600e602052604090205460ff1661238557600080fd5b604080518481526020810183905233916001600160a01b038516917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567910161212b565b6000818152600b6020526040812080549091805b828110156126335760008482815481106123f8576123f861321b565b6000918252602080832090910154888352600a825260408084206001600160a01b0390921680855291909252912054909150801561261e576001600160a01b038083166000908152600560205260409020546124549116612c50565b6001600160a01b0382166000908152600960205260408120805483929061247c908490613448565b90915550506000878152600a602090815260408083206001600160a01b0386168452909152812080548392906124b3908490613448565b909155505080156125d7576001600160a01b038281166000908152600560209081526040808320548416835260079091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b15801561252957600080fd5b505af115801561253d573d6000803e3d6000fd5b505050506001600160a01b038281166000908152600560209081526040808320548416835260089091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b5050505080846125d0919061332b565b93506125e4565b6125e18185613448565b93505b60408051888152602081018390527fa9f3ca5f8a9e1580edb2741e0ba560084ec72e0067ba3423f9e9327a176882db910160405180910390a15b5050808061262b906132af565b9150506123dc565b5080600360008282546126469190613448565b90915550506000848152600c60209081526040808320839055600b9091528120610bb791612d51565b612678836123c8565b81516040516339f890b560e21b8152600481018590526000907f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063e7e242d490602401602060405180830381865afa1580156126e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127069190613343565b90506000806000805b85811015612750578681815181106127295761272961321b565b60200260200101518461273c919061332b565b935080612748816132af565b91505061270f565b5060005b85811015612a395760008882815181106127705761277061321b565b6020908102919091018101516001600160a01b03808216600090815260058452604080822054909216808252600e909452205490925060ff1615612a2457600086888b86815181106127c4576127c461321b565b60200260200101516127d691906132ea565b6127e091906132c8565b60008d8152600a602090815260408083206001600160a01b03881684529091529020549091501561281057600080fd5b8060000361281d57600080fd5b61282682612c50565b60008c8152600b6020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038816908117909155835260099091528120805483929061287b90849061332b565b909155505060008c8152600a602090815260408083206001600160a01b0387168452909152812080548392906128b290849061332b565b90915550506001600160a01b038083166000908152600760205260409081902054905163f320772360e01b815260048101849052602481018f905291169063f320772390604401600060405180830381600087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b5050505060086000836001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663f3207723828e6040518363ffffffff1660e01b815260040161299a929190918252602082015260400190565b600060405180830381600087803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b5050505080856129d8919061332b565b94506129e4818761332b565b604080518e81526020810184905291975033917fea66f58e474bc09f580000e81f31b334d171db387d0c6098ba47bd897741679b910160405180910390a2505b50508080612a31906132af565b915050612754565b508015612abb5760405163fd4a77f160e01b8152600481018990527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063fd4a77f190602401600060405180830381600087803b158015612aa257600080fd5b505af1158015612ab6573d6000803e3d6000fd5b505050505b8160036000828254612acd919061332b565b90915550506000978852600c602052604090972096909655505050505050565b6000846001600160a01b03163b11612b0457600080fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612b68919061345f565b6000604051808303816000865af19150503d8060008114612ba5576040519150601f19603f3d011682016040523d82523d6000602084013e612baa565b606091505b5091509150818015612bd4575080511580612bd4575080806020019051810190612bd49190613309565b610a6557600080fd5b6001600160a01b0381166000908152600f602052604090205460ff1615612c0357600080fd5b6001600160a01b0381166000818152600f6020526040808220805460ff191660011790555133917f6661a7108aecd07864384529117d96c319c1163e3010c01390f6b704726e07de91a350565b6001600160a01b038082166000908152600660209081526040808320549093168083526009909152919020548015612d30576001600160a01b038316600090815260136020526040812080546012549182905591612cae8383613448565b90508015610a65576000670de0b6b3a7640000612ccb83876132ea565b612cd591906132c8565b6001600160a01b03881660009081526010602052604090205490915060ff1615612d27576001600160a01b03871660009081526014602052604081208054839290612d2190849061332b565b90915550505b50505050505050565b6012546001600160a01b038416600090815260136020526040902055505050565b508054600082559060005260206000209081019061134391905b80821115612d7f5760008155600101612d6b565b5090565b6001600160a01b038116811461134357600080fd5b600060208284031215612daa57600080fd5b8135612db581612d83565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612dfb57612dfb612dbc565b604052919050565b600067ffffffffffffffff821115612e1d57612e1d612dbc565b5060051b60200190565b600082601f830112612e3857600080fd5b81356020612e4d612e4883612e03565b612dd2565b82815260059290921b84018101918181019086841115612e6c57600080fd5b8286015b84811015612e90578035612e8381612d83565b8352918301918301612e70565b509695505050505050565b600082601f830112612eac57600080fd5b81356020612ebc612e4883612e03565b82815260059290921b84018101918181019086841115612edb57600080fd5b8286015b84811015612e9057803567ffffffffffffffff811115612eff5760008081fd5b612f0d8986838b0101612e27565b845250918301918301612edf565b60008060408385031215612f2e57600080fd5b823567ffffffffffffffff80821115612f4657600080fd5b612f5286838701612e27565b93506020850135915080821115612f6857600080fd5b50612f7585828601612e9b565b9150509250929050565b600060208284031215612f9157600080fd5b5035919050565b60008060408385031215612fab57600080fd5b823591506020830135612fbd81612d83565b809150509250929050565b60008060408385031215612fdb57600080fd5b823567ffffffffffffffff811115612ff257600080fd5b612ffe85828601612e27565b9250506020830135612fbd81612d83565b60008083601f84011261302157600080fd5b50813567ffffffffffffffff81111561303957600080fd5b6020830191508360208260051b850101111561305457600080fd5b9250929050565b6000806020838503121561306e57600080fd5b823567ffffffffffffffff81111561308557600080fd5b6130918582860161300f565b90969095509350505050565b6000602082840312156130af57600080fd5b813567ffffffffffffffff8111156130c657600080fd5b6130d284828501612e27565b949350505050565b6000806000606084860312156130ef57600080fd5b833567ffffffffffffffff8082111561310757600080fd5b61311387838801612e27565b9450602086013591508082111561312957600080fd5b5061313686828701612e9b565b925050604084013590509250925092565b6000806040838503121561315a57600080fd5b50508035926020909101359150565b60008060008060006060868803121561318157600080fd5b85359450602086013567ffffffffffffffff808211156131a057600080fd5b6131ac89838a0161300f565b909650945060408801359150808211156131c557600080fd5b506131d28882890161300f565b969995985093965092949392505050565b6000806000606084860312156131f857600080fd5b83359250602084013561320a81612d83565b929592945050506040919091013590565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561326a5781516001600160a01b031687529582019590820190600101613245565b509495945050505050565b6001600160a01b03831681526040602082018190526000906130d290830184613231565b634e487b7160e01b600052601160045260246000fd5b6000600182016132c1576132c1613299565b5060010190565b6000826132e557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561330457613304613299565b500290565b60006020828403121561331b57600080fd5b81518015158114612db557600080fd5b6000821982111561333e5761333e613299565b500190565b60006020828403121561335557600080fd5b5051919050565b8281526040602082015260006130d26040830184613231565b6000806040838503121561338857600080fd5b825161339381612d83565b6020840151909250612fbd81612d83565b602081526000612db56020830184613231565b6000602082840312156133c957600080fd5b8151612db581612d83565b6001600160a01b0387811682528681166020830152858116604083015284166060820152821515608082015260c060a0820181905260009061341890830184613231565b98975050505050505050565b6000806040838503121561343757600080fd5b505080516020909101519092909150565b60008282101561345a5761345a613299565b500390565b6000825160005b818110156134805760208186018101518583015201613466565b8181111561348f576000828501525b50919091019291505056fea26469706673582212205a5f36e5daefb2a3e6a5a9cbdcf1910c34e30383ff6ddb5a30cf55939e0a33d964736f6c634300080d0033

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

0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb324000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc23120000000000000000000000007149e14784f9d88b5497a9bf135c643151379f95

-----Decoded View---------------
Arg [0] : __ve (address): 0x6c4A102B7aafFA9a8C9440c08A5c09deECAFB324
Arg [1] : _factory (address): 0x535E02960574d8155596a73c7Ad66e87e37Eb6Bc
Arg [2] : _gauges (address): 0x3a9E14D73AD40E70baFaFfefE8893Eb318Fc2312
Arg [3] : _bribes (address): 0x7149E14784f9d88B5497a9bf135c643151379F95

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb324
Arg [1] : 000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc
Arg [2] : 0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc2312
Arg [3] : 0000000000000000000000007149e14784f9d88b5497a9bf135c643151379f95


Block Transaction Gas Used Reward
view all blocks sequenced

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

Validator Index Block Amount
View All Withdrawals

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

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