POL Price: $0.189132 (+4.83%)
Gas: 30 GWei
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw648184312024-11-28 3:48:36141 days ago1732765716IN
0xaA9853a2...c11F2C45c
0 POL0.003735325.00321819
Withdraw483342462023-10-04 23:01:31561 days ago1696460491IN
0xaA9853a2...c11F2C45c
0 POL0.0044817930
Withdraw465350982023-08-20 11:19:41607 days ago1692530381IN
0xaA9853a2...c11F2C45c
0 POL0.0090092560.30576403
Withdraw465329502023-08-20 10:02:31607 days ago1692525751IN
0xaA9853a2...c11F2C45c
0 POL0.0066163260.30576403
Withdraw384111742023-01-23 1:55:31816 days ago1674438931IN
0xaA9853a2...c11F2C45c
0 POL0.004481830.0001
Withdraw372915592022-12-26 8:21:49844 days ago1672042909IN
0xaA9853a2...c11F2C45c
0 POL0.0038399535
Withdraw372915592022-12-26 8:21:49844 days ago1672042909IN
0xaA9853a2...c11F2C45c
0 POL0.0052287535
Withdraw367617912022-12-13 1:22:31857 days ago1670894551IN
0xaA9853a2...c11F2C45c
0 POL0.0045118930.20153734
Withdraw355564492022-11-13 13:35:25886 days ago1668346525IN
0xaA9853a2...c11F2C45c
0 POL0.0059501639.82893433
Withdraw350170522022-10-31 6:44:09900 days ago1667198649IN
0xaA9853a2...c11F2C45c
0 POL0.0044817930.00005756
Withdraw337814642022-10-01 4:26:04930 days ago1664598364IN
0xaA9853a2...c11F2C45c
0 POL0.0044817930.00000001
Deposit329109512022-09-10 2:13:37951 days ago1662776017IN
0xaA9853a2...c11F2C45c
0 POL0.005899230.00000001
Withdraw268034572022-04-06 6:41:241108 days ago1649227284IN
0xaA9853a2...c11F2C45c
0 POL0.0044819330.001
Withdraw263476452022-03-25 14:05:371119 days ago1648217137IN
0xaA9853a2...c11F2C45c
0 POL0.0050031130.05
Withdraw254093412022-02-28 5:05:311145 days ago1646024731IN
0xaA9853a2...c11F2C45c
0 POL0.0044967230.10000001
Withdraw248834892022-02-13 7:05:511160 days ago1644735951IN
0xaA9853a2...c11F2C45c
0 POL0.000249731.5
Mass Update Pool...244732162022-02-02 19:45:321170 days ago1643831132IN
0xaA9853a2...c11F2C45c
0 POL0.0038295930.00000002
Withdraw243664222022-01-31 3:01:171173 days ago1643598077IN
0xaA9853a2...c11F2C45c
0 POL0.000224081.50000004
Withdraw241047552022-01-24 12:16:001180 days ago1643026560IN
0xaA9853a2...c11F2C45c
0 POL0.02970121217.98573755
Withdraw238140962022-01-17 4:51:071187 days ago1642395067IN
0xaA9853a2...c11F2C45c
0 POL0.000896356
Deposit237582292022-01-15 19:21:021188 days ago1642274462IN
0xaA9853a2...c11F2C45c
0 POL0.0060421230.00000001
Withdraw237517362022-01-15 15:22:521188 days ago1642260172IN
0xaA9853a2...c11F2C45c
0 POL0.0066140550
Withdraw235073992022-01-09 6:15:171195 days ago1641708917IN
0xaA9853a2...c11F2C45c
0 POL0.000732965
Deposit234813372022-01-08 13:35:331195 days ago1641648933IN
0xaA9853a2...c11F2C45c
0 POL0.007936250
Withdraw234813292022-01-08 13:35:171195 days ago1641648917IN
0xaA9853a2...c11F2C45c
0 POL0.0066140550
View all transactions

Latest 1 internal transaction

Parent Transaction Hash Block From To
205312532021-10-23 18:08:251272 days ago1635012505  Contract Creation0 POL
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xBEC0ed3B...b1e10e9a0
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
MasterChef

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity Multiple files format)

File 1 of 6: MasterChef.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <=0.8.9;

import "./IERC20.sol";

import "./Owner.sol";
import "./ReentrancyGuard.sol";
import "./SafeMath.sol";
import "./TransferHelper.sol";

contract MasterChef is Owner, ReentrancyGuard {
    using SafeMath for uint256;

    // Info of each user.
    struct UserInfo {
        uint256 amount; // How many LP tokens the user has provided.
        uint256 rewardDebt; // Reward debt. See explanation below.
        uint256 rewardLockedUp; // Reward locked up.
        uint256 nextHarvestUntil; // When can the user harvest again.
        //
        // We do some fancy math here. Basically, any point in time, the amount of tokens
        // entitled to a user but is pending to be distributed is:
        //
        //   pending reward = (user.amount * pool.acctokenPerShare) - user.rewardDebt
        //
        // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
        //   1. The pool's `acctokenPerShare` (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 {
        address lptoken; // Address of LP token contract.
        uint256 allocPoint; // How many allocation points assigned to this pool. tokens to distribute per block.
        uint256 lastRewardBlock; // Last block number that tokens distribution occurs.
        uint256 acctokenPerShare; // Accumulated tokens per share, times 1e12. See below.
        uint256 depositFeeBP; // Deposit fee in basis points
        uint256 harvestInterval; // Harvest interval in seconds
        uint256 lpSupply; // To determine more precisely the deposits and avoid the dilution of rewards
    }

    // The token!
    IERC20 public token;
    // Dev address.
    address public devAddress;
    // Deposit Fee address.
    address public feeAddress;
    // tokens created per block.
    uint256 public tokenPerBlock;
    // Bonus muliplier for early token makers.
    uint256 public constant BONUS_MULTIPLIER = 1;
    // Max harvest interval
    uint256 public MAXIMUM_HARVEST_INTERVAL;

    // Info of each pool.
    PoolInfo[] public poolInfo;
    // Info of each user that stakes LP tokens.
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;
    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;
    // The block number when token mining starts.
    uint256 public startBlock;
    // Total locked up rewards
    uint256 public totalLockedUpRewards;

    // Max deposit fee: 400 = 4%
    uint256 public MAXIMUM_DEPOSIT_FEE;

    // Fee to DEV : 100 = 10%
    uint256 public DEV_FEE;

    address public InformationalFeeContract;

    // Define if MasterChef can mint the token
    bool public isInfinite;

    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
    );
    event EmissionRateUpdated(uint256 previousAmount, uint256 newAmount);
    event ReferralCommissionPaid(
        address indexed user,
        address indexed referrer,
        uint256 commissionAmount
    );
    event RewardLockedUp(
        address indexed user,
        uint256 indexed pid,
        uint256 amountLockedUp
    );
    event AddPool(
        uint256 indexed pid,
        uint256 allocPoint,
        address lptokenAddress,
        uint256 depositFeeBP,
        uint256 harvestInterval,
        uint256 lastRewardBlock
    );
    event SetPool(
        uint256 indexed pid,
        uint256 allocPoint,
        uint256 depositFeeBP,
        uint256 harvestInterval
    );
    event SetDevAddress(address previousDevAddress, address newDevAddress);
    event SetFeeAddress(address previousFeeAddress, address newFeeAddress);
    event SetReferralCommissionRate(
        uint256 previousReferralCommissionRate,
        uint256 newReferralCommissionRate
    );
    event SettokenReferral(
        address previoustokenReferral,
        address newtokenReferral
    );

    constructor(
        address _token,
        //uint256 [_startBlock, _tokenPerBlock, _MAXIMUM_HARVEST_INTERVAL, _MAXIMUM_DEPOSIT_FEE, _DEV_FEE]
        uint256[5] memory _MasterChefValues,
        address _InformationalFeeContract,
        bool _isInfinite
    ) {
        token = IERC20(_token);
        startBlock = _MasterChefValues[0];
        tokenPerBlock = _MasterChefValues[1];
        MAXIMUM_HARVEST_INTERVAL = _MasterChefValues[2];
        MAXIMUM_DEPOSIT_FEE = _MasterChefValues[3];

        DEV_FEE = _MasterChefValues[4];

        InformationalFeeContract = _InformationalFeeContract;

        isInfinite = _isInfinite;

        devAddress = tx.origin;
        feeAddress = tx.origin;
    }

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

    // Add a new lp to the pool. Can only be called by the owner.
    // DO NOT add the same LP token more than once. Rewards will be messed up if you do.
    function add(
        uint256 _allocPoint,
        address _lptoken,
        uint256 _depositFeeBP,
        uint256 _harvestInterval,
        bool _withUpdate
    ) external isOwner {
        require(
            _depositFeeBP <= MAXIMUM_DEPOSIT_FEE,
            "add: invalid deposit fee basis points"
        );
        require(
            _harvestInterval <= MAXIMUM_HARVEST_INTERVAL,
            "add: invalid harvest interval"
        );

        // Test line to ensure the function will fail if the token doesn't exist
        IERC20(_lptoken).balanceOf(address(this));

        if (_withUpdate) {
            massUpdatePools();
        }
        uint256 lastRewardBlock = block.number > startBlock
            ? block.number
            : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo.push(
            PoolInfo({
                lptoken: _lptoken,
                allocPoint: _allocPoint,
                lastRewardBlock: lastRewardBlock,
                acctokenPerShare: 0,
                depositFeeBP: _depositFeeBP,
                harvestInterval: _harvestInterval,
                lpSupply: 0
            })
        );
        uint256 pid = poolInfo.length.sub(1);
        emit AddPool(
            pid,
            _allocPoint,
            _lptoken,
            _depositFeeBP,
            _harvestInterval,
            lastRewardBlock
        );
    }

    // Update the given pool's token allocation point and deposit fee. Can only be called by the owner.
    function set(
        uint256 _pid,
        uint256 _allocPoint,
        uint256 _depositFeeBP,
        uint256 _harvestInterval,
        bool _withUpdate
    ) external isOwner {
        require(
            _depositFeeBP <= MAXIMUM_DEPOSIT_FEE,
            "set: invalid deposit fee basis points"
        );
        require(
            _harvestInterval <= MAXIMUM_HARVEST_INTERVAL,
            "set: invalid harvest interval"
        );

        if (_withUpdate) {
            massUpdatePools();
        }
        totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(
            _allocPoint
        );
        poolInfo[_pid].allocPoint = _allocPoint;
        poolInfo[_pid].depositFeeBP = _depositFeeBP;
        poolInfo[_pid].harvestInterval = _harvestInterval;
        emit SetPool(_pid, _allocPoint, _depositFeeBP, _harvestInterval);
    }

    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to)
        public
        pure
        returns (uint256)
    {
        return _to.sub(_from).mul(BONUS_MULTIPLIER);
    }

    // View function to see pending tokens on frontend.
    function pendingtoken(uint256 _pid, address _user)
        external
        view
        returns (uint256)
    {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 acctokenPerShare = pool.acctokenPerShare;
        if (block.number > pool.lastRewardBlock && pool.lpSupply != 0) {
            uint256 multiplier = getMultiplier(
                pool.lastRewardBlock,
                block.number
            );
            uint256 tokenReward = multiplier
                .mul(tokenPerBlock)
                .mul(pool.allocPoint)
                .div(totalAllocPoint);
            acctokenPerShare = acctokenPerShare.add(
                tokenReward.mul(1e12).div(pool.lpSupply)
            );
        }
        uint256 pending = user.amount.mul(acctokenPerShare).div(1e12).sub(
            user.rewardDebt
        );
        return pending.add(user.rewardLockedUp);
    }

    // View function to see if user can harvest tokens.
    function canHarvest(uint256 _pid, address _user)
        public
        view
        returns (bool)
    {
        UserInfo storage user = userInfo[_pid][_user];
        return block.timestamp >= user.nextHarvestUntil;
    }

    // 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) internal {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.number <= pool.lastRewardBlock) {
            return;
        }
        if (pool.lpSupply == 0 || pool.allocPoint == 0) {
            pool.lastRewardBlock = block.number;
            return;
        }
        uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
        uint256 tokenReward = multiplier
            .mul(tokenPerBlock)
            .mul(pool.allocPoint)
            .div(totalAllocPoint);
        if (isInfinite) {
            token.mint(address(this), tokenReward.mul(DEV_FEE).div(1000).add(tokenReward));
            
            _safetokenTransfer(
                devAddress,
                tokenReward.mul(DEV_FEE).div(1000)
            );
            
        } else {
            _safetokenTransfer(
                devAddress,
                tokenReward.mul(DEV_FEE).div(1000)
            );

            _safetokenTransfer(
                InformationalFeeContract,
                tokenReward.mul(5).div(1000)
            );
        }
        pool.acctokenPerShare = pool.acctokenPerShare.add(
            tokenReward.mul(1e12).div(pool.lpSupply)
        );
        pool.lastRewardBlock = block.number;
    }

    // Update reward variables of the given pool to be up-to-date (external version w/ non-reentrancy)
    function updatePool(uint256 _pid) external nonReentrant {
        _updatePool(_pid);
    }

    // Deposit LP tokens to MasterChef for token allocation.
    function deposit(uint256 _pid, uint256 _amount) external nonReentrant {
        if (!isInfinite && token.balanceOf(address(this)) == 0) {
            revert("Distribution is over");
        }

        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        _updatePool(_pid);

        _payOrLockupPendingtoken(_pid);
        if (_amount > 0) {
            // To handle correctly the transfer tax tokens w/ the pools
            uint256 balanceBefore = IERC20(pool.lptoken).balanceOf(
                address(this)
            );
            TransferHelper.safeTransferFrom(
                pool.lptoken,
                msg.sender,
                address(this),
                _amount
            );
            _amount = IERC20(pool.lptoken).balanceOf(address(this)).sub(
                balanceBefore
            );

            if (pool.depositFeeBP > 0) {
                uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000);
                TransferHelper.safeTransfer(
                    pool.lptoken,
                    feeAddress,
                    depositFee
                );
                user.amount = user.amount.add(_amount).sub(depositFee);
                pool.lpSupply = pool.lpSupply.add(_amount).sub(depositFee);
            } else {
                user.amount = user.amount.add(_amount);
                pool.lpSupply = pool.lpSupply.add(_amount);
            }
        }
        user.rewardDebt = user.amount.mul(pool.acctokenPerShare).div(1e12);
        emit Deposit(msg.sender, _pid, _amount);
    }

    // Withdraw LP tokens from MasterChef.
    function withdraw(uint256 _pid, uint256 _amount) external nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        require(user.amount >= _amount, "withdraw: not good");

        _updatePool(_pid);
        _payOrLockupPendingtoken(_pid);
        if (_amount > 0) {
            user.amount = user.amount.sub(_amount);
            TransferHelper.safeTransfer(pool.lptoken, msg.sender, _amount);
            pool.lpSupply = pool.lpSupply.sub(_amount);
        }
        user.rewardDebt = user.amount.mul(pool.acctokenPerShare).div(1e12);
        emit Withdraw(msg.sender, _pid, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) external nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 amount = user.amount;
        pool.lpSupply = pool.lpSupply.sub(user.amount);
        user.amount = 0;
        user.rewardDebt = 0;
        user.rewardLockedUp = 0;
        user.nextHarvestUntil = 0;
        TransferHelper.safeTransfer(pool.lptoken, msg.sender, amount);
        emit EmergencyWithdraw(msg.sender, _pid, amount);
    }

    // Pay or lockup pending tokens.
    function _payOrLockupPendingtoken(uint256 _pid) internal {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];

        if (user.nextHarvestUntil == 0) {
            user.nextHarvestUntil = block.timestamp.add(pool.harvestInterval);
        }

        uint256 pending = user.amount.mul(pool.acctokenPerShare).div(1e12).sub(
            user.rewardDebt
        );
        if (canHarvest(_pid, msg.sender)) {
            if (pending > 0 || user.rewardLockedUp > 0) {
                uint256 totalRewards = pending.add(user.rewardLockedUp);

                // reset lockup
                totalLockedUpRewards = totalLockedUpRewards.sub(
                    user.rewardLockedUp
                );
                user.rewardLockedUp = 0;
                user.nextHarvestUntil = block.timestamp.add(
                    pool.harvestInterval
                );

                // send rewards
                _safetokenTransfer(msg.sender, totalRewards);
            }
        } else if (pending > 0) {
            user.rewardLockedUp = user.rewardLockedUp.add(pending);
            totalLockedUpRewards = totalLockedUpRewards.add(pending);
            emit RewardLockedUp(msg.sender, _pid, pending);
        }
    }

    // Safe token transfer function, just in case if rounding error causes pool to not have enough tokens.
    function _safetokenTransfer(address _to, uint256 _amount) internal {
        uint256 tokenBal = token.balanceOf(address(this));

        if (_amount >= tokenBal) {
            if (!isInfinite && tokenPerBlock != 0) {
                _updateEmissionRate(0);
            }
            TransferHelper.safeTransfer(address(token), _to, tokenBal);
        } else {
            TransferHelper.safeTransfer(address(token), _to, _amount);
        }
    }

    // Update dev address by the previous dev.
    function setDevAddress(address _devAddress) external {
        require(msg.sender == devAddress, "setDevAddress: FORBIDDEN");
        require(_devAddress != address(0), "setDevAddress: ZERO");

        address previousDevAddress = devAddress;
        devAddress = _devAddress;
        emit SetDevAddress(previousDevAddress, devAddress);
    }

    function setFeeAddress(address _feeAddress) external {
        require(msg.sender == feeAddress, "setFeeAddress: FORBIDDEN");
        require(_feeAddress != address(0), "setFeeAddress: ZERO");

        address previousFeeAddress = feeAddress;
        feeAddress = _feeAddress;
        emit SetFeeAddress(previousFeeAddress, feeAddress);
    }

    // Pancake has to add hidden dummy pools in order to alter the emission, here we make it simple and transparent to all.
    function updateEmissionRate(uint256 _tokenPerBlock) external isOwner {
        _updateEmissionRate(_tokenPerBlock);
    }

    function _updateEmissionRate(uint256 _tokenPerBlock) internal {
        massUpdatePools();
        uint256 previoustokenPerBlock = tokenPerBlock;
        tokenPerBlock = _tokenPerBlock;
        emit EmissionRateUpdated(previoustokenPerBlock, tokenPerBlock);
    }
}

File 2 of 6: IERC20.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <=0.8.9;

interface IERC20 {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function mint(address _to, uint256 _amount) external returns (bool);

    function burn(uint256 amount) external returns (bool);
}

File 3 of 6: Owner.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <=0.8.9;

abstract contract Owner {
    address public owner;

    event OwnerSet(address indexed oldOwner, address indexed newOwner);

    modifier isOwner() {
        require(msg.sender == owner, "Caller is not owner");
        _;
    }

    constructor() {
        owner = msg.sender;
        emit OwnerSet(address(0), owner);
    }

    function changeOwner(address newOwner) external isOwner {
        emit OwnerSet(owner, newOwner);
        owner = newOwner;
    }

    function getOwner() external view returns (address) {
        return owner;
    }
}

File 4 of 6: ReentrancyGuard.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <=0.8.9;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

File 5 of 6: SafeMath.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.5.0 <=0.8.9;

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;
    }
}

File 6 of 6: TransferHelper.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.6.2 <=0.8.9;

library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0x095ea7b3, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: APPROVE_FAILED"
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: TRANSFER_FAILED"
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0x23b872dd, from, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: TRANSFER_FROM_FAILED"
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, "TransferHelper: ETH_TRANSFER_FAILED");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256[5]","name":"_MasterChefValues","type":"uint256[5]"},{"internalType":"address","name":"_InformationalFeeContract","type":"address"},{"internalType":"bool","name":"_isInfinite","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"address","name":"lptokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositFeeBP","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardBlock","type":"uint256"}],"name":"AddPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"EmissionRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"commissionAmount","type":"uint256"}],"name":"ReferralCommissionPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountLockedUp","type":"uint256"}],"name":"RewardLockedUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousDevAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newDevAddress","type":"address"}],"name":"SetDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousFeeAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newFeeAddress","type":"address"}],"name":"SetFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositFeeBP","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"harvestInterval","type":"uint256"}],"name":"SetPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousReferralCommissionRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReferralCommissionRate","type":"uint256"}],"name":"SetReferralCommissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previoustokenReferral","type":"address"},{"indexed":false,"internalType":"address","name":"newtokenReferral","type":"address"}],"name":"SettokenReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InformationalFeeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_DEPOSIT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_HARVEST_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"address","name":"_lptoken","type":"address"},{"internalType":"uint256","name":"_depositFeeBP","type":"uint256"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInfinite","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingtoken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"address","name":"lptoken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"acctokenPerShare","type":"uint256"},{"internalType":"uint256","name":"depositFeeBP","type":"uint256"},{"internalType":"uint256","name":"harvestInterval","type":"uint256"},{"internalType":"uint256","name":"lpSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint256","name":"_depositFeeBP","type":"uint256"},{"internalType":"uint256","name":"_harvestInterval","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLockedUpRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardLockedUp","type":"uint256"},{"internalType":"uint256","name":"nextHarvestUntil","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101805760003560e01c8063081e3eda146101855780630ba84cd21461019c5780631526fe27146101b157806317caf6f1146102035780632e6c998d1461020c57806333d9ed3b1461022f5780633ad10ef61461024357806341275358146102635780634198709a14610276578063436a88c11461027f578063441a3e7014610288578063474fa6301461029b57806348cd4cb1146102a457806351eb05a6146102ad5780635312ea8e146102c057806360e4c4ce146102d3578063630b5ba1146102e65780638705fcd4146102ee578063893d20e8146103015780638aa28550146103125780638da5cb5b1461031a5780638dbb1e3a1461032d57806393f1a40b146103405780639aca95ec146103a0578063a6f9dae1146103a9578063d0d41fe1146103bc578063d37bd133146103cf578063de73149d146103e2578063e2bbb158146103eb578063f06a6a8c146103fe578063f6e6a0e614610411578063fc0c546a14610424575b600080fd5b6007545b6040519081526020015b60405180910390f35b6101af6101aa366004611cf4565b610437565b005b6101c46101bf366004611cf4565b610476565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610193565b61018960095481565b61021f61021a366004611d29565b6104cf565b6040519015158152602001610193565b600e5461021f90600160a01b900460ff1681565b600354610256906001600160a01b031681565b6040516101939190611d55565b600454610256906001600160a01b031681565b61018960055481565b610189600d5481565b6101af610296366004611d69565b6104ff565b610189600b5481565b610189600a5481565b6101af6102bb366004611cf4565b610666565b6101af6102ce366004611cf4565b61069e565b6101af6102e1366004611d99565b610780565b6101af610979565b6101af6102fc366004611de6565b6109a4565b6000546001600160a01b0316610256565b610189600181565b600054610256906001600160a01b031681565b61018961033b366004611d69565b610aa3565b61038061034e366004611d29565b600860209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610193565b610189600c5481565b6101af6103b7366004611de6565b610ac1565b6101af6103ca366004611de6565b610b46565b6101896103dd366004611d29565b610c39565b61018960065481565b6101af6103f9366004611d69565b610d5f565b600e54610256906001600160a01b031681565b6101af61041f366004611e01565b6110ce565b600254610256906001600160a01b031681565b6000546001600160a01b0316331461046a5760405162461bcd60e51b815260040161046190611e47565b60405180910390fd5b61047381611440565b50565b6007818154811061048657600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601546001600160a01b039095169650929491939092919087565b60008281526008602090815260408083206001600160a01b03851684529091529020600301544210155b92915050565b600260015414156105225760405162461bcd60e51b815260040161046190611e74565b600260018190555060006007838154811061053f5761053f611eab565b6000918252602080832086845260088252604080852033865290925292208054600790920290920192508311156105ad5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b6044820152606401610461565b6105b684611486565b6105bf8461167c565b82156105fe5780546105d190846117fb565b815581546105e9906001600160a01b0316338561183d565b60068201546105f890846117fb565b60068301555b6003820154815461061f9164e8d4a51000916106199161195a565b906119d9565b6001820155604051838152849033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568906020015b60405180910390a35050600180555050565b600260015414156106895760405162461bcd60e51b815260040161046190611e74565b600260015561069781611486565b5060018055565b600260015414156106c15760405162461bcd60e51b815260040161046190611e74565b60026001819055506000600782815481106106de576106de611eab565b6000918252602080832085845260088252604080852033865290925292208054600792909202909201600681015490935061071990826117fb565b6006840155600080835560018301819055600283018190556003830155825461074c906001600160a01b0316338361183d565b604051818152849033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae059590602001610654565b6000546001600160a01b031633146107aa5760405162461bcd60e51b815260040161046190611e47565b600c5483111561080a5760405162461bcd60e51b815260206004820152602560248201527f7365743a20696e76616c6964206465706f7369742066656520626173697320706044820152646f696e747360d81b6064820152608401610461565b60065482111561085c5760405162461bcd60e51b815260206004820152601d60248201527f7365743a20696e76616c6964206861727665737420696e74657276616c0000006044820152606401610461565b801561086a5761086a610979565b6108ad846108a76007888154811061088457610884611eab565b9060005260206000209060070201600101546009546117fb90919063ffffffff16565b90611a18565b60098190555083600786815481106108c7576108c7611eab565b90600052602060002090600702016001018190555082600786815481106108f0576108f0611eab565b906000526020600020906007020160040181905550816007868154811061091957610919611eab565b60009182526020918290206005600790920201019190915560408051868152918201859052810183905285907f638f84b26ab0fed05e944aa4ad0d38a62a9fc8234984bbb9e0091a676bf305f49060600160405180910390a25050505050565b60075460005b818110156109a05761099081611486565b61099981611ed7565b905061097f565b5050565b6004546001600160a01b031633146109f95760405162461bcd60e51b815260206004820152601860248201527739b2ba2332b2a0b2323932b9b99d102327a92124a22222a760411b6044820152606401610461565b6001600160a01b038116610a455760405162461bcd60e51b8152602060048201526013602482015272736574466565416464726573733a205a45524f60681b6044820152606401610461565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116917fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f791610a97918491611ef2565b60405180910390a15050565b6000610aba6001610ab484866117fb565b9061195a565b9392505050565b6000546001600160a01b03163314610aeb5760405162461bcd60e51b815260040161046190611e47565b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314610b9b5760405162461bcd60e51b815260206004820152601860248201527739b2ba2232bb20b2323932b9b99d102327a92124a22222a760411b6044820152606401610461565b6001600160a01b038116610be75760405162461bcd60e51b8152602060048201526013602482015272736574446576416464726573733a205a45524f60681b6044820152606401610461565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116917f618c54559e94f1499a808aad71ee8729f8e74e8c48e979616328ce493a1a52e791610a97918491611ef2565b60008060078481548110610c4f57610c4f611eab565b600091825260208083208784526008825260408085206001600160a01b03891686529092529220600360079092029092019081015460028201549193509043118015610c9e5750600683015415155b15610d0b576000610cb3846002015443610aa3565b90506000610cda6009546106198760010154610ab46005548761195a90919063ffffffff16565b9050610d06610cff866006015461061964e8d4a510008561195a90919063ffffffff16565b8490611a18565b925050505b6000610d3b8360010154610d3564e8d4a5100061061986886000015461195a90919063ffffffff16565b906117fb565b9050610d54836002015482611a1890919063ffffffff16565b979650505050505050565b60026001541415610d825760405162461bcd60e51b815260040161046190611e74565b6002600155600e54600160a01b900460ff16158015610e1e57506002546040516370a0823160e01b81526001600160a01b03909116906370a0823190610dcc903090600401611d55565b60206040518083038186803b158015610de457600080fd5b505afa158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c9190611f0c565b155b15610e625760405162461bcd60e51b81526020600482015260146024820152732234b9ba3934b13aba34b7b71034b99037bb32b960611b6044820152606401610461565b600060078381548110610e7757610e77611eab565b60009182526020808320868452600882526040808520338652909252922060079091029091019150610ea884611486565b610eb18461167c565b821561107a5781546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610ee7903090600401611d55565b60206040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190611f0c565b8354909150610f51906001600160a01b0316333087611a75565b82546040516370a0823160e01b8152610fd69183916001600160a01b03909116906370a0823190610f86903090600401611d55565b60206040518083038186803b158015610f9e57600080fd5b505afa158015610fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190611f0c565b60048401549094501561105557600061100261271061061986600401548861195a90919063ffffffff16565b8454600454919250611021916001600160a01b0391821691168361183d565b8254611033908290610d359088611a18565b8355600684015461104a908290610d359088611a18565b600685015550611078565b81546110619085611a18565b825560068301546110729085611a18565b60068401555b505b600382015481546110959164e8d4a51000916106199161195a565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590602001610654565b6000546001600160a01b031633146110f85760405162461bcd60e51b815260040161046190611e47565b600c548311156111585760405162461bcd60e51b815260206004820152602560248201527f6164643a20696e76616c6964206465706f7369742066656520626173697320706044820152646f696e747360d81b6064820152608401610461565b6006548211156111aa5760405162461bcd60e51b815260206004820152601d60248201527f6164643a20696e76616c6964206861727665737420696e74657276616c0000006044820152606401610461565b6040516370a0823160e01b81526001600160a01b038516906370a08231906111d6903090600401611d55565b60206040518083038186803b1580156111ee57600080fd5b505afa158015611202573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112269190611f0c565b50801561123557611235610979565b6000600a54431161124857600a5461124a565b435b60095490915061125a9087611a18565b6009556040805160e0810182526001600160a01b03878116825260208201898152928201848152600060608401818152608085018a815260a086018a815260c08701848152600780546001808201835582885299517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68891830291820180546001600160a01b03191691909a161790985598517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68988015594517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a87015591517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b860155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c850155517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68d84015590517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68e9092019190915591546113db916117fb565b604080518981526001600160a01b0389166020820152908101879052606081018690526080810184905290915081907fd11951a412a72dea268b72d4675d9d7e30aa8975bbc7cce1b279a5fe26a5a4059060a00160405180910390a250505050505050565b611448610979565b600580549082905560408051828152602081018490527f144d30c57e277deb14c5d686b95cf61cfea257d9d551cef4288b2f7db418f87a9101610a97565b60006007828154811061149b5761149b611eab565b90600052602060002090600702019050806002015443116114ba575050565b600681015415806114cd57506001810154155b156114dc574360029091015550565b60006114ec826002015443610aa3565b905060006115136009546106198560010154610ab46005548761195a90919063ffffffff16565b600e54909150600160a01b900460ff16156115fc57600254600d546001600160a01b03909116906340c10f1990309061155b9085906108a7906103e89061061990849061195a565b6040518363ffffffff1660e01b8152600401611578929190611f25565b602060405180830381600087803b15801561159257600080fd5b505af11580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190611f3e565b50600354600d546115f7916001600160a01b0316906115f2906103e89061061990869061195a565b611ba5565b611644565b600354600d54611623916001600160a01b0316906115f2906103e89061061990869061195a565b600e54611644906001600160a01b03166115f26103e861061985600561195a565b600683015461166b90611660906106198464e8d4a5100061195a565b600385015490611a18565b600384015550504360029091015550565b60006007828154811061169157611691611eab565b6000918252602080832085845260088252604080852033865290925292206003810154600790920290920192506116d85760058201546116d2904290611a18565b60038201555b60006117068260010154610d3564e8d4a510006106198760030154876000015461195a90919063ffffffff16565b905061171284336104cf565b1561179357600081118061172a575060008260020154115b1561178e576000611748836002015483611a1890919063ffffffff16565b90506117638360020154600b546117fb90919063ffffffff16565b600b5560006002840155600584015461177d904290611a18565b600384015561178c3382611ba5565b505b6117f5565b80156117f55760028201546117a89082611a18565b6002830155600b546117ba9082611a18565b600b55604051818152849033907fee470483107f579a55c754fa00613c45a9a3b617a418b39cb0be97e5381ba7c19060200160405180910390a35b50505050565b6000610aba83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c8c565b600080846001600160a01b031663a9059cbb8585604051602401611862929190611f25565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161189b9190611f87565b6000604051808303816000865af19150503d80600081146118d8576040519150601f19603f3d011682016040523d82523d6000602084013e6118dd565b606091505b50915091508180156119075750805115806119075750808060200190518101906119079190611f3e565b6119535760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610461565b5050505050565b600082611969575060006104f9565b60006119758385611fa3565b9050826119828583611fc2565b14610aba5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610461565b6000610aba83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250611cc6565b600080611a258385611fe4565b905083811015610aba5760405162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b6044820152606401610461565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691611ad99190611f87565b6000604051808303816000865af19150503d8060008114611b16576040519150601f19603f3d011682016040523d82523d6000602084013e611b1b565b606091505b5091509150818015611b45575080511580611b45575080806020019051810190611b459190611f3e565b611b9d5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610461565b505050505050565b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611bd6903090600401611d55565b60206040518083038186803b158015611bee57600080fd5b505afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c269190611f0c565b9050808210611c7557600e54600160a01b900460ff16158015611c4a575060055415155b15611c5957611c596000611440565b600254611c70906001600160a01b0316848361183d565b505050565b600254611c70906001600160a01b0316848461183d565b60008184841115611cb05760405162461bcd60e51b81526004016104619190611ffc565b506000611cbd848661202f565b95945050505050565b60008183611ce75760405162461bcd60e51b81526004016104619190611ffc565b506000611cbd8486611fc2565b600060208284031215611d0657600080fd5b5035919050565b80356001600160a01b0381168114611d2457600080fd5b919050565b60008060408385031215611d3c57600080fd5b82359150611d4c60208401611d0d565b90509250929050565b6001600160a01b0391909116815260200190565b60008060408385031215611d7c57600080fd5b50508035926020909101359150565b801515811461047357600080fd5b600080600080600060a08688031215611db157600080fd5b853594506020860135935060408601359250606086013591506080860135611dd881611d8b565b809150509295509295909350565b600060208284031215611df857600080fd5b610aba82611d0d565b600080600080600060a08688031215611e1957600080fd5b85359450611e2960208701611d0d565b935060408601359250606086013591506080860135611dd881611d8b565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611eeb57611eeb611ec1565b5060010190565b6001600160a01b0392831681529116602082015260400190565b600060208284031215611f1e57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215611f5057600080fd5b8151610aba81611d8b565b60005b83811015611f76578181015183820152602001611f5e565b838111156117f55750506000910152565b60008251611f99818460208701611f5b565b9190910192915050565b6000816000190483118215151615611fbd57611fbd611ec1565b500290565b600082611fdf57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611ff757611ff7611ec1565b500190565b602081526000825180602084015261201b816040850160208701611f5b565b601f01601f19169190910160400192915050565b60008282101561204157612041611ec1565b50039056fea2646970667358221220058ddc8b371bf9540b25895e82894c1b542251ebbb3e086e208ff6566204f75864736f6c63430008090033

Deployed Bytecode Sourcemap

205:16883:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5029:93;5100:8;:15;5029:93;;;160:25:6;;;148:2;133:18;5029:93:1;;;;;;;;16696:121;;;;;;:::i;:::-;;:::i;:::-;;2274:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;714:32:6;;;696:51;;778:2;763:18;;756:34;;;;806:18;;;799:34;;;;864:2;849:18;;842:34;;;;907:3;892:19;;885:35;734:3;936:19;;929:35;995:3;980:19;;973:35;683:3;668:19;2274:26:1;381:633:6;2511:34:1;;;;;;8970:223;;;;;;:::i;:::-;;:::i;:::-;;;1621:14:6;;1614:22;1596:41;;1584:2;1569:18;8970:223:1;1456:187:6;2931:22:1;;;;;-1:-1:-1;;;2931:22:1;;;;;;1920:25;;;;;-1:-1:-1;;;;;1920:25:1;;;;;;;;;;:::i;1979:::-;;;;;-1:-1:-1;;;;;1979:25:1;;;2043:28;;;;;;2809:22;;;;;;12697:664;;;;;;:::i;:::-;;:::i;2663:35::-;;;;;;2601:25;;;;;;10897:90;;;;;;:::i;:::-;;:::i;13429:523::-;;;;;;:::i;:::-;;:::i;6804:862::-;;;;;;:::i;:::-;;:::i;9273:176::-;;;:::i;16224:342::-;;;;;;:::i;:::-;;:::i;536:81:2:-;579:7;605:5;-1:-1:-1;;;;;605:5:2;536:81;;2124:44:1;;2167:1;2124:44;;100:20:2;;;;;-1:-1:-1;;;;;100:20:2;;;7739:169:1;;;;;;:::i;:::-;;:::i;2354:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3174:25:6;;;3230:2;3215:18;;3208:34;;;;3258:18;;;3251:34;3316:2;3301:18;;3294:34;3161:3;3146:19;2354:64:1;2943:391:6;2738:34:1;;;;;;401:129:2;;;;;;:::i;:::-;;:::i;15876:342:1:-;;;;;;:::i;:::-;;:::i;7970:938::-;;;;;;:::i;:::-;;:::i;2202:39::-;;;;;;11054:1594;;;;;;:::i;:::-;;:::i;2838:39::-;;;;;-1:-1:-1;;;;;2838:39:1;;;5283:1411;;;;;;:::i;:::-;;:::i;1875:19::-;;;;;-1:-1:-1;;;;;1875:19:1;;;16696:121;251:5:2;;-1:-1:-1;;;;;251:5:2;237:10;:19;229:51;;;;-1:-1:-1;;;229:51:2;;;;;;;:::i;:::-;;;;;;;;;16775:35:1::1;16795:14;16775:19;:35::i;:::-;16696:121:::0;:::o;2274:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2274:26:1;;;;-1:-1:-1;2274:26:1;;;;;;;;;:::o;8970:223::-;9064:4;9108:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;9108:21:1;;;;;;;;;9165;;;9146:15;:40;;8970:223;;;;;:::o;12697:664::-;193:1:3;332:7;;:19;;324:63;;;;-1:-1:-1;;;324:63:3;;;;;;;:::i;:::-;193:1;398:7;:18;;;;12778:21:1::1;12802:8;12811:4;12802:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;12850;;;:8:::1;:14:::0;;;;;;12865:10:::1;12850:26:::0;;;;;;;12894:11;;12802:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;12894:22:1;-1:-1:-1;12894:22:1::1;12886:53;;;::::0;-1:-1:-1;;;12886:53:1;;5128:2:6;12886:53:1::1;::::0;::::1;5110:21:6::0;5167:2;5147:18;;;5140:30;-1:-1:-1;;;5186:18:6;;;5179:48;5244:18;;12886:53:1::1;4926:342:6::0;12886:53:1::1;12950:17;12962:4;12950:11;:17::i;:::-;12977:30;13002:4;12977:24;:30::i;:::-;13021:11:::0;;13017:212:::1;;13062:11:::0;;:24:::1;::::0;13078:7;13062:15:::1;:24::i;:::-;13048:38:::0;;13128:12;;13100:62:::1;::::0;-1:-1:-1;;;;;13128:12:1::1;13142:10;13154:7:::0;13100:27:::1;:62::i;:::-;13192:13;::::0;::::1;::::0;:26:::1;::::0;13210:7;13192:17:::1;:26::i;:::-;13176:13;::::0;::::1;:42:::0;13017:212:::1;13272:21;::::0;::::1;::::0;13256:11;;:48:::1;::::0;13299:4:::1;::::0;13256:38:::1;::::0;:15:::1;:38::i;:::-;:42:::0;::::1;:48::i;:::-;13238:15;::::0;::::1;:66:::0;13319:35:::1;::::0;160:25:6;;;13340:4:1;;13328:10:::1;::::0;13319:35:::1;::::0;148:2:6;133:18;13319:35:1::1;;;;;;;;-1:-1:-1::0;;150:1:3;437:22;;-1:-1:-1;;12697:664:1:o;10897:90::-;193:1:3;332:7;;:19;;324:63;;;;-1:-1:-1;;;324:63:3;;;;;;;:::i;:::-;193:1;398:7;:18;10963:17:1::1;10975:4:::0;10963:11:::1;:17::i;:::-;-1:-1:-1::0;150:1:3;437:22;;10897:90:1:o;13429:523::-;193:1:3;332:7;;:19;;324:63;;;;-1:-1:-1;;;324:63:3;;;;;;;:::i;:::-;193:1;398:7;:18;;;;13502:21:1::1;13526:8;13535:4;13526:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;13574;;;:8:::1;:14:::0;;;;;;13589:10:::1;13574:26:::0;;;;;;;13627:11;;13526:14:::1;::::0;;;::::1;::::0;;::::1;13664:13;::::0;::::1;::::0;13526:14;;-1:-1:-1;13664:30:1::1;::::0;13627:11;13664:17:::1;:30::i;:::-;13648:13;::::0;::::1;:46:::0;13718:1:::1;13704:15:::0;;;13729::::1;::::0;::::1;:19:::0;;;13758::::1;::::0;::::1;:23:::0;;;13791:21:::1;::::0;::::1;:25:::0;13854:12;;13826:61:::1;::::0;-1:-1:-1;;;;;13854:12:1::1;13868:10;13880:6:::0;13826:27:::1;:61::i;:::-;13902:43;::::0;160:25:6;;;13932:4:1;;13920:10:::1;::::0;13902:43:::1;::::0;148:2:6;133:18;13902:43:1::1;14:177:6::0;6804:862:1;251:5:2;;-1:-1:-1;;;;;251:5:2;237:10;:19;229:51;;;;-1:-1:-1;;;229:51:2;;;;;;;:::i;:::-;7030:19:1::1;;7013:13;:36;;6992:120;;;::::0;-1:-1:-1;;;6992:120:1;;5475:2:6;6992:120:1::1;::::0;::::1;5457:21:6::0;5514:2;5494:18;;;5487:30;5553:34;5533:18;;;5526:62;-1:-1:-1;;;5604:18:6;;;5597:35;5649:19;;6992:120:1::1;5273:401:6::0;6992:120:1::1;7163:24;;7143:16;:44;;7122:120;;;::::0;-1:-1:-1;;;7122:120:1;;5881:2:6;7122:120:1::1;::::0;::::1;5863:21:6::0;5920:2;5900:18;;;5893:30;5959:31;5939:18;;;5932:59;6008:18;;7122:120:1::1;5679:353:6::0;7122:120:1::1;7257:11;7253:59;;;7284:17;:15;:17::i;:::-;7339:85;7403:11;7339:46;7359:8;7368:4;7359:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;7339:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:85::i;:::-;7321:15;:103;;;;7462:11;7434:8;7443:4;7434:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;7513:13;7483:8;7492:4;7483:14;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;:43;;;;7569:16;7536:8;7545:4;7536:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;:30:::1;:14;::::0;;::::1;;:30;:49:::0;;;;7600:59:::1;::::0;;6239:25:6;;;6280:18;;;6273:34;;;6323:18;;6316:34;;;7608:4:1;;7600:59:::1;::::0;6227:2:6;6212:18;7600:59:1::1;;;;;;;6804:862:::0;;;;;:::o;9273:176::-;9334:8;:15;9317:14;9359:84;9387:6;9381:3;:12;9359:84;;;9416:16;9428:3;9416:11;:16::i;:::-;9395:5;;;:::i;:::-;;;9359:84;;;;9307:142;9273:176::o;16224:342::-;16309:10;;-1:-1:-1;;;;;16309:10:1;16295;:24;16287:61;;;;-1:-1:-1;;;16287:61:1;;6835:2:6;16287:61:1;;;6817:21:6;6874:2;6854:18;;;6847:30;-1:-1:-1;;;6893:18:6;;;6886:54;6957:18;;16287:61:1;6633:348:6;16287:61:1;-1:-1:-1;;;;;16366:25:1;;16358:57;;;;-1:-1:-1;;;16358:57:1;;7188:2:6;16358:57:1;;;7170:21:6;7227:2;7207:18;;;7200:30;-1:-1:-1;;;7246:18:6;;;7239:49;7305:18;;16358:57:1;6986:343:6;16358:57:1;16455:10;;;-1:-1:-1;;;;;16475:24:1;;;-1:-1:-1;;;;;;16475:24:1;;;;;;;16514:45;;16455:10;;;16514:45;;;;16455:10;;16514:45;:::i;:::-;;;;;;;;16277:289;16224:342;:::o;7739:169::-;7835:7;7865:36;2167:1;7865:14;:3;7873:5;7865:7;:14::i;:::-;:18;;:36::i;:::-;7858:43;7739:169;-1:-1:-1;;;7739:169:1:o;401:129:2:-;251:5;;-1:-1:-1;;;;;251:5:2;237:10;:19;229:51;;;;-1:-1:-1;;;229:51:2;;;;;;;:::i;:::-;481:5:::1;::::0;;472:25:::1;::::0;-1:-1:-1;;;;;472:25:2;;::::1;::::0;481:5;::::1;::::0;472:25:::1;::::0;::::1;507:5;:16:::0;;-1:-1:-1;;;;;;507:16:2::1;-1:-1:-1::0;;;;;507:16:2;;;::::1;::::0;;;::::1;::::0;;401:129::o;15876:342:1:-;15961:10;;-1:-1:-1;;;;;15961:10:1;15947;:24;15939:61;;;;-1:-1:-1;;;15939:61:1;;7845:2:6;15939:61:1;;;7827:21:6;7884:2;7864:18;;;7857:30;-1:-1:-1;;;7903:18:6;;;7896:54;7967:18;;15939:61:1;7643:348:6;15939:61:1;-1:-1:-1;;;;;16018:25:1;;16010:57;;;;-1:-1:-1;;;16010:57:1;;8198:2:6;16010:57:1;;;8180:21:6;8237:2;8217:18;;;8210:30;-1:-1:-1;;;8256:18:6;;;8249:49;8315:18;;16010:57:1;7996:343:6;16010:57:1;16107:10;;;-1:-1:-1;;;;;16127:24:1;;;-1:-1:-1;;;;;;16127:24:1;;;;;;;16166:45;;16107:10;;;16166:45;;;;16107:10;;16166:45;:::i;7970:938::-;8068:7;8091:21;8115:8;8124:4;8115:14;;;;;;;;:::i;:::-;;;;;;;;;8163;;;:8;:14;;;;;;-1:-1:-1;;;;;8163:21:1;;;;;;;;;8221;8115:14;;;;;;;8221:21;;;;8271:20;;;;8115:14;;-1:-1:-1;8221:21:1;8256:12;:35;:57;;;;-1:-1:-1;8295:13:1;;;;:18;;8256:57;8252:487;;;8329:18;8350:95;8381:4;:20;;;8419:12;8350:13;:95::i;:::-;8329:116;;8459:19;8481:122;8587:15;;8481:84;8549:4;:15;;;8481:46;8513:13;;8481:10;:31;;:46;;;;:::i;:122::-;8459:144;;8636:92;8674:40;8700:4;:13;;;8674:21;8690:4;8674:11;:15;;:21;;;;:::i;:40::-;8636:16;;:20;:92::i;:::-;8617:111;;8315:424;;8252:487;8748:15;8766:86;8827:4;:15;;;8766:43;8804:4;8766:33;8782:16;8766:4;:11;;;:15;;:33;;;;:::i;:43::-;:47;;:86::i;:::-;8748:104;;8869:32;8881:4;:19;;;8869:7;:11;;:32;;;;:::i;:::-;8862:39;7970:938;-1:-1:-1;;;;;;;7970:938:1:o;11054:1594::-;193:1:3;332:7;;:19;;324:63;;;;-1:-1:-1;;;324:63:3;;;;;;;:::i;:::-;193:1;398:7;:18;11139:10:1::1;::::0;-1:-1:-1;;;11139:10:1;::::1;;;11138:11;:50:::0;::::1;;;-1:-1:-1::0;11153:5:1::1;::::0;:30:::1;::::0;-1:-1:-1;;;11153:30:1;;-1:-1:-1;;;;;11153:5:1;;::::1;::::0;:15:::1;::::0;:30:::1;::::0;11177:4:::1;::::0;11153:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35:::0;11138:50:::1;11134:111;;;11204:30;::::0;-1:-1:-1;;;11204:30:1;;8735:2:6;11204:30:1::1;::::0;::::1;8717:21:6::0;8774:2;8754:18;;;8747:30;-1:-1:-1;;;8793:18:6;;;8786:50;8853:18;;11204:30:1::1;8533:344:6::0;11134:111:1::1;11255:21;11279:8;11288:4;11279:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;11327;;;:8:::1;:14:::0;;;;;;11342:10:::1;11327:26:::0;;;;;;;11279:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;11363:17:1::1;11336:4:::0;11363:11:::1;:17::i;:::-;11391:30;11416:4;11391:24;:30::i;:::-;11435:11:::0;;11431:1086:::1;;11565:12:::0;;11558:75:::1;::::0;-1:-1:-1;;;11558:75:1;;11534:21:::1;::::0;-1:-1:-1;;;;;11565:12:1::1;::::0;11558:30:::1;::::0;:75:::1;::::0;11614:4:::1;::::0;11558:75:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11696:12:::0;;11534:99;;-1:-1:-1;11647:159:1::1;::::0;-1:-1:-1;;;;;11696:12:1::1;11726:10;11762:4;11785:7:::0;11647:31:::1;:159::i;:::-;11837:12:::0;;11830:45:::1;::::0;-1:-1:-1;;;11830:45:1;;:94:::1;::::0;11897:13;;-1:-1:-1;;;;;11837:12:1;;::::1;::::0;11830:30:::1;::::0;:45:::1;::::0;11869:4:::1;::::0;11830:45:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:94::-;11943:17;::::0;::::1;::::0;11820:104;;-1:-1:-1;11943:21:1;11939:568:::1;;11984:18;12005:41;12040:5;12005:30;12017:4;:17;;;12005:7;:11;;:30;;;;:::i;:41::-;12113:12:::0;;12147:10:::1;::::0;11984:62;;-1:-1:-1;12064:143:1::1;::::0;-1:-1:-1;;;;;12113:12:1;;::::1;::::0;12147:10:::1;11984:62:::0;12064:27:::1;:143::i;:::-;12239:11:::0;;:40:::1;::::0;12268:10;;12239:24:::1;::::0;12255:7;12239:15:::1;:24::i;:40::-;12225:54:::0;;12313:13:::1;::::0;::::1;::::0;:42:::1;::::0;12344:10;;12313:26:::1;::::0;12331:7;12313:17:::1;:26::i;:42::-;12297:13;::::0;::::1;:58:::0;-1:-1:-1;11939:568:1::1;;;12408:11:::0;;:24:::1;::::0;12424:7;12408:15:::1;:24::i;:::-;12394:38:::0;;12466:13:::1;::::0;::::1;::::0;:26:::1;::::0;12484:7;12466:17:::1;:26::i;:::-;12450:13;::::0;::::1;:42:::0;11939:568:::1;11448:1069;11431:1086;12560:21;::::0;::::1;::::0;12544:11;;:48:::1;::::0;12587:4:::1;::::0;12544:38:::1;::::0;:15:::1;:38::i;:48::-;12526:15;::::0;::::1;:66:::0;12607:34:::1;::::0;160:25:6;;;12627:4:1;;12615:10:::1;::::0;12607:34:::1;::::0;148:2:6;133:18;12607:34:1::1;14:177:6::0;5283:1411:1;251:5:2;;-1:-1:-1;;;;;251:5:2;237:10;:19;229:51;;;;-1:-1:-1;;;229:51:2;;;;;;;:::i;:::-;5513:19:1::1;;5496:13;:36;;5475:120;;;::::0;-1:-1:-1;;;5475:120:1;;9084:2:6;5475:120:1::1;::::0;::::1;9066:21:6::0;9123:2;9103:18;;;9096:30;9162:34;9142:18;;;9135:62;-1:-1:-1;;;9213:18:6;;;9206:35;9258:19;;5475:120:1::1;8882:401:6::0;5475:120:1::1;5646:24;;5626:16;:44;;5605:120;;;::::0;-1:-1:-1;;;5605:120:1;;9490:2:6;5605:120:1::1;::::0;::::1;9472:21:6::0;9529:2;9509:18;;;9502:30;9568:31;9548:18;;;9541:59;9617:18;;5605:120:1::1;9288:353:6::0;5605:120:1::1;5817:41;::::0;-1:-1:-1;;;5817:41:1;;-1:-1:-1;;;;;5817:26:1;::::1;::::0;::::1;::::0;:41:::1;::::0;5852:4:::1;::::0;5817:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5873:11;5869:59;;;5900:17;:15;:17::i;:::-;5937:23;5978:10;;5963:12;:25;:77;;6030:10;;5963:77;;;6003:12;5963:77;6068:15;::::0;5937:103;;-1:-1:-1;6068:32:1::1;::::0;6088:11;6068:19:::1;:32::i;:::-;6050:15;:50:::0;6137:312:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;6137:312:1;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;6137:312:1;;;;;;;;;;;;;;;;;;;;;;;;6110:8:::1;:349:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;6110:349:1::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6483:15;;:22:::1;::::0;:19:::1;:22::i;:::-;6520:167;::::0;;9905:25:6;;;-1:-1:-1;;;;;9966:32:6;;9961:2;9946:18;;9939:60;10015:18;;;10008:34;;;10073:2;10058:18;;10051:34;;;10116:3;10101:19;;10094:35;;;6469:36:1;;-1:-1:-1;6469:36:1;;6520:167:::1;::::0;9892:3:6;9877:19;6520:167:1::1;;;;;;;5465:1229;;5283:1411:::0;;;;;:::o;16823:263::-;16895:17;:15;:17::i;:::-;16954:13;;;16977:30;;;;17022:57;;;10314:25:6;;;10370:2;10355:18;;10348:34;;;17022:57:1;;10287:18:6;17022:57:1;10140:248:6;9522:1266:1;9576:21;9600:8;9609:4;9600:14;;;;;;;;:::i;:::-;;;;;;;;;;;9576:38;;9644:4;:20;;;9628:12;:36;9624:73;;9680:7;9522:1266;:::o;9624:73::-;9710:13;;;;:18;;:42;;-1:-1:-1;9732:15:1;;;;:20;9710:42;9706:128;;;9791:12;9768:20;;;;:35;-1:-1:-1;9522:1266:1:o;9706:128::-;9843:18;9864:49;9878:4;:20;;;9900:12;9864:13;:49::i;:::-;9843:70;;9923:19;9945:110;10039:15;;9945:76;10005:4;:15;;;9945:42;9973:13;;9945:10;:27;;:42;;;;:::i;:110::-;10069:10;;9923:132;;-1:-1:-1;;;;10069:10:1;;;;10065:549;;;10095:5;;10137:7;;-1:-1:-1;;;;;10095:5:1;;;;:10;;10114:4;;10121:51;;10160:11;;10121:34;;10150:4;;10121:24;;10160:11;;10121:15;:24::i;:51::-;10095:78;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;10236:10:1;;10280:7;;10200:112;;-1:-1:-1;;;;;10236:10:1;;10264:34;;10293:4;;10264:24;;:11;;:15;:24::i;:34::-;10200:18;:112::i;:::-;10065:549;;;10392:10;;10436:7;;10356:112;;-1:-1:-1;;;;;10392:10:1;;10420:34;;10449:4;;10420:24;;:11;;:15;:24::i;10356:112::-;10519:24;;10483:120;;-1:-1:-1;;;;;10519:24:1;10561:28;10584:4;10561:18;:11;10577:1;10561:15;:18::i;10483:120::-;10712:13;;;;10647:89;;10686:40;;:21;:11;10702:4;10686:15;:21::i;:40::-;10647:21;;;;;:25;:89::i;:::-;10623:21;;;:113;-1:-1:-1;;10769:12:1;10746:20;;;;:35;-1:-1:-1;9522:1266:1:o;13995:1269::-;14062:21;14086:8;14095:4;14086:14;;;;;;;;:::i;:::-;;;;;;;;;14134;;;:8;:14;;;;;;14149:10;14134:26;;;;;;;14175:21;;;;14086:14;;;;;;;;-1:-1:-1;14171:122:1;;14261:20;;;;14241:41;;:15;;:19;:41::i;:::-;14217:21;;;:65;14171:122;14303:15;14321:91;14387:4;:15;;;14321:48;14364:4;14321:38;14337:4;:21;;;14321:4;:11;;;:15;;:38;;;;:::i;:91::-;14303:109;;14426:28;14437:4;14443:10;14426;:28::i;:::-;14422:836;;;14484:1;14474:7;:11;:38;;;;14511:1;14489:4;:19;;;:23;14474:38;14470:546;;;14532:20;14555:32;14567:4;:19;;;14555:7;:11;;:32;;;;:::i;:::-;14532:55;;14661:83;14707:4;:19;;;14661:20;;:24;;:83;;;;:::i;:::-;14638:20;:106;14784:1;14762:19;;;:23;14868:20;;;;14827:79;;:15;;:19;:79::i;:::-;14803:21;;;:103;14957:44;14976:10;14988:12;14957:18;:44::i;:::-;14514:502;14470:546;14422:836;;;15036:11;;15032:226;;15085:19;;;;:32;;15109:7;15085:23;:32::i;:::-;15063:19;;;:54;15154:20;;:33;;15179:7;15154:24;:33::i;:::-;15131:20;:56;15206:41;;160:25:6;;;15233:4:1;;15221:10;;15206:41;;148:2:6;133:18;15206:41:1;;;;;;;15032:226;14052:1212;;;13995:1269;:::o;274:134:4:-;332:7;358:43;362:1;365;358:43;;;;;;;;;;;;;;;;;:3;:43::i;483:380:5:-;597:12;611:17;632:5;-1:-1:-1;;;;;632:10:5;679;691:2;695:5;656:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;656:45:5;;;;;;;;;;;632:79;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;596:115;;;;742:7;:57;;;;-1:-1:-1;754:11:5;;:16;;:44;;;785:4;774:24;;;;;;;;;;;;:::i;:::-;721:135;;;;-1:-1:-1;;;721:135:5;;11666:2:6;721:135:5;;;11648:21:6;11705:2;11685:18;;;11678:30;11744:33;11724:18;;;11717:61;11795:18;;721:135:5;11464:355:6;721:135:5;586:277;;483:380;;;:::o;636:240:4:-;694:7;717:6;713:45;;-1:-1:-1;746:1:4;739:8;;713:45;768:9;780:5;784:1;780;:5;:::i;:::-;768:17;-1:-1:-1;812:1:4;803:5;807:1;768:17;803:5;:::i;:::-;:10;795:56;;;;-1:-1:-1;;;795:56:4;;12421:2:6;795:56:4;;;12403:21:6;12460:2;12440:18;;;12433:30;12499:34;12479:18;;;12472:62;-1:-1:-1;;;12550:18:6;;;12543:31;12591:19;;795:56:4;12219:397:6;882:130:4;940:7;966:39;970:1;973;966:39;;;;;;;;;;;;;-1:-1:-1;;;966:39:4;;;:3;:39::i;93:175::-;151:7;;182:5;186:1;182;:5;:::i;:::-;170:17;;210:1;205;:6;;197:46;;;;-1:-1:-1;;;197:46:4;;12956:2:6;197:46:4;;;12938:21:6;12995:2;12975:18;;;12968:30;-1:-1:-1;;;13014:18:6;;;13007:57;13081:18;;197:46:4;12754:351:6;869:417:5;1068:51;;;-1:-1:-1;;;;;13368:15:6;;;1068:51:5;;;13350:34:6;13420:15;;;13400:18;;;13393:43;13452:18;;;;13445:34;;;1068:51:5;;;;;;;;;;13285:18:6;;;;1068:51:5;;;;;;;-1:-1:-1;;;;;1068:51:5;-1:-1:-1;;;1068:51:5;;;1044:85;;-1:-1:-1;;;;1044:10:5;;;;:85;;1068:51;1044:85;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1008:121;;;;1160:7;:57;;;;-1:-1:-1;1172:11:5;;:16;;:44;;;1203:4;1192:24;;;;;;;;;;;;:::i;:::-;1139:140;;;;-1:-1:-1;;;1139:140:5;;13692:2:6;1139:140:5;;;13674:21:6;13731:2;13711:18;;;13704:30;13770:34;13750:18;;;13743:62;-1:-1:-1;;;13821:18:6;;;13814:34;13865:19;;1139:140:5;13490:400:6;1139:140:5;998:288;;869:417;;;;:::o;15377:446:1:-;15473:5;;:30;;-1:-1:-1;;;15473:30:1;;15454:16;;-1:-1:-1;;;;;15473:5:1;;:15;;:30;;15497:4;;15473:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15454:49;;15529:8;15518:7;:19;15514:303;;15558:10;;-1:-1:-1;;;15558:10:1;;;;15557:11;:33;;;;-1:-1:-1;15572:13:1;;:18;;15557:33;15553:94;;;15610:22;15630:1;15610:19;:22::i;:::-;15696:5;;15660:58;;-1:-1:-1;;;;;15696:5:1;15704:3;15709:8;15660:27;:58::i;:::-;15444:379;15377:446;;:::o;15514:303::-;15785:5;;15749:57;;-1:-1:-1;;;;;15785:5:1;15793:3;15798:7;15749:27;:57::i;414:216:4:-;530:7;565:12;557:6;;;;549:29;;;;-1:-1:-1;;;549:29:4;;;;;;;;:::i;:::-;-1:-1:-1;588:9:4;600:5;604:1;600;:5;:::i;:::-;588:17;414:216;-1:-1:-1;;;;;414:216:4:o;1018:215::-;1134:7;1168:12;1161:5;1153:28;;;;-1:-1:-1;;;1153:28:4;;;;;;;;:::i;:::-;-1:-1:-1;1191:9:4;1203:5;1207:1;1203;:5;:::i;196:180:6:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:6;;196:180;-1:-1:-1;196:180:6:o;1019:173::-;1087:20;;-1:-1:-1;;;;;1136:31:6;;1126:42;;1116:70;;1182:1;1179;1172:12;1116:70;1019:173;;;:::o;1197:254::-;1265:6;1273;1326:2;1314:9;1305:7;1301:23;1297:32;1294:52;;;1342:1;1339;1332:12;1294:52;1378:9;1365:23;1355:33;;1407:38;1441:2;1430:9;1426:18;1407:38;:::i;:::-;1397:48;;1197:254;;;;;:::o;1648:203::-;-1:-1:-1;;;;;1812:32:6;;;;1794:51;;1782:2;1767:18;;1648:203::o;1856:248::-;1924:6;1932;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;-1:-1:-1;;2024:23:6;;;2094:2;2079:18;;;2066:32;;-1:-1:-1;1856:248:6:o;2109:118::-;2195:5;2188:13;2181:21;2174:5;2171:32;2161:60;;2217:1;2214;2207:12;2232:515;2324:6;2332;2340;2348;2356;2409:3;2397:9;2388:7;2384:23;2380:33;2377:53;;;2426:1;2423;2416:12;2377:53;2462:9;2449:23;2439:33;;2519:2;2508:9;2504:18;2491:32;2481:42;;2570:2;2559:9;2555:18;2542:32;2532:42;;2621:2;2610:9;2606:18;2593:32;2583:42;;2675:3;2664:9;2660:19;2647:33;2689:28;2711:5;2689:28;:::i;:::-;2736:5;2726:15;;;2232:515;;;;;;;;:::o;2752:186::-;2811:6;2864:2;2852:9;2843:7;2839:23;2835:32;2832:52;;;2880:1;2877;2870:12;2832:52;2903:29;2922:9;2903:29;:::i;3339:521::-;3431:6;3439;3447;3455;3463;3516:3;3504:9;3495:7;3491:23;3487:33;3484:53;;;3533:1;3530;3523:12;3484:53;3569:9;3556:23;3546:33;;3598:38;3632:2;3621:9;3617:18;3598:38;:::i;:::-;3588:48;;3683:2;3672:9;3668:18;3655:32;3645:42;;3734:2;3723:9;3719:18;3706:32;3696:42;;3788:3;3777:9;3773:19;3760:33;3802:28;3824:5;3802:28;:::i;4086:343::-;4288:2;4270:21;;;4327:2;4307:18;;;4300:30;-1:-1:-1;;;4361:2:6;4346:18;;4339:49;4420:2;4405:18;;4086:343::o;4434:355::-;4636:2;4618:21;;;4675:2;4655:18;;;4648:30;4714:33;4709:2;4694:18;;4687:61;4780:2;4765:18;;4434:355::o;4794:127::-;4855:10;4850:3;4846:20;4843:1;4836:31;4886:4;4883:1;4876:15;4910:4;4907:1;4900:15;6361:127;6422:10;6417:3;6413:20;6410:1;6403:31;6453:4;6450:1;6443:15;6477:4;6474:1;6467:15;6493:135;6532:3;-1:-1:-1;;6553:17:6;;6550:43;;;6573:18;;:::i;:::-;-1:-1:-1;6620:1:6;6609:13;;6493:135::o;7334:304::-;-1:-1:-1;;;;;7564:15:6;;;7546:34;;7616:15;;7611:2;7596:18;;7589:43;7496:2;7481:18;;7334:304::o;8344:184::-;8414:6;8467:2;8455:9;8446:7;8442:23;8438:32;8435:52;;;8483:1;8480;8473:12;8435:52;-1:-1:-1;8506:16:6;;8344:184;-1:-1:-1;8344:184:6:o;10393:274::-;-1:-1:-1;;;;;10585:32:6;;;;10567:51;;10649:2;10634:18;;10627:34;10555:2;10540:18;;10393:274::o;10672:245::-;10739:6;10792:2;10780:9;10771:7;10767:23;10763:32;10760:52;;;10808:1;10805;10798:12;10760:52;10840:9;10834:16;10859:28;10881:5;10859:28;:::i;10922:258::-;10994:1;11004:113;11018:6;11015:1;11012:13;11004:113;;;11094:11;;;11088:18;11075:11;;;11068:39;11040:2;11033:10;11004:113;;;11135:6;11132:1;11129:13;11126:48;;;-1:-1:-1;;11170:1:6;11152:16;;11145:27;10922:258::o;11185:274::-;11314:3;11352:6;11346:13;11368:53;11414:6;11409:3;11402:4;11394:6;11390:17;11368:53;:::i;:::-;11437:16;;;;;11185:274;-1:-1:-1;;11185:274:6:o;11824:168::-;11864:7;11930:1;11926;11922:6;11918:14;11915:1;11912:21;11907:1;11900:9;11893:17;11889:45;11886:71;;;11937:18;;:::i;:::-;-1:-1:-1;11977:9:6;;11824:168::o;11997:217::-;12037:1;12063;12053:132;;12107:10;12102:3;12098:20;12095:1;12088:31;12142:4;12139:1;12132:15;12170:4;12167:1;12160:15;12053:132;-1:-1:-1;12199:9:6;;11997:217::o;12621:128::-;12661:3;12692:1;12688:6;12685:1;12682:13;12679:39;;;12698:18;;:::i;:::-;-1:-1:-1;12734:9:6;;12621:128::o;13895:383::-;14044:2;14033:9;14026:21;14007:4;14076:6;14070:13;14119:6;14114:2;14103:9;14099:18;14092:34;14135:66;14194:6;14189:2;14178:9;14174:18;14169:2;14161:6;14157:15;14135:66;:::i;:::-;14262:2;14241:15;-1:-1:-1;;14237:29:6;14222:45;;;;14269:2;14218:54;;13895:383;-1:-1:-1;;13895:383:6:o;14283:125::-;14323:4;14351:1;14348;14345:8;14342:34;;;14356:18;;:::i;:::-;-1:-1:-1;14393:9:6;;14283:125::o

Swarm Source

ipfs://058ddc8b371bf9540b25895e82894c1b542251ebbb3e086e208ff6566204f758

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ 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.