ETH Price: $2,868.82 (-2.47%)

Contract

0x65a0117630e0820B8420913dA4a5Cb597a7d2a7b

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Approve4133207522025-12-22 12:54:1634 days ago1766408056IN
0x65a01176...97a7d2a7b
0 ETH0.000000460.01
Approve1531779912023-11-23 6:11:27794 days ago1700719887IN
0x65a01176...97a7d2a7b
0 ETH0.000054160.1
Approve1526281492023-11-21 14:10:56796 days ago1700575856IN
0x65a01176...97a7d2a7b
0 ETH0.00009160.1
Approve1526216292023-11-21 13:43:40796 days ago1700574220IN
0x65a01176...97a7d2a7b
0 ETH0.000074180.1
Approve1510114252023-11-16 14:23:45801 days ago1700144625IN
0x65a01176...97a7d2a7b
0 ETH0.000066250.1
Approve1510110992023-11-16 14:22:22801 days ago1700144542IN
0x65a01176...97a7d2a7b
0 ETH0.000068240.1
Approve1494665542023-11-11 20:17:59806 days ago1699733879IN
0x65a01176...97a7d2a7b
0 ETH0.000062730.1
Transfer Ownersh...1494527122023-11-11 19:15:04806 days ago1699730104IN
0x65a01176...97a7d2a7b
0 ETH0.000057780.1
Approve1494457882023-11-11 18:43:52806 days ago1699728232IN
0x65a01176...97a7d2a7b
0 ETH0.000068410.1
Approve1494445562023-11-11 18:38:14806 days ago1699727894IN
0x65a01176...97a7d2a7b
0 ETH0.000079680.1
Approve1494123812023-11-11 16:16:02806 days ago1699719362IN
0x65a01176...97a7d2a7b
0 ETH0.000099160.1
Approve1492462612023-11-11 4:35:32807 days ago1699677332IN
0x65a01176...97a7d2a7b
0 ETH0.00004470.1
Disable Listing ...1492459312023-11-11 4:34:06807 days ago1699677246IN
0x65a01176...97a7d2a7b
0 ETH0.000028340.1
Disable Limit Mo...1492458702023-11-11 4:33:51807 days ago1699677231IN
0x65a01176...97a7d2a7b
0 ETH0.000028340.1
Mint1492386552023-11-11 4:02:47807 days ago1699675367IN
0x65a01176...97a7d2a7b
0 ETH0.000066020.1
Mint1492383852023-11-11 4:01:34807 days ago1699675294IN
0x65a01176...97a7d2a7b
0 ETH0.000069430.1

Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZENYXToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-11-11
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.6.0;


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

pragma solidity ^0.6.2;
library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {

            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.6.0;

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {

        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { 

            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

pragma solidity ^0.6.0;

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity ^0.6.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}

pragma solidity ^0.6.0;

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }


    function owner() public view returns (address) {
        return _owner;
    }


    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


pragma solidity ^0.6.0;

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    bool public ListingMode = true; // ListingMode is activated when the contract is initiated. It will prevent any buy/transfer except for the dev. It can only be deactivated.
    bool public LimitMode = true;   // LimitMode is activated and limit to 1000 ZENYX per buy. It will be shut down after few minutes. It can only be deactivated.

    address constant public devWallet = 0x48B7D4CAb0Eb7932812ED44B4B208d4dbC3D4a6d;

    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

    function name() public view returns (string memory) {
        return _name;
    }


    function symbol() public view returns (string memory) {
        return _symbol;
    }


    function decimals() public view returns (uint8) {
        return _decimals;
    }


    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }


    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }


    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");


        if (ListingMode) {
            require(sender == devWallet, "Listing Mode on : no transfer or buy allowed");
        }

 
        if (LimitMode == true && sender != devWallet) {
            require(amount <= uint(28e20), "Limit Mode on : max buy authorized is 2800 ZENYX");
        }

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }


    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }


    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}

pragma solidity 0.6.12;


// ZENYXToken
contract ZENYXToken is ERC20("ZENYX", "NYX"), Ownable {
    using SafeMath for uint256;

    uint256 public constant MAX_SUPPLY = 99000000 * 10**18;



    bool public maxSupplyHit = false;
    event Minted(address indexed minter, address indexed receiver, uint mintAmount);

    /// @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef).
    function mint(address _to, uint256 _amount) public onlyOwner {
        require(maxSupplyHit != true, "max supply hit");    // Prevent any mint beyond the max supply
        uint256 supply = totalSupply();
        if (supply.add(_amount) >= MAX_SUPPLY) {
            _amount = MAX_SUPPLY.sub(supply);
            maxSupplyHit = true;
        }

        if (_amount > 0) {
            _mint(_to, _amount);
            emit Minted(owner(), _to, _amount);
        }
    }


    function disableListingMode() public onlyOwner {
            ListingMode = false;
        }

   
    function disableLimitMode() public onlyOwner {
            LimitMode = false;
        }

    mapping (address => address) internal _delegates;

    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

 
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;


    mapping (address => uint32) public numCheckpoints;


    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");


    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");


    mapping (address => uint) public nonces;

    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);


    function delegates(address delegator)
        external
        view
        returns (address)
    {
        return _delegates[delegator];
    }


    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }


    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
    {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                DELEGATION_TYPEHASH,
                delegatee,
                nonce,
                expiry
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                structHash
            )
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "ZENYX::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "ZENYX::delegateBySig: invalid nonce");
        require(now <= expiry, "ZENYX::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }


    function getCurrentVotes(address account)
        external
        view
        returns (uint256)
    {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    function getPriorVotes(address account, uint blockNumber)
        external
        view
        returns (uint256)
    {
        require(blockNumber < block.number, "ZENYX::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee)
        internal
    {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); // balance of underlying ZENYXs (not scaled);
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld.sub(amount);
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    )
        internal
    {
        uint32 blockNumber = safe32(block.number, "ZENYX::_writeCheckpoint: block number exceeds 32 bits");

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

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

}

pragma solidity 0.6.12;

contract ZENYXFARM is Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    // Info of each user.
    struct UserInfo {
        uint256 amount;     // How many LP tokens the user has provided.
        uint256 rewardDebt; // Reward debt. See explanation below.
        //
        // We do some fancy math here. Basically, any point in time, the amount of ZENYXs
        // entitled to a user but is pending to be distributed is:
        //
        //   pending reward = (user.amount * pool.accZENYXPerShare) - user.rewardDebt
        //
        // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
        //   1. The pool's `accZENYXPerShare` (and `lastRewardBlock`) gets updated.
        //   2. User receives the pending reward sent to his/her address.
        //   3. User's `amount` gets updated.
        //   4. User's `rewardDebt` gets updated.
    }

    // Info of each pool.
    struct PoolInfo {
        IERC20 lpToken;           // Address of LP token contract.
        uint256 allocPoint;       // How many allocation points assigned to this pool. ZENYXs to distribute per block.
        uint256 lastRewardBlock;  // Last block number that ZENYXs distribution occurs.
        uint256 accZENYXPerShare; // Accumulated ZENYXs per share, times 1e12. See below.
    }


    ZENYXToken public ZENYX;    // The ZENYX TOKEN!
    address public devaddr;    // Dev address.

    mapping(address => bool) public lpTokenExistsInPool;    // Track all added pools to prevent adding the same pool more then once.
    mapping (uint256 => mapping (address => UserInfo)) public userInfo;    // Info of each user that stakes LP tokens.

    uint256 public totalAllocPoint = 0;    // Total allocation points. Must be the sum of all allocation points in all pools.

    uint256 public constant startBlock = 148120344;    // The block number when ZENYX mining starts.
    uint256 public bonusEndBlock = 148120344;

    uint256 public constant DEV_TAX = 5;
    uint256 public constant BONUS_MULTIPLIER = 1;

	uint256 public zenyxPerBlock = 1e18;
	uint256 public berhaneValue = 2e12;
	uint256 public lastBlockUpdate = 0; // the last block when RewardPerBlock was updated with the berhaneValue

    PoolInfo[] public poolInfo;    // Info of each pool.

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);

    modifier onlyDev() {
        require(devaddr == _msgSender(), "not dev");
        _;
    }

    constructor(
        ZENYXToken _ZENYX,
        address _devaddr
    ) public {
        ZENYX = _ZENYX;
        devaddr = _devaddr;
    }

    function poolLength() external view returns (uint256) {
        return poolInfo.length;
    }

    // Add a new lp to the pool. Can only be called by the owner.
    function add(uint256 _allocPoint, IERC20 _lpToken, bool _withUpdate) public onlyOwner {
        require(!lpTokenExistsInPool[address(_lpToken)], "MasterChef: LP Token Address already exists in pool");
        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo.push(PoolInfo({
            lpToken: _lpToken,
            allocPoint: _allocPoint,
            lastRewardBlock: lastRewardBlock,
            accZENYXPerShare: 0
        }));

        lpTokenExistsInPool[address(_lpToken)] = true;
    }

    function updateDevAddress(address _devAddress) public onlyDev {
        devaddr = _devAddress;
    }

    // Add a pool manually for pools that already exists, but were not auto added to the map by "add()".
    function updateLpTokenExists(address _lpTokenAddr, bool _isExists) external onlyOwner {
        lpTokenExistsInPool[_lpTokenAddr] = _isExists;
    }

    // Update the given pool's ZENYX allocation point. Can only be called by the owner.
    function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner {
        if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);
        poolInfo[_pid].allocPoint = _allocPoint;
    }

    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
        if (_to <= bonusEndBlock) {
            return _to.sub(_from).mul(BONUS_MULTIPLIER);
        } else if (_from >= bonusEndBlock) {
            return _to.sub(_from);
        } else {
            return bonusEndBlock.sub(_from).mul(BONUS_MULTIPLIER).add(
                _to.sub(bonusEndBlock)
            );
        }
    }

    // View function to see pending ZENYXs on frontend.
    function pendingZENYX(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accZENYXPerShare = pool.accZENYXPerShare;
        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (block.number > pool.lastRewardBlock && lpSupply != 0) {
            uint256 blocksToReward = getMultiplier(pool.lastRewardBlock, block.number);
            uint256 zenyxReward = blocksToReward.mul(zenyxPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
            accZENYXPerShare = accZENYXPerShare.add(zenyxReward.mul(1e12).div(lpSupply));
        }
        return user.amount.mul(accZENYXPerShare).div(1e12).sub(user.rewardDebt);
    }

    // Update reward variables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }

        // Init the first block when berhaneValue has been updated
        if (lastBlockUpdate == 0) {
            lastBlockUpdate = block.number;
        }

        uint256 lpSupply = pool.lpToken.balanceOf(address(this));
        if (lpSupply == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }

        // Get number of blocks since last update of zenyxPerBlock
        uint256 BlocksToUpdate = block.number - lastBlockUpdate;

        // Adjust Berhane depending on number of blocks to update
        uint256 Berhane = (BlocksToUpdate).mul(berhaneValue);

        // Set the new number of zenyxPerBlock with Berhane
        zenyxPerBlock = zenyxPerBlock.sub(Berhane);

        // Check how many blocks have to be rewarded since the last pool update
        uint256 blocksToReward = getMultiplier(pool.lastRewardBlock, block.number);

        uint256 CompensationSinceLastRewardUpdate = 0;
        if (BlocksToUpdate > 0)
        {
            CompensationSinceLastRewardUpdate = BlocksToUpdate.mul(Berhane);
        }
        uint256 zenyxReward = blocksToReward.mul(zenyxPerBlock.add(CompensationSinceLastRewardUpdate)).mul(pool.allocPoint).div(totalAllocPoint);

        ZENYX.mint(address(this), zenyxReward);
        pool.accZENYXPerShare = pool.accZENYXPerShare.add(zenyxReward.mul(1e12).div(lpSupply));
        pool.lastRewardBlock = block.number;
        lastBlockUpdate = block.number;
    }

    // Deposit LP tokens to zenyxfarm for ZENYX allocation.
    function deposit(uint256 _pid, uint256 _amount) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        updatePool(_pid);
        if (user.amount > 0) {
            uint256 pending = user.amount.mul(pool.accZENYXPerShare).div(1e12).sub(user.rewardDebt);
            if(pending > 0) {
                safeZenyxTransfer(msg.sender, pending);
            }
        }
        if(_amount > 0) {
            uint256 _taxAmount = _amount.mul(DEV_TAX).div(100);
            _amount = _amount.sub(_taxAmount);
            pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
            pool.lpToken.safeTransferFrom(address(msg.sender), address(devaddr), _taxAmount);
            user.amount = user.amount.add(_amount);
        }
        user.rewardDebt = user.amount.mul(pool.accZENYXPerShare).div(1e12);
        emit Deposit(msg.sender, _pid, _amount);
    }

    // Withdraw LP tokens from zenyxfarm.
    function withdraw(uint256 _pid, uint256 _amount) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        require(user.amount >= _amount, "withdraw: not good");
        updatePool(_pid);
        uint256 pending = user.amount.mul(pool.accZENYXPerShare).div(1e12).sub(user.rewardDebt);
        if(pending > 0) {
            safeZenyxTransfer(msg.sender, pending);
        }
        if(_amount > 0) {
            user.amount = user.amount.sub(_amount);
            pool.lpToken.safeTransfer(address(msg.sender), _amount);
        }
        user.rewardDebt = user.amount.mul(pool.accZENYXPerShare).div(1e12);
        emit Withdraw(msg.sender, _pid, _amount);

    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 amount = user.amount;
        user.amount = 0;
        user.rewardDebt = 0;
        pool.lpToken.safeTransfer(address(msg.sender), amount);
        emit EmergencyWithdraw(msg.sender, _pid, amount);
    }

    // Safe ZENYX transfer function, just in case if rounding error causes pool to not have enough ZENYXs.
    function safeZenyxTransfer(address _to, uint256 _amount) internal {
        uint256 ZenyxBal = ZENYX.balanceOf(address(this));
        if (_amount > ZenyxBal) {
            ZENYX.transfer(_to, ZenyxBal);
        } else {
            ZENYX.transfer(_to, _amount);
        }
    }

    // Update dev address by the previous dev.
    function dev(address _devaddr) public {
        require(msg.sender == devaddr, "dev: wut?");
        devaddr = _devaddr;
    }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ListingMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimitMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableListingMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupplyHit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600560016101000a81548160ff0219169083151502179055506001600560026101000a81548160ff0219169083151502179055506000600560176101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600581526020017f5a454e59580000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4e595800000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e7929190620001de565b50806004908051906020019062000100929190620001de565b506012600560006101000a81548160ff021916908360ff1602179055505050600062000131620001d660201b60201c565b905080600560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000284565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022157805160ff191683800117855562000252565b8280016001018555821562000252579182015b828111156200025157825182559160200191906001019062000234565b5b50905062000261919062000265565b5090565b5b808211156200028057600081600090555060010162000266565b5090565b6134de80620002946000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063782d6fe11161010f578063b4132870116100a2578063dd62ed3e11610071578063dd62ed3e146109b1578063e7a324dc14610a29578063f1127ed814610a47578063f2fde38b14610abc576101f0565b8063b4132870146108b6578063b4b5ea57146108d6578063b84300881461092e578063c3cda52014610938576101f0565b80638ea5220f116100de5780638ea5220f1461073757806395d89b411461076b578063a457c2d7146107ee578063a9059cbb14610852576101f0565b8063782d6fe1146106295780637ecebe001461068b5780638da5cb5b146106e35780638db92f1c14610717576101f0565b806339509351116101875780635c19a95c116101565780635c19a95c146105255780636fcfff451461056957806370a08231146105c7578063715018a61461061f576101f0565b806339509351146103fb57806340c10f191461045f57806357601502146104ad578063587cde1e146104b7576101f0565b806323b872dd116101c357806323b872dd146103185780632c028b531461039c578063313ce567146103bc57806332cb6b0c146103dd576101f0565b806306fdde03146101f5578063095ea7b31461027857806318160ddd146102dc57806320606b70146102fa575b600080fd5b6101fd610b00565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023d578082015181840152602081019050610222565b50505050905090810190601f16801561026a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c46004803603604081101561028e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ba2565b60405180821515815260200191505060405180910390f35b6102e4610bc0565b6040518082815260200191505060405180910390f35b610302610bca565b6040518082815260200191505060405180910390f35b6103846004803603606081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bee565b60405180821515815260200191505060405180910390f35b6103a4610cc7565b60405180821515815260200191505060405180910390f35b6103c4610cda565b604051808260ff16815260200191505060405180910390f35b6103e5610cf1565b6040518082815260200191505060405180910390f35b6104476004803603604081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d00565b60405180821515815260200191505060405180910390f35b6104ab6004803603604081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610db3565b005b6104b5610ff8565b005b6104f9600480360360208110156104cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110df565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105676004803603602081101561053b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611148565b005b6105ab6004803603602081101561057f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611155565b604051808263ffffffff16815260200191505060405180910390f35b610609600480360360208110156105dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611178565b6040518082815260200191505060405180910390f35b6106276111c0565b005b6106756004803603604081101561063f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061134b565b6040518082815260200191505060405180910390f35b6106cd600480360360208110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061170c565b6040518082815260200191505060405180910390f35b6106eb611724565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61071f61174e565b60405180821515815260200191505060405180910390f35b61073f611761565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610773611779565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107b3578082015181840152602081019050610798565b50505050905090810190601f1680156107e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61083a6004803603604081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061181b565b60405180821515815260200191505060405180910390f35b61089e6004803603604081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118e8565b60405180821515815260200191505060405180910390f35b6108be611906565b60405180821515815260200191505060405180910390f35b610918600480360360208110156108ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611919565b6040518082815260200191505060405180910390f35b6109366119ef565b005b6109af600480360360c081101561094e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611ad6565b005b610a13600480360360408110156109c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e3a565b6040518082815260200191505060405180910390f35b610a31611ec1565b6040518082815260200191505060405180910390f35b610a9960048036036040811015610a5d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190505050611ee5565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610afe60048036036020811015610ad257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f26565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6000610bb6610baf612136565b848461213e565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610bfb848484612335565b610cbc84610c07612136565b610cb7856040518060600160405280602881526020016133bc60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6d612136565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276f9092919063ffffffff16565b61213e565b600190509392505050565b600560019054906101000a900460ff1681565b6000600560009054906101000a900460ff16905090565b6a51e410c0f93fe54300000081565b6000610da9610d0d612136565b84610da48560016000610d1e612136565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282f90919063ffffffff16565b61213e565b6001905092915050565b610dbb612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600560179054906101000a900460ff1615151415610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6d617820737570706c792068697400000000000000000000000000000000000081525060200191505060405180910390fd5b6000610f11610bc0565b90506a51e410c0f93fe543000000610f32838361282f90919063ffffffff16565b10610f7357610f55816a51e410c0f93fe5430000006128b790919063ffffffff16565b91506001600560176101000a81548160ff0219169083151502179055505b6000821115610ff357610f868383612901565b8273ffffffffffffffffffffffffffffffffffffffff16610fa5611724565b73ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846040518082815260200191505060405180910390a35b505050565b611000612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560026101000a81548160ff021916908315150217905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6111523382612ac8565b50565b60086020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c8612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461128a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60004382106113a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806133156028913960400191505060405180910390fd5b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415611412576000915050611706565b82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16116114fc57600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff16815260200190815260200160002060010154915050611706565b82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16111561157d576000915050611706565b6000806001830390505b8163ffffffff168163ffffffff1611156116a0576000600283830363ffffffff16816115af57fe5b04820390506115bc613237565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff16141561167857806020015195505050505050611706565b86816000015163ffffffff16101561169257819350611699565b6001820392505b5050611587565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60096020528060005260406000206000915090505481565b6000600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560029054906101000a900460ff1681565b7348b7d4cab0eb7932812ed44b4b208d4dbc3d4a6d81565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b5050505050905090565b60006118de611828612136565b846118d9856040518060600160405280602581526020016134846025913960016000611852612136565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276f9092919063ffffffff16565b61213e565b6001905092915050565b60006118fc6118f5612136565b8484612335565b6001905092915050565b600560179054906101000a900460ff1681565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116119835760006119e7565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b6119f7612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560016101000a81548160ff021916908315150217905550565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611b01610b00565b80519060200120611b10612c39565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611c94573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061333d6027913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558914611dcb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806133646023913960400191505060405180910390fd5b87421115611e24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061345d6027913960400191505060405180910390fd5b611e2e818b612ac8565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6007602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b611f2e612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061327b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134396024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561224a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132a16022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806134146025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612441576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132586023913960400191505060405180910390fd5b600560019054906101000a900460ff16156124ef577348b7d4cab0eb7932812ed44b4b208d4dbc3d4a6d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806132c3602c913960400191505060405180910390fd5b5b60011515600560029054906101000a900460ff16151514801561255257507348b7d4cab0eb7932812ed44b4b208d4dbc3d4a6d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156125ba576897c9ce4cf6d5c000008111156125b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806133e46030913960400191505060405180910390fd5b5b6125c5838383612c46565b612630816040518060600160405280602681526020016132ef602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126c3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083831115829061281c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127e15780820151818401526020810190506127c6565b50505050905090810190601f16801561280e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808284019050838110156128ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006128f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061276f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6129b060008383612c46565b6129c58160025461282f90919063ffffffff16565b600281905550612a1c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612b3784611178565b905082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4612c33828483612c4b565b50505050565b6000804690508091505090565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c875750600081115b15612ee357600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612db7576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611612d2a576000612d8e565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612da584836128b790919063ffffffff16565b9050612db386848484612ee8565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ee2576000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611612e55576000612eb9565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612ed0848361282f90919063ffffffff16565b9050612ede85848484612ee8565b5050505b5b505050565b6000612f0c436040518060600160405280603581526020016133876035913961317c565b905060008463ffffffff16118015612fa157508063ffffffff16600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156130125781600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff1681526020019081526020016000206001018190555061311f565b60405180604001604052808263ffffffff16815260200183815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b60006401000000008310829061322d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131f25780820151818401526020810190506131d7565b50505050905090810190601f16801561321f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734c697374696e67204d6f6465206f6e203a206e6f207472616e73666572206f722062757920616c6c6f77656445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655a454e59583a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65645a454e59583a3a64656c656761746542795369673a20696e76616c6964207369676e61747572655a454e59583a3a64656c656761746542795369673a20696e76616c6964206e6f6e63655a454e59583a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654c696d6974204d6f6465206f6e203a206d61782062757920617574686f72697a65642069732032383030205a454e595845524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735a454e59583a3a64656c656761746542795369673a207369676e6174757265206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220294bc2a07ff47160141e252f2c59f9991fd980e834df7f90dc6224348c8e52a464736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063782d6fe11161010f578063b4132870116100a2578063dd62ed3e11610071578063dd62ed3e146109b1578063e7a324dc14610a29578063f1127ed814610a47578063f2fde38b14610abc576101f0565b8063b4132870146108b6578063b4b5ea57146108d6578063b84300881461092e578063c3cda52014610938576101f0565b80638ea5220f116100de5780638ea5220f1461073757806395d89b411461076b578063a457c2d7146107ee578063a9059cbb14610852576101f0565b8063782d6fe1146106295780637ecebe001461068b5780638da5cb5b146106e35780638db92f1c14610717576101f0565b806339509351116101875780635c19a95c116101565780635c19a95c146105255780636fcfff451461056957806370a08231146105c7578063715018a61461061f576101f0565b806339509351146103fb57806340c10f191461045f57806357601502146104ad578063587cde1e146104b7576101f0565b806323b872dd116101c357806323b872dd146103185780632c028b531461039c578063313ce567146103bc57806332cb6b0c146103dd576101f0565b806306fdde03146101f5578063095ea7b31461027857806318160ddd146102dc57806320606b70146102fa575b600080fd5b6101fd610b00565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023d578082015181840152602081019050610222565b50505050905090810190601f16801561026a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c46004803603604081101561028e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ba2565b60405180821515815260200191505060405180910390f35b6102e4610bc0565b6040518082815260200191505060405180910390f35b610302610bca565b6040518082815260200191505060405180910390f35b6103846004803603606081101561032e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bee565b60405180821515815260200191505060405180910390f35b6103a4610cc7565b60405180821515815260200191505060405180910390f35b6103c4610cda565b604051808260ff16815260200191505060405180910390f35b6103e5610cf1565b6040518082815260200191505060405180910390f35b6104476004803603604081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d00565b60405180821515815260200191505060405180910390f35b6104ab6004803603604081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610db3565b005b6104b5610ff8565b005b6104f9600480360360208110156104cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110df565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105676004803603602081101561053b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611148565b005b6105ab6004803603602081101561057f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611155565b604051808263ffffffff16815260200191505060405180910390f35b610609600480360360208110156105dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611178565b6040518082815260200191505060405180910390f35b6106276111c0565b005b6106756004803603604081101561063f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061134b565b6040518082815260200191505060405180910390f35b6106cd600480360360208110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061170c565b6040518082815260200191505060405180910390f35b6106eb611724565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61071f61174e565b60405180821515815260200191505060405180910390f35b61073f611761565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610773611779565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107b3578082015181840152602081019050610798565b50505050905090810190601f1680156107e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61083a6004803603604081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061181b565b60405180821515815260200191505060405180910390f35b61089e6004803603604081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118e8565b60405180821515815260200191505060405180910390f35b6108be611906565b60405180821515815260200191505060405180910390f35b610918600480360360208110156108ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611919565b6040518082815260200191505060405180910390f35b6109366119ef565b005b6109af600480360360c081101561094e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611ad6565b005b610a13600480360360408110156109c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e3a565b6040518082815260200191505060405180910390f35b610a31611ec1565b6040518082815260200191505060405180910390f35b610a9960048036036040811015610a5d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190505050611ee5565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610afe60048036036020811015610ad257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f26565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6000610bb6610baf612136565b848461213e565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610bfb848484612335565b610cbc84610c07612136565b610cb7856040518060600160405280602881526020016133bc60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6d612136565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276f9092919063ffffffff16565b61213e565b600190509392505050565b600560019054906101000a900460ff1681565b6000600560009054906101000a900460ff16905090565b6a51e410c0f93fe54300000081565b6000610da9610d0d612136565b84610da48560016000610d1e612136565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282f90919063ffffffff16565b61213e565b6001905092915050565b610dbb612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600560179054906101000a900460ff1615151415610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6d617820737570706c792068697400000000000000000000000000000000000081525060200191505060405180910390fd5b6000610f11610bc0565b90506a51e410c0f93fe543000000610f32838361282f90919063ffffffff16565b10610f7357610f55816a51e410c0f93fe5430000006128b790919063ffffffff16565b91506001600560176101000a81548160ff0219169083151502179055505b6000821115610ff357610f868383612901565b8273ffffffffffffffffffffffffffffffffffffffff16610fa5611724565b73ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0846040518082815260200191505060405180910390a35b505050565b611000612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560026101000a81548160ff021916908315150217905550565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6111523382612ac8565b50565b60086020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c8612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461128a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60004382106113a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806133156028913960400191505060405180910390fd5b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415611412576000915050611706565b82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16116114fc57600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff16815260200190815260200160002060010154915050611706565b82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16111561157d576000915050611706565b6000806001830390505b8163ffffffff168163ffffffff1611156116a0576000600283830363ffffffff16816115af57fe5b04820390506115bc613237565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff16141561167857806020015195505050505050611706565b86816000015163ffffffff16101561169257819350611699565b6001820392505b5050611587565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b60096020528060005260406000206000915090505481565b6000600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560029054906101000a900460ff1681565b7348b7d4cab0eb7932812ed44b4b208d4dbc3d4a6d81565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b5050505050905090565b60006118de611828612136565b846118d9856040518060600160405280602581526020016134846025913960016000611852612136565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276f9092919063ffffffff16565b61213e565b6001905092915050565b60006118fc6118f5612136565b8484612335565b6001905092915050565b600560179054906101000a900460ff1681565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16116119835760006119e7565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b6119f7612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560016101000a81548160ff021916908315150217905550565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611b01610b00565b80519060200120611b10612c39565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611c94573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061333d6027913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558914611dcb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806133646023913960400191505060405180910390fd5b87421115611e24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061345d6027913960400191505060405180910390fd5b611e2e818b612ac8565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6007602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b611f2e612136565b73ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061327b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134396024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561224a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132a16022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806134146025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612441576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132586023913960400191505060405180910390fd5b600560019054906101000a900460ff16156124ef577348b7d4cab0eb7932812ed44b4b208d4dbc3d4a6d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806132c3602c913960400191505060405180910390fd5b5b60011515600560029054906101000a900460ff16151514801561255257507348b7d4cab0eb7932812ed44b4b208d4dbc3d4a6d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156125ba576897c9ce4cf6d5c000008111156125b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806133e46030913960400191505060405180910390fd5b5b6125c5838383612c46565b612630816040518060600160405280602681526020016132ef602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461276f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126c3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600083831115829061281c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156127e15780820151818401526020810190506127c6565b50505050905090810190601f16801561280e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808284019050838110156128ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006128f983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061276f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6129b060008383612c46565b6129c58160025461282f90919063ffffffff16565b600281905550612a1c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612b3784611178565b905082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4612c33828483612c4b565b50505050565b6000804690508091505090565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c875750600081115b15612ee357600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612db7576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611612d2a576000612d8e565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612da584836128b790919063ffffffff16565b9050612db386848484612ee8565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ee2576000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611612e55576000612eb9565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612ed0848361282f90919063ffffffff16565b9050612ede85848484612ee8565b5050505b5b505050565b6000612f0c436040518060600160405280603581526020016133876035913961317c565b905060008463ffffffff16118015612fa157508063ffffffff16600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156130125781600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff1681526020019081526020016000206001018190555061311f565b60405180604001604052808263ffffffff16815260200183815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b60006401000000008310829061322d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131f25780820151818401526020810190506131d7565b50505050905090810190601f16801561321f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734c697374696e67204d6f6465206f6e203a206e6f207472616e73666572206f722062757920616c6c6f77656445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655a454e59583a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65645a454e59583a3a64656c656761746542795369673a20696e76616c6964207369676e61747572655a454e59583a3a64656c656761746542795369673a20696e76616c6964206e6f6e63655a454e59583a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654c696d6974204d6f6465206f6e203a206d61782062757920617574686f72697a65642069732032383030205a454e595845524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735a454e59583a3a64656c656761746542795369673a207369676e6174757265206578706972656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220294bc2a07ff47160141e252f2c59f9991fd980e834df7f90dc6224348c8e52a464736f6c634300060c0033

Deployed Bytecode Sourcemap

12676:7317:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8541:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9405:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8824:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14042:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9582:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7957:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8731:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12772:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9911:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13064:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13659:89;;;:::i;:::-;;14568:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14727:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13982:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8934:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7155:148;;;:::i;:::-;;16295:1254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14303:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6939:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8135:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8301:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8634:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10137:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9061:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12839:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16032:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13553:93;;;:::i;:::-;;14841:1181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9244:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14175:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13901:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;7311:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8541:83;8578:13;8611:5;8604:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8541:83;:::o;9405:169::-;9488:4;9505:39;9514:12;:10;:12::i;:::-;9528:7;9537:6;9505:8;:39::i;:::-;9562:4;9555:11;;9405:169;;;;:::o;8824:100::-;8877:7;8904:12;;8897:19;;8824:100;:::o;14042:122::-;14084:80;14042:122;:::o;9582:321::-;9688:4;9705:36;9715:6;9723:9;9734:6;9705:9;:36::i;:::-;9752:121;9761:6;9769:12;:10;:12::i;:::-;9783:89;9821:6;9783:89;;;;;;;;;;;;;;;;;:11;:19;9795:6;9783:19;;;;;;;;;;;;;;;:33;9803:12;:10;:12::i;:::-;9783:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;9752:8;:121::i;:::-;9891:4;9884:11;;9582:321;;;;;:::o;7957:30::-;;;;;;;;;;;;;:::o;8731:83::-;8772:5;8797:9;;;;;;;;;;;8790:16;;8731:83;:::o;12772:54::-;12809:17;12772:54;:::o;9911:218::-;9999:4;10016:83;10025:12;:10;:12::i;:::-;10039:7;10048:50;10087:10;10048:11;:25;10060:12;:10;:12::i;:::-;10048:25;;;;;;;;;;;;;;;:34;10074:7;10048:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10016:8;:83::i;:::-;10117:4;10110:11;;9911:218;;;;:::o;13064:479::-;7078:12;:10;:12::i;:::-;7068:22;;:6;;;;;;;;;;;:22;;;7060:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:4:::1;13144:20;;:12;;;;;;;;;;;:20;;;;13136:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13239:14;13256:13;:11;:13::i;:::-;13239:30;;12809:17;13284:19;13295:7;13284:6;:10;;:19;;;;:::i;:::-;:33;13280:132;;13344:22;13359:6;12809:17;13344:14;;:22;;;;:::i;:::-;13334:32;;13396:4;13381:12;;:19;;;;;;;;;;;;;;;;;;13280:132;13438:1;13428:7;:11;13424:112;;;13456:19;13462:3;13467:7;13456:5;:19::i;:::-;13511:3;13495:29;;13502:7;:5;:7::i;:::-;13495:29;;;13516:7;13495:29;;;;;;;;;;;;;;;;;;13424:112;7138:1;13064:479:::0;;:::o;13659:89::-;7078:12;:10;:12::i;:::-;7068:22;;:6;;;;;;;;;;;:22;;;7060:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13731:5:::1;13719:9;;:17;;;;;;;;;;;;;;;;;;13659:89::o:0;14568:149::-;14656:7;14688:10;:21;14699:9;14688:21;;;;;;;;;;;;;;;;;;;;;;;;;14681:28;;14568:149;;;:::o;14727:104::-;14791:32;14801:10;14813:9;14791;:32::i;:::-;14727:104;:::o;13982:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;8934:119::-;9000:7;9027:9;:18;9037:7;9027:18;;;;;;;;;;;;;;;;9020:25;;8934:119;;;:::o;7155:148::-;7078:12;:10;:12::i;:::-;7068:22;;:6;;;;;;;;;;;:22;;;7060:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7262:1:::1;7225:40;;7246:6;;;;;;;;;;;7225:40;;;;;;;;;;;;7293:1;7276:6;;:19;;;;;;;;;;;;;;;;;;7155:148::o:0;16295:1254::-;16403:7;16450:12;16436:11;:26;16428:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16520:19;16542:14;:23;16557:7;16542:23;;;;;;;;;;;;;;;;;;;;;;;;;16520:45;;16596:1;16580:12;:17;;;16576:58;;;16621:1;16614:8;;;;;16576:58;16746:11;16694;:20;16706:7;16694:20;;;;;;;;;;;;;;;:38;16730:1;16715:12;:16;16694:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;16690:147;;16781:11;:20;16793:7;16781:20;;;;;;;;;;;;;;;:38;16817:1;16802:12;:16;16781:38;;;;;;;;;;;;;;;:44;;;16774:51;;;;;16690:147;16934:11;16898;:20;16910:7;16898:20;;;;;;;;;;;;;;;:23;16919:1;16898:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;16894:88;;;16969:1;16962:8;;;;;16894:88;16994:12;17021;17051:1;17036:12;:16;17021:31;;17063:428;17078:5;17070:13;;:5;:13;;;17063:428;;;17100:13;17142:1;17133:5;17125;:13;17124:19;;;;;;;;17116:5;:27;17100:43;;17185:20;;:::i;:::-;17208:11;:20;17220:7;17208:20;;;;;;;;;;;;;;;:28;17229:6;17208:28;;;;;;;;;;;;;;;17185:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17271:11;17255:2;:12;;;:27;;;17251:229;;;17310:2;:8;;;17303:15;;;;;;;;;17251:229;17359:11;17344:2;:12;;;:26;;;17340:140;;;17399:6;17391:14;;17340:140;;;17463:1;17454:6;:10;17446:18;;17340:140;17063:428;;;;;17508:11;:20;17520:7;17508:20;;;;;;;;;;;;;;;:27;17529:5;17508:27;;;;;;;;;;;;;;;:33;;;17501:40;;;;;16295:1254;;;;;:::o;14303:39::-;;;;;;;;;;;;;;;;;:::o;6939:79::-;6977:7;7004:6;;;;;;;;;;;6997:13;;6939:79;:::o;8135:28::-;;;;;;;;;;;;;:::o;8301:78::-;8337:42;8301:78;:::o;8634:87::-;8673:13;8706:7;8699:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8634:87;:::o;10137:269::-;10230:4;10247:129;10256:12;:10;:12::i;:::-;10270:7;10279:96;10318:15;10279:96;;;;;;;;;;;;;;;;;:11;:25;10291:12;:10;:12::i;:::-;10279:25;;;;;;;;;;;;;;;:34;10305:7;10279:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;10247:8;:129::i;:::-;10394:4;10387:11;;10137:269;;;;:::o;9061:175::-;9147:4;9164:42;9174:12;:10;:12::i;:::-;9188:9;9199:6;9164:9;:42::i;:::-;9224:4;9217:11;;9061:175;;;;:::o;12839:32::-;;;;;;;;;;;;;:::o;16032:255::-;16124:7;16149:19;16171:14;:23;16186:7;16171:23;;;;;;;;;;;;;;;;;;;;;;;;;16149:45;;16227:1;16212:12;:16;;;:67;;16278:1;16212:67;;;16231:11;:20;16243:7;16231:20;;;;;;;;;;;;;;;:38;16267:1;16252:12;:16;16231:38;;;;;;;;;;;;;;;:44;;;16212:67;16205:74;;;16032:255;;;:::o;13553:93::-;7078:12;:10;:12::i;:::-;7068:22;;:6;;;;;;;;;;;:22;;;7060:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13629:5:::1;13615:11;;:19;;;;;;;;;;;;;;;;;;13553:93::o:0;14841:1181::-;15034:23;14084:80;15163:6;:4;:6::i;:::-;15147:24;;;;;;15190:12;:10;:12::i;:::-;15229:4;15084:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15060:200;;;;;;15034:226;;15273:18;14221:71;15385:9;15413:5;15437:6;15318:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15294:175;;;;;;15273:196;;15482:14;15587:15;15621:10;15523:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15499:158;;;;;;15482:175;;15670:17;15690:26;15700:6;15708:1;15711;15714;15690:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15670:46;;15756:1;15735:23;;:9;:23;;;;15727:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15830:6;:17;15837:9;15830:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;15821:5;:28;15813:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15915:6;15908:3;:13;;15900:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15983:31;15993:9;16004;15983;:31::i;:::-;15976:38;;;;14841:1181;;;;;;:::o;9244:151::-;9333:7;9360:11;:18;9372:5;9360:18;;;;;;;;;;;;;;;:27;9379:7;9360:27;;;;;;;;;;;;;;;;9353:34;;9244:151;;;;:::o;14175:117::-;14221:71;14175:117;:::o;13901:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7311:244::-;7078:12;:10;:12::i;:::-;7068:22;;:6;;;;;;;;;;;:22;;;7060:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7420:1:::1;7400:22;;:8;:22;;;;7392:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7510:8;7481:38;;7502:6;;;;;;;;;;;7481:38;;;;;;;;;;;;7539:8;7530:6;;:17;;;;;;;;;;;;;;;;;;7311:244:::0;:::o;6345:106::-;6398:15;6433:10;6426:17;;6345:106;:::o;12081:346::-;12200:1;12183:19;;:5;:19;;;;12175:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12281:1;12262:21;;:7;:21;;;;12254:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12365:6;12335:11;:18;12347:5;12335:18;;;;;;;;;;;;;;;:27;12354:7;12335:27;;;;;;;;;;;;;;;:36;;;;12403:7;12387:32;;12396:5;12387:32;;;12412:6;12387:32;;;;;;;;;;;;;;;;;;12081:346;;;:::o;10414:843::-;10538:1;10520:20;;:6;:20;;;;10512:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10622:1;10601:23;;:9;:23;;;;10593:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10683:11;;;;;;;;;;;10679:120;;;8337:42;10719:19;;:6;:19;;;10711:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10679:120;10831:4;10818:17;;:9;;;;;;;;;;;:17;;;:40;;;;;8337:42;10839:19;;:6;:19;;;;10818:40;10814:155;;;10898:5;10883:6;:21;;10875:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10814:155;10981:47;11002:6;11010:9;11021:6;10981:20;:47::i;:::-;11061:71;11083:6;11061:71;;;;;;;;;;;;;;;;;:9;:17;11071:6;11061:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;11041:9;:17;11051:6;11041:17;;;;;;;;;;;;;;;:91;;;;11166:32;11191:6;11166:9;:20;11176:9;11166:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11143:9;:20;11153:9;11143:20;;;;;;;;;;;;;;;:55;;;;11231:9;11214:35;;11223:6;11214:35;;;11242:6;11214:35;;;;;;;;;;;;;;;;;;10414:843;;;:::o;5175:192::-;5261:7;5294:1;5289;:6;;5297:12;5281:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5321:9;5337:1;5333;:5;5321:17;;5358:1;5351:8;;;5175:192;;;;;:::o;4842:181::-;4900:7;4920:9;4936:1;4932;:5;4920:17;;4961:1;4956;:6;;4948:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5014:1;5007:8;;;4842:181;;;;:::o;5031:136::-;5089:7;5116:43;5120:1;5123;5116:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5109:50;;5031:136;;;;:::o;11267:378::-;11370:1;11351:21;;:7;:21;;;;11343:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11421:49;11450:1;11454:7;11463:6;11421:20;:49::i;:::-;11498:24;11515:6;11498:12;;:16;;:24;;;;:::i;:::-;11483:12;:39;;;;11554:30;11577:6;11554:9;:18;11564:7;11554:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;11533:9;:18;11543:7;11533:18;;;;;;;;;;;;;;;:51;;;;11621:7;11600:37;;11617:1;11600:37;;;11630:6;11600:37;;;;;;;;;;;;;;;;;;11267:378;;:::o;17557:439::-;17648:23;17674:10;:21;17685:9;17674:21;;;;;;;;;;;;;;;;;;;;;;;;;17648:47;;17706:24;17733:20;17743:9;17733;:20::i;:::-;17706:47;;17834:9;17810:10;:21;17821:9;17810:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;17905:9;17861:54;;17888:15;17861:54;;17877:9;17861:54;;;;;;;;;;;;17928:60;17943:15;17960:9;17971:16;17928:14;:60::i;:::-;17557:439;;;;:::o;19837:151::-;19882:4;19895:15;19948:9;19937:20;;19977:7;19970:14;;;19837:151;:::o;12533:92::-;;;;:::o;18004:947::-;18110:6;18100:16;;:6;:16;;;;:30;;;;;18129:1;18120:6;:10;18100:30;18096:848;;;18169:1;18151:20;;:6;:20;;;18147:385;;18240:16;18259:14;:22;18274:6;18259:22;;;;;;;;;;;;;;;;;;;;;;;;;18240:41;;18300:17;18332:1;18320:9;:13;;;:60;;18379:1;18320:60;;;18336:11;:19;18348:6;18336:19;;;;;;;;;;;;;;;:34;18368:1;18356:9;:13;18336:34;;;;;;;;;;;;;;;:40;;;18320:60;18300:80;;18399:17;18419:21;18433:6;18419:9;:13;;:21;;;;:::i;:::-;18399:41;;18459:57;18476:6;18484:9;18495;18506;18459:16;:57::i;:::-;18147:385;;;;18570:1;18552:20;;:6;:20;;;18548:385;;18641:16;18660:14;:22;18675:6;18660:22;;;;;;;;;;;;;;;;;;;;;;;;;18641:41;;18701:17;18733:1;18721:9;:13;;;:60;;18780:1;18721:60;;;18737:11;:19;18749:6;18737:19;;;;;;;;;;;;;;;:34;18769:1;18757:9;:13;18737:34;;;;;;;;;;;;;;;:40;;;18721:60;18701:80;;18800:17;18820:21;18834:6;18820:9;:13;;:21;;;;:::i;:::-;18800:41;;18860:57;18877:6;18885:9;18896;18907;18860:16;:57::i;:::-;18548:385;;;;18096:848;18004:947;;;:::o;18959:705::-;19138:18;19159:77;19166:12;19159:77;;;;;;;;;;;;;;;;;:6;:77::i;:::-;19138:98;;19268:1;19253:12;:16;;;:85;;;;;19327:11;19273:65;;:11;:22;19285:9;19273:22;;;;;;;;;;;;;;;:40;19311:1;19296:12;:16;19273:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;19253:85;19249:339;;;19404:8;19355:11;:22;19367:9;19355:22;;;;;;;;;;;;;;;:40;19393:1;19378:12;:16;19355:40;;;;;;;;;;;;;;;:46;;:57;;;;19249:339;;;19484:33;;;;;;;;19495:11;19484:33;;;;;;19508:8;19484:33;;;19445:11;:22;19457:9;19445:22;;;;;;;;;;;;;;;:36;19468:12;19445:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19575:1;19560:12;:16;19532:14;:25;19547:9;19532:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;19249:339;19626:9;19605:51;;;19637:8;19647;19605:51;;;;;;;;;;;;;;;;;;;;;;;;18959:705;;;;;:::o;19672:161::-;19747:6;19778:5;19774:1;:9;19785:12;19766:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19823:1;19809:16;;19672:161;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://294bc2a07ff47160141e252f2c59f9991fd980e834df7f90dc6224348c8e52a4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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.