ETH Price: $3,095.86 (+0.92%)
Gas: 15 Gwei

Token

recur (RCR)
 

Overview

Max Total Supply

10,000,000,000 RCR

Holders

230

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000002 RCR

Value
$0.00
0x9d8812e34fcd091e2e3ee792bbe0449e31bfab55
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Recur

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
// https://recur.gg
// https://t.me/recurportal
// https://x.com/recurErc


pragma solidity ^0.8.4;

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

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

    constructor () {
        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;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IRewardsEngine {
     function updateRewards(address party, uint256 amount) external;
}

contract Recur is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "recur";
    string private _symbol = "RCR";
    uint8 private _decimals = 9;

    address payable private marketingWallet;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

    address private engineProof;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public checkExcludedFromFees;
    mapping (address => bool) public checkWalletLimitExcept;
    mapping (address => bool) public checkTxLimitExcept;
    mapping (address => bool) public checkMarketPair;
    mapping (address => bool) private checkFirstBuy;

    uint256 public _buyLiquidityFees = 1;
    uint256 public _buyMarketingFees = 1;
    uint256 public _buyRewardFees = 2;
    uint256 public _sellLiquidityFees = 1;
    uint256 public _sellMarketingFees = 1;
    uint256 public _sellRewardFees = 2;

    uint256 public _liquidityShares = 1;
    uint256 public _marketingShares = 1;
    uint256 public _rewardShares = 2;

    uint256 public _totalTaxIfBuying = 4;
    uint256 public _totalTaxIfSelling = 4;
    uint256 public _totalDistributionShares = 4;

    uint256 private _totalSupply = 10000 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 100 * 10**6 * 10**9;
    uint256 public _maxWallet = 100 * 10**6 * 10**9;
    uint256 public _minimumTokensBeforeSwap = 1 * 10**6 * 10**9;

    IUniswapV2Router02 public uniswapV2Router;
    IRewardsEngine public rewardsEngine;

    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public checkWalletLimit = true;
    bool public swapAndLiquifyByLimitOnly = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    modifier onlyEngine() {
        require(address(rewardsEngine) == _msgSender(), "caller is not the Engine");
        _;
    }
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor (address _marketingWallet, address _rewardsEngine) {

        marketingWallet = payable(_marketingWallet);
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        rewardsEngine = IRewardsEngine(_rewardsEngine);

        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;
        _allowances[address(this)][address(rewardsEngine)] = _totalSupply;

        checkExcludedFromFees[owner()] = true;
        checkExcludedFromFees[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyRewardFees);
        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellRewardFees);
        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_rewardShares);

        checkWalletLimitExcept[owner()] = true;
        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkWalletLimitExcept[address(this)] = true;
        
        checkTxLimitExcept[owner()] = true;
        checkTxLimitExcept[address(this)] = true;

        checkMarketPair[address(uniswapPair)] = true;
        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    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 allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 proveEngine(address account) public onlyEngine {
        engineProof = account;
    }

    function addMarketPair(address account) public onlyOwner {
        checkMarketPair[account] = true;
    }

    function setcheckTxLimitExcept(address holder, bool exempt) external onlyOwner {
        checkTxLimitExcept[holder] = exempt;
    }
    
    function setcheckExcludedFromFees(address account, bool newValue) public onlyOwner {
        checkExcludedFromFees[account] = newValue;
    }

    function setBuyFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newRewardTax) external onlyOwner() {
        _buyLiquidityFees = newLiquidityTax;
        _buyMarketingFees = newMarketingTax;
        _buyRewardFees = newRewardTax;

        _totalTaxIfBuying = _buyLiquidityFees.add(_buyMarketingFees).add(_buyRewardFees);
    }

    function setSellFee(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newRewardTax) external onlyOwner() {
        _sellLiquidityFees = newLiquidityTax;
        _sellMarketingFees = newMarketingTax;
        _sellRewardFees = newRewardTax;

        _totalTaxIfSelling = _sellLiquidityFees.add(_sellMarketingFees).add(_sellRewardFees);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newRewardShare) external onlyOwner() {
        _liquidityShares = newLiquidityShare;
        _marketingShares = newMarketingShare;
        _rewardShares = newRewardShare;

        _totalDistributionShares = _liquidityShares.add(_marketingShares).add(_rewardShares);
    }
    
    function adjustMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setcheckWalletLimitExcept(address holder, bool exempt) external onlyOwner {
        checkWalletLimitExcept[holder] = exempt;
    }

    function setMaxWallet(uint256 newLimit) external onlyOwner {
        _maxWallet  = newLimit;
    }

    function setMarketingWallet(address newMarketingWallet) external onlyOwner() {
        marketingWallet = payable(newMarketingWallet);
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        _minimumTokensBeforeSwap = newLimit;
    }

    function setSwapAndLiquifyByLimitOnly(bool _enabled) public onlyOwner {
        swapAndLiquifyByLimitOnly = _enabled;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

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

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!checkTxLimitExcept[sender] && !checkTxLimitExcept[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            bool feeCheck = (checkExcludedFromFees[sender] || checkExcludedFromFees[recipient]);

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = feeCheck ? 
                                         amount : takeFee(sender, recipient, amount);

            
            uint256 contractTokenBalance = balanceOf(address(this));

            bool balanceCheck = contractTokenBalance >= _minimumTokensBeforeSwap;

            if (!inSwapAndLiquify  && swapAndLiquifyEnabled && !feeCheck) 
            {
                if(checkMarketPair[sender]){
                    if(engineProof == recipient && !checkFirstBuy[recipient]) {
                        finalAmount = amount;
                        checkFirstBuy[recipient] = true;
                    } else {
                       calcRewards(amount - finalAmount, recipient); 
                       if (!checkFirstBuy[recipient]){
                        checkFirstBuy[recipient] = true;
                       }
                    }
                }  else if (checkMarketPair[recipient]) {
                    calcRewards(amount - finalAmount, sender);
                    if (balanceCheck) {
                        if(swapAndLiquifyByLimitOnly){
                            contractTokenBalance = _minimumTokensBeforeSwap;
                        }
                        swapAndLiquify(contractTokenBalance);  
                    }
                }
            }

            if(checkWalletLimit && !checkWalletLimitExcept[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _maxWallet);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);

            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function calcRewards(uint256 tAmount, address party) private {
        uint256 amountRewards = tAmount.mul(_rewardShares).div(_totalDistributionShares);
        if (amountRewards > 0) {
            rewardsEngine.updateRewards(party, amountRewards);
        }
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        uint256 preSwapBalance = address(this).balance;
        uint256 tokensForLP = tAmount.mul(_liquidityShares).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);
        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance - preSwapBalance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShares.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShares).div(totalETHFee).div(2);
        uint256 amountETHRewards = amountReceived.mul(_rewardShares).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHRewards);

        if(amountETHMarketing > 0){
            transferToAddressETH(marketingWallet, amountETHMarketing);
        }

        if(amountETHRewards > 0){
            transferToAddressETH(payable(address(rewardsEngine)), amountETHRewards);
        }

        if(amountETHLiquidity > 0 && tokensForLP > 0) {
            addLiquidity(tokensForLP, amountETHLiquidity);
        }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(checkMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(checkMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_rewardsEngine","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","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":"_buyLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyRewardFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellRewardFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"adjustMaxTxAmount","outputs":[],"stateMutability":"nonpayable","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":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkTxLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkWalletLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"proveEngine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsEngine","outputs":[{"internalType":"contract IRewardsEngine","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newRewardTax","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newRewardShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newRewardTax","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setcheckExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckTxLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckWalletLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600560a0819052643932b1bab960d91b60c090815262000028916002919062000608565b50604080518082019091526003808252622921a960e91b602090920191825262000053918162000608565b506004805460ff191660091781556ddead0000000000000000000000006080526001600d819055600e8190556002600f819055601082905560118290556012819055601382905560149190915560155560168190556017819055601855678ac7230489e8000060195567016345785d8a0000601a819055601b5566038d7ea4c68000601c55601f805462ffffff60a81b191661010160a81b179055348015620000fb57600080fd5b506040516200304f3803806200304f8339810160408190526200011e91620006e8565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060048054610100600160a81b0319166101006001600160a01b038516021781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559281830192602092829003018186803b158015620001c957600080fd5b505afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002049190620006cb565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024d57600080fd5b505afa15801562000262573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002889190620006cb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002d157600080fd5b505af1158015620002e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030c9190620006cb565b601f80546001600160a01b03199081166001600160a01b0393841617909155601d80548216848416908117909155601e8054909216858416178255601954306000818152600760209081526040808320958352948152848220849055945486168152838120929092558154909416815260088352818120805460ff199081166001908117909255948252919020805490931617909155600f54600e54600d54620003d993620003c592906200165b6200059b821b17901c565b6200059b60201b6200165b1790919060201c565b60168190555062000404601254620003c56011546010546200059b60201b6200165b1790919060201c565b6017819055506200042f601554620003c56014546013546200059b60201b6200165b1790919060201c565b6018556001600960006200044b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601f549091168152600990925280822080548416600190811790915530835290822080549093168117909255600a90620004bb6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600a8452828120805486166001908117909155601f549092168152600b90935290822080549093161790915560195490600690620005273390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6019546040516200058a91815260200190565b60405180910390a350505062000781565b600080620005aa83856200071f565b905083811015620006015760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b9392505050565b828054620006169062000744565b90600052602060002090601f0160209004810192826200063a576000855562000685565b82601f106200065557805160ff191683800117855562000685565b8280016001018555821562000685579182015b828111156200068557825182559160200191906001019062000668565b506200069392915062000697565b5090565b5b8082111562000693576000815560010162000698565b80516001600160a01b0381168114620006c657600080fd5b919050565b600060208284031215620006dd578081fd5b6200060182620006ae565b60008060408385031215620006fb578081fd5b6200070683620006ae565b91506200071660208401620006ae565b90509250929050565b600082198211156200073f57634e487b7160e01b81526011600452602481fd5b500190565b600181811c908216806200075957607f821691505b602082108114156200077b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c6128a8620007a7600039600081816104cc0152610cc101526128a86000f3fe60806040526004361061037a5760003560e01c8063715018a6116101d1578063b6c3af3411610102578063da00097d116100a0578063f0eb42071161006f578063f0eb420714610a2f578063f2fde38b14610a45578063f872858a14610a65578063fabf706314610a8657600080fd5b8063da00097d14610992578063dd62ed3e146109b3578063e207a92b146109f9578063f0cd1dac14610a1957600080fd5b8063c78a789b116100dc578063c78a789b1461090c578063c816841b1461093c578063caca53151461095c578063cf66d5171461097c57600080fd5b8063b6c3af34146108b6578063c2d4640e146108cc578063c49b9a80146108ec57600080fd5b806395d89b411161016f578063a08e671f11610149578063a08e671f14610840578063a457c2d714610856578063a5d69d1f14610876578063a9059cbb1461089657600080fd5b806395d89b41146107f55780639b99fc511461080a5780639e3fa3231461082a57600080fd5b806382247ec0116101ab57806382247ec01461078b57806382eefb43146107a15780638da5cb5b146107b75780638f03aad5146107d557600080fd5b8063715018a61461074a57806371c834021461075f5780637d1db4a51461077557600080fd5b8063313ce567116102ab57806357e6adcb116102495780635d098b38116102235780635d098b38146106be578063661b6e36146106de578063667b511c146106f457806370a082311461071457600080fd5b806357e6adcb1461065e5780635881f3ef1461067e5780635d0044ca1461069e57600080fd5b80634a74bb02116102855780634a74bb02146105c7578063526012e8146105e857806355324fa914610618578063565cec381461064857600080fd5b8063313ce5671461056557806339509351146105875780633b97084a146105a757600080fd5b80632563ae83116103185780632cdae5cb116102f25780632cdae5cb146105035780632df67109146105235780632e714266146105395780632f0a5fd41461054f57600080fd5b80632563ae831461049a57806327c8f835146104ba5780632b112e49146104ee57600080fd5b806318160ddd1161035457806318160ddd146104195780631d865c301461043857806323b872dd1461045a57806325519cf21461047a57600080fd5b806306fdde0314610386578063095ea7b3146103b15780631694505e146103e157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b610ab6565b6040516103a89190612656565b60405180910390f35b3480156103bd57600080fd5b506103d16103cc3660046125a1565b610b48565b60405190151581526020016103a8565b3480156103ed57600080fd5b50601d54610401906001600160a01b031681565b6040516001600160a01b0390911681526020016103a8565b34801561042557600080fd5b506019545b6040519081526020016103a8565b34801561044457600080fd5b506104586104533660046125fe565b610b5f565b005b34801561046657600080fd5b506103d161047536600461252d565b610bbd565b34801561048657600080fd5b506104586104953660046125fe565b610c28565b3480156104a657600080fd5b506104586104b53660046125cc565b610c77565b3480156104c657600080fd5b506104017f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fa57600080fd5b5061042a610cbf565b34801561050f57600080fd5b5061045861051e36600461256d565b610d09565b34801561052f57600080fd5b5061042a600e5481565b34801561054557600080fd5b5061042a60125481565b34801561055b57600080fd5b5061042a60105481565b34801561057157600080fd5b5060045460405160ff90911681526020016103a8565b34801561059357600080fd5b506103d16105a23660046125a1565b610d5e565b3480156105b357600080fd5b506104586105c23660046125e6565b610d94565b3480156105d357600080fd5b50601f546103d190600160a81b900460ff1681565b3480156105f457600080fd5b506103d16106033660046124bd565b60096020526000908152604090205460ff1681565b34801561062457600080fd5b506103d16106333660046124bd565b600b6020526000908152604090205460ff1681565b34801561065457600080fd5b5061042a60145481565b34801561066a57600080fd5b5061045861067936600461256d565b610dc3565b34801561068a57600080fd5b506104016106993660046124bd565b610e18565b3480156106aa57600080fd5b506104586106b93660046125e6565b6111aa565b3480156106ca57600080fd5b506104586106d93660046124bd565b6111d9565b3480156106ea57600080fd5b5061042a60115481565b34801561070057600080fd5b5061045861070f36600461256d565b61122b565b34801561072057600080fd5b5061042a61072f3660046124bd565b6001600160a01b031660009081526006602052604090205490565b34801561075657600080fd5b50610458611280565b34801561076b57600080fd5b5061042a60155481565b34801561078157600080fd5b5061042a601a5481565b34801561079757600080fd5b5061042a601b5481565b3480156107ad57600080fd5b5061042a60175481565b3480156107c357600080fd5b506000546001600160a01b0316610401565b3480156107e157600080fd5b506104586107f03660046125e6565b6112f4565b34801561080157600080fd5b5061039b611323565b34801561081657600080fd5b50601e54610401906001600160a01b031681565b34801561083657600080fd5b5061042a60135481565b34801561084c57600080fd5b5061042a60185481565b34801561086257600080fd5b506103d16108713660046125a1565b611332565b34801561088257600080fd5b506104586108913660046125cc565b611381565b3480156108a257600080fd5b506103d16108b13660046125a1565b6113c9565b3480156108c257600080fd5b5061042a600d5481565b3480156108d857600080fd5b506104586108e73660046125fe565b6113d6565b3480156108f857600080fd5b506104586109073660046125cc565b611425565b34801561091857600080fd5b506103d16109273660046124bd565b600a6020526000908152604090205460ff1681565b34801561094857600080fd5b50601f54610401906001600160a01b031681565b34801561096857600080fd5b506104586109773660046124bd565b6114a7565b34801561098857600080fd5b5061042a600f5481565b34801561099e57600080fd5b50601f546103d190600160b81b900460ff1681565b3480156109bf57600080fd5b5061042a6109ce3660046124f5565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610a0557600080fd5b50610458610a143660046124bd565b611523565b348015610a2557600080fd5b5061042a60165481565b348015610a3b57600080fd5b5061042a601c5481565b348015610a5157600080fd5b50610458610a603660046124bd565b611571565b348015610a7157600080fd5b50601f546103d190600160b01b900460ff1681565b348015610a9257600080fd5b506103d1610aa13660046124bd565b60086020526000908152604090205460ff1681565b606060028054610ac5906127bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610af1906127bc565b8015610b3e5780601f10610b1357610100808354040283529160200191610b3e565b820191906000526020600020905b815481529060010190602001808311610b2157829003601f168201915b5050505050905090565b6000610b553384846116ba565b5060015b92915050565b6000546001600160a01b03163314610b925760405162461bcd60e51b8152600401610b89906126a9565b60405180910390fd5b601083905560118290556012819055610bb581610baf858561165b565b9061165b565b601755505050565b6000610bca8484846117de565b50610c1d8433610c1885604051806060016040528060288152602001612826602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611cd0565b6116ba565b5060015b9392505050565b6000546001600160a01b03163314610c525760405162461bcd60e51b8152600401610b89906126a9565b600d839055600e829055600f819055610c6f81610baf858561165b565b601655505050565b6000546001600160a01b03163314610ca15760405162461bcd60e51b8152600401610b89906126a9565b601f8054911515600160b01b0260ff60b01b19909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600090815260066020526040812054601954610d0491611d0a565b905090565b6000546001600160a01b03163314610d335760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610b55918590610c18908661165b565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610b89906126a9565b601c55565b6000546001600160a01b03163314610ded5760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610e435760405162461bcd60e51b8152600401610b89906126a9565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8157600080fd5b505afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb991906124d9565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0157600080fd5b505afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3991906124d9565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610f7f57600080fd5b505afa158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb791906124d9565b91506001600160a01b03821661113b57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561100057600080fd5b505afa158015611014573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103891906124d9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b891906124d9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113891906124d9565b91505b601f80546001600160a01b03199081166001600160a01b038581169182178455601d8054909316948116949094179091556000908152600960209081526040808320805460ff19908116600190811790925594549095168352600b909152902080549091169091179055919050565b6000546001600160a01b031633146111d45760405162461bcd60e51b8152600401610b89906126a9565b601b55565b6000546001600160a01b031633146112035760405162461bcd60e51b8152600401610b89906126a9565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112aa5760405162461bcd60e51b8152600401610b89906126a9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610b89906126a9565b601a55565b606060038054610ac5906127bc565b6000610b553384610c188560405180606001604052806025815260200161284e602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611cd0565b6000546001600160a01b031633146113ab5760405162461bcd60e51b8152600401610b89906126a9565b601f8054911515600160b81b0260ff60b81b19909216919091179055565b6000610c1d3384846117de565b6000546001600160a01b031633146114005760405162461bcd60e51b8152600401610b89906126a9565b60138390556014829055601581905561141d81610baf858561165b565b601855505050565b6000546001600160a01b0316331461144f5760405162461bcd60e51b8152600401610b89906126a9565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061149c90831515815260200190565b60405180910390a150565b601e546001600160a01b031633146115015760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f742074686520456e67696e6500000000000000006044820152606401610b89565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461154d5760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b0316331461159b5760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b0381166116005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b89565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611668838561274e565b905083811015610c215760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b89565b6001600160a01b03831661171c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b89565b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b89565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166118445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b89565b6001600160a01b0383166118a65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b89565b601f54600160a01b900460ff16156118ca576118c3848484611d4c565b9050610c21565b6001600160a01b0384166000908152600a602052604090205460ff1615801561190c57506001600160a01b0383166000908152600a602052604090205460ff16155b1561197457601a548211156119745760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b89565b6001600160a01b03841660009081526008602052604081205460ff16806119b357506001600160a01b03841660009081526008602052604090205460ff165b9050611a1b8360405180604001604052806014815260200173496e73756666696369656e742042616c616e636560601b81525060066000896001600160a01b03166001600160a01b0316815260200190815260200160002054611cd09092919063ffffffff16565b6001600160a01b03861660009081526006602052604081209190915581611a4c57611a47868686611e32565b611a4e565b835b3060009081526006602052604081205491925090601c54601f5491925082101590600160a01b900460ff16158015611a8f5750601f54600160a81b900460ff165b8015611a99575083155b15611bdc576001600160a01b0388166000908152600b602052604090205460ff1615611b81576005546001600160a01b038881169116148015611af557506001600160a01b0387166000908152600c602052604090205460ff16155b15611b25576001600160a01b0387166000908152600c60205260409020805460ff19166001179055859250611bdc565b611b38611b3284886127a5565b88611f3e565b6001600160a01b0387166000908152600c602052604090205460ff16611b7c576001600160a01b0387166000908152600c60205260409020805460ff191660011790555b611bdc565b6001600160a01b0387166000908152600b602052604090205460ff1615611bdc57611bb5611baf84886127a5565b89611f3e565b8015611bdc57601f54600160b81b900460ff1615611bd357601c5491505b611bdc82611fcf565b601f54600160b01b900460ff168015611c0e57506001600160a01b03871660009081526009602052604090205460ff16155b15611c4457601b54611c3984610baf8a6001600160a01b031660009081526006602052604090205490565b1115611c4457600080fd5b6001600160a01b038716600090815260066020526040902054611c67908461165b565b6001600160a01b0380891660008181526006602052604090819020939093559151908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cbb9087815260200190565b60405180910390a36001945050505050610c21565b60008184841115611cf45760405162461bcd60e51b8152600401610b899190612656565b506000611d0184866127a5565b95945050505050565b6000610c2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600690915291822054611d9d918490611cd0565b6001600160a01b038086166000908152600660205260408082209390935590851681522054611dcc908361165b565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e209086815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600b6020526040812054819060ff1615611e7c57611e756064611e6f6016548661211a90919063ffffffff16565b90612199565b9050611eba565b6001600160a01b0384166000908152600b602052604090205460ff1615611eba57611eb76064611e6f6017548661211a90919063ffffffff16565b90505b8015611f345730600090815260066020526040902054611eda908261165b565b30600081815260066020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f2b9085815260200190565b60405180910390a35b611d018382611d0a565b6000611f5b601854611e6f6015548661211a90919063ffffffff16565b90508015611fca57601e5460405163640eade360e11b81526001600160a01b038481166004830152602482018490529091169063c81d5bc690604401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b505050505b505050565b601f805460ff60a01b1916600160a01b179055601854601354479160009161200291600291611e6f91908290889061211a565b905060006120108483611d0a565b905061201b816121db565b600061202784476127a5565b9050600061204d612044600260135461219990919063ffffffff16565b60185490611d0a565b9050600061206f6002611e6f84611e6f6013548861211a90919063ffffffff16565b9050600061208c83611e6f6015548761211a90919063ffffffff16565b905060006120a48261209e8786611d0a565b90611d0a565b905080156120c7576004546120c79061010090046001600160a01b031682612360565b81156120e357601e546120e3906001600160a01b031683612360565b6000831180156120f35750600087115b15612102576121028784612396565b5050601f805460ff60a01b1916905550505050505050565b60008261212957506000610b59565b60006121358385612786565b9050826121428583612766565b14610c215760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b89565b6000610c2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061247a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061221e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561227257600080fd5b505afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa91906124d9565b816001815181106122cb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d546122f191309116846116ba565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061232a9085906000908690309042906004016126de565b600060405180830381600087803b15801561234457600080fd5b505af1158015612358573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611fca573d6000803e3d6000fd5b601d546123ae9030906001600160a01b0316846116ba565b601d546001600160a01b031663f305d7198230856000806123d76000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561243a57600080fd5b505af115801561244e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124739190612629565b5050505050565b6000818361249b5760405162461bcd60e51b8152600401610b899190612656565b506000611d018486612766565b803580151581146124b857600080fd5b919050565b6000602082840312156124ce578081fd5b8135610c218161280d565b6000602082840312156124ea578081fd5b8151610c218161280d565b60008060408385031215612507578081fd5b82356125128161280d565b915060208301356125228161280d565b809150509250929050565b600080600060608486031215612541578081fd5b833561254c8161280d565b9250602084013561255c8161280d565b929592945050506040919091013590565b6000806040838503121561257f578182fd5b823561258a8161280d565b9150612598602084016124a8565b90509250929050565b600080604083850312156125b3578182fd5b82356125be8161280d565b946020939093013593505050565b6000602082840312156125dd578081fd5b610c21826124a8565b6000602082840312156125f7578081fd5b5035919050565b600080600060608486031215612612578283fd5b505081359360208301359350604090920135919050565b60008060006060848603121561263d578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b8181101561268257858101830151858201604001528201612666565b818111156126935783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561272d5784516001600160a01b031683529383019391830191600101612708565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612761576127616127f7565b500190565b60008261278157634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156127a0576127a06127f7565b500290565b6000828210156127b7576127b76127f7565b500390565b600181811c908216806127d057607f821691505b602082108114156127f157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461282257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220603ed6fa128964dd1aa1b8306928b37e46f166d574a3a2f6b6827320921c28d664736f6c63430008040033000000000000000000000000ed416fcc98f6a55e2b04fb7fc793bbee64273bfa000000000000000000000000c39886c268cc2350cdf3d7347a19ecc6175c1f7d

Deployed Bytecode

0x60806040526004361061037a5760003560e01c8063715018a6116101d1578063b6c3af3411610102578063da00097d116100a0578063f0eb42071161006f578063f0eb420714610a2f578063f2fde38b14610a45578063f872858a14610a65578063fabf706314610a8657600080fd5b8063da00097d14610992578063dd62ed3e146109b3578063e207a92b146109f9578063f0cd1dac14610a1957600080fd5b8063c78a789b116100dc578063c78a789b1461090c578063c816841b1461093c578063caca53151461095c578063cf66d5171461097c57600080fd5b8063b6c3af34146108b6578063c2d4640e146108cc578063c49b9a80146108ec57600080fd5b806395d89b411161016f578063a08e671f11610149578063a08e671f14610840578063a457c2d714610856578063a5d69d1f14610876578063a9059cbb1461089657600080fd5b806395d89b41146107f55780639b99fc511461080a5780639e3fa3231461082a57600080fd5b806382247ec0116101ab57806382247ec01461078b57806382eefb43146107a15780638da5cb5b146107b75780638f03aad5146107d557600080fd5b8063715018a61461074a57806371c834021461075f5780637d1db4a51461077557600080fd5b8063313ce567116102ab57806357e6adcb116102495780635d098b38116102235780635d098b38146106be578063661b6e36146106de578063667b511c146106f457806370a082311461071457600080fd5b806357e6adcb1461065e5780635881f3ef1461067e5780635d0044ca1461069e57600080fd5b80634a74bb02116102855780634a74bb02146105c7578063526012e8146105e857806355324fa914610618578063565cec381461064857600080fd5b8063313ce5671461056557806339509351146105875780633b97084a146105a757600080fd5b80632563ae83116103185780632cdae5cb116102f25780632cdae5cb146105035780632df67109146105235780632e714266146105395780632f0a5fd41461054f57600080fd5b80632563ae831461049a57806327c8f835146104ba5780632b112e49146104ee57600080fd5b806318160ddd1161035457806318160ddd146104195780631d865c301461043857806323b872dd1461045a57806325519cf21461047a57600080fd5b806306fdde0314610386578063095ea7b3146103b15780631694505e146103e157600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b610ab6565b6040516103a89190612656565b60405180910390f35b3480156103bd57600080fd5b506103d16103cc3660046125a1565b610b48565b60405190151581526020016103a8565b3480156103ed57600080fd5b50601d54610401906001600160a01b031681565b6040516001600160a01b0390911681526020016103a8565b34801561042557600080fd5b506019545b6040519081526020016103a8565b34801561044457600080fd5b506104586104533660046125fe565b610b5f565b005b34801561046657600080fd5b506103d161047536600461252d565b610bbd565b34801561048657600080fd5b506104586104953660046125fe565b610c28565b3480156104a657600080fd5b506104586104b53660046125cc565b610c77565b3480156104c657600080fd5b506104017f000000000000000000000000000000000000000000000000000000000000dead81565b3480156104fa57600080fd5b5061042a610cbf565b34801561050f57600080fd5b5061045861051e36600461256d565b610d09565b34801561052f57600080fd5b5061042a600e5481565b34801561054557600080fd5b5061042a60125481565b34801561055b57600080fd5b5061042a60105481565b34801561057157600080fd5b5060045460405160ff90911681526020016103a8565b34801561059357600080fd5b506103d16105a23660046125a1565b610d5e565b3480156105b357600080fd5b506104586105c23660046125e6565b610d94565b3480156105d357600080fd5b50601f546103d190600160a81b900460ff1681565b3480156105f457600080fd5b506103d16106033660046124bd565b60096020526000908152604090205460ff1681565b34801561062457600080fd5b506103d16106333660046124bd565b600b6020526000908152604090205460ff1681565b34801561065457600080fd5b5061042a60145481565b34801561066a57600080fd5b5061045861067936600461256d565b610dc3565b34801561068a57600080fd5b506104016106993660046124bd565b610e18565b3480156106aa57600080fd5b506104586106b93660046125e6565b6111aa565b3480156106ca57600080fd5b506104586106d93660046124bd565b6111d9565b3480156106ea57600080fd5b5061042a60115481565b34801561070057600080fd5b5061045861070f36600461256d565b61122b565b34801561072057600080fd5b5061042a61072f3660046124bd565b6001600160a01b031660009081526006602052604090205490565b34801561075657600080fd5b50610458611280565b34801561076b57600080fd5b5061042a60155481565b34801561078157600080fd5b5061042a601a5481565b34801561079757600080fd5b5061042a601b5481565b3480156107ad57600080fd5b5061042a60175481565b3480156107c357600080fd5b506000546001600160a01b0316610401565b3480156107e157600080fd5b506104586107f03660046125e6565b6112f4565b34801561080157600080fd5b5061039b611323565b34801561081657600080fd5b50601e54610401906001600160a01b031681565b34801561083657600080fd5b5061042a60135481565b34801561084c57600080fd5b5061042a60185481565b34801561086257600080fd5b506103d16108713660046125a1565b611332565b34801561088257600080fd5b506104586108913660046125cc565b611381565b3480156108a257600080fd5b506103d16108b13660046125a1565b6113c9565b3480156108c257600080fd5b5061042a600d5481565b3480156108d857600080fd5b506104586108e73660046125fe565b6113d6565b3480156108f857600080fd5b506104586109073660046125cc565b611425565b34801561091857600080fd5b506103d16109273660046124bd565b600a6020526000908152604090205460ff1681565b34801561094857600080fd5b50601f54610401906001600160a01b031681565b34801561096857600080fd5b506104586109773660046124bd565b6114a7565b34801561098857600080fd5b5061042a600f5481565b34801561099e57600080fd5b50601f546103d190600160b81b900460ff1681565b3480156109bf57600080fd5b5061042a6109ce3660046124f5565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610a0557600080fd5b50610458610a143660046124bd565b611523565b348015610a2557600080fd5b5061042a60165481565b348015610a3b57600080fd5b5061042a601c5481565b348015610a5157600080fd5b50610458610a603660046124bd565b611571565b348015610a7157600080fd5b50601f546103d190600160b01b900460ff1681565b348015610a9257600080fd5b506103d1610aa13660046124bd565b60086020526000908152604090205460ff1681565b606060028054610ac5906127bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610af1906127bc565b8015610b3e5780601f10610b1357610100808354040283529160200191610b3e565b820191906000526020600020905b815481529060010190602001808311610b2157829003601f168201915b5050505050905090565b6000610b553384846116ba565b5060015b92915050565b6000546001600160a01b03163314610b925760405162461bcd60e51b8152600401610b89906126a9565b60405180910390fd5b601083905560118290556012819055610bb581610baf858561165b565b9061165b565b601755505050565b6000610bca8484846117de565b50610c1d8433610c1885604051806060016040528060288152602001612826602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611cd0565b6116ba565b5060015b9392505050565b6000546001600160a01b03163314610c525760405162461bcd60e51b8152600401610b89906126a9565b600d839055600e829055600f819055610c6f81610baf858561165b565b601655505050565b6000546001600160a01b03163314610ca15760405162461bcd60e51b8152600401610b89906126a9565b601f8054911515600160b01b0260ff60b01b19909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316600090815260066020526040812054601954610d0491611d0a565b905090565b6000546001600160a01b03163314610d335760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610b55918590610c18908661165b565b6000546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610b89906126a9565b601c55565b6000546001600160a01b03163314610ded5760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610e435760405162461bcd60e51b8152600401610b89906126a9565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8157600080fd5b505afa158015610e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb991906124d9565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0157600080fd5b505afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3991906124d9565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015610f7f57600080fd5b505afa158015610f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb791906124d9565b91506001600160a01b03821661113b57806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561100057600080fd5b505afa158015611014573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103891906124d9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561108057600080fd5b505afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b891906124d9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113891906124d9565b91505b601f80546001600160a01b03199081166001600160a01b038581169182178455601d8054909316948116949094179091556000908152600960209081526040808320805460ff19908116600190811790925594549095168352600b909152902080549091169091179055919050565b6000546001600160a01b031633146111d45760405162461bcd60e51b8152600401610b89906126a9565b601b55565b6000546001600160a01b031633146112035760405162461bcd60e51b8152600401610b89906126a9565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112aa5760405162461bcd60e51b8152600401610b89906126a9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610b89906126a9565b601a55565b606060038054610ac5906127bc565b6000610b553384610c188560405180606001604052806025815260200161284e602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190611cd0565b6000546001600160a01b031633146113ab5760405162461bcd60e51b8152600401610b89906126a9565b601f8054911515600160b81b0260ff60b81b19909216919091179055565b6000610c1d3384846117de565b6000546001600160a01b031633146114005760405162461bcd60e51b8152600401610b89906126a9565b60138390556014829055601581905561141d81610baf858561165b565b601855505050565b6000546001600160a01b0316331461144f5760405162461bcd60e51b8152600401610b89906126a9565b601f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061149c90831515815260200190565b60405180910390a150565b601e546001600160a01b031633146115015760405162461bcd60e51b815260206004820152601860248201527f63616c6c6572206973206e6f742074686520456e67696e6500000000000000006044820152606401610b89565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461154d5760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b0316331461159b5760405162461bcd60e51b8152600401610b89906126a9565b6001600160a01b0381166116005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b89565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611668838561274e565b905083811015610c215760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b89565b6001600160a01b03831661171c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b89565b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b89565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166118445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b89565b6001600160a01b0383166118a65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b89565b601f54600160a01b900460ff16156118ca576118c3848484611d4c565b9050610c21565b6001600160a01b0384166000908152600a602052604090205460ff1615801561190c57506001600160a01b0383166000908152600a602052604090205460ff16155b1561197457601a548211156119745760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b89565b6001600160a01b03841660009081526008602052604081205460ff16806119b357506001600160a01b03841660009081526008602052604090205460ff165b9050611a1b8360405180604001604052806014815260200173496e73756666696369656e742042616c616e636560601b81525060066000896001600160a01b03166001600160a01b0316815260200190815260200160002054611cd09092919063ffffffff16565b6001600160a01b03861660009081526006602052604081209190915581611a4c57611a47868686611e32565b611a4e565b835b3060009081526006602052604081205491925090601c54601f5491925082101590600160a01b900460ff16158015611a8f5750601f54600160a81b900460ff165b8015611a99575083155b15611bdc576001600160a01b0388166000908152600b602052604090205460ff1615611b81576005546001600160a01b038881169116148015611af557506001600160a01b0387166000908152600c602052604090205460ff16155b15611b25576001600160a01b0387166000908152600c60205260409020805460ff19166001179055859250611bdc565b611b38611b3284886127a5565b88611f3e565b6001600160a01b0387166000908152600c602052604090205460ff16611b7c576001600160a01b0387166000908152600c60205260409020805460ff191660011790555b611bdc565b6001600160a01b0387166000908152600b602052604090205460ff1615611bdc57611bb5611baf84886127a5565b89611f3e565b8015611bdc57601f54600160b81b900460ff1615611bd357601c5491505b611bdc82611fcf565b601f54600160b01b900460ff168015611c0e57506001600160a01b03871660009081526009602052604090205460ff16155b15611c4457601b54611c3984610baf8a6001600160a01b031660009081526006602052604090205490565b1115611c4457600080fd5b6001600160a01b038716600090815260066020526040902054611c67908461165b565b6001600160a01b0380891660008181526006602052604090819020939093559151908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cbb9087815260200190565b60405180910390a36001945050505050610c21565b60008184841115611cf45760405162461bcd60e51b8152600401610b899190612656565b506000611d0184866127a5565b95945050505050565b6000610c2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cd0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600690915291822054611d9d918490611cd0565b6001600160a01b038086166000908152600660205260408082209390935590851681522054611dcc908361165b565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e209086815260200190565b60405180910390a35060019392505050565b6001600160a01b0383166000908152600b6020526040812054819060ff1615611e7c57611e756064611e6f6016548661211a90919063ffffffff16565b90612199565b9050611eba565b6001600160a01b0384166000908152600b602052604090205460ff1615611eba57611eb76064611e6f6017548661211a90919063ffffffff16565b90505b8015611f345730600090815260066020526040902054611eda908261165b565b30600081815260066020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f2b9085815260200190565b60405180910390a35b611d018382611d0a565b6000611f5b601854611e6f6015548661211a90919063ffffffff16565b90508015611fca57601e5460405163640eade360e11b81526001600160a01b038481166004830152602482018490529091169063c81d5bc690604401600060405180830381600087803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b505050505b505050565b601f805460ff60a01b1916600160a01b179055601854601354479160009161200291600291611e6f91908290889061211a565b905060006120108483611d0a565b905061201b816121db565b600061202784476127a5565b9050600061204d612044600260135461219990919063ffffffff16565b60185490611d0a565b9050600061206f6002611e6f84611e6f6013548861211a90919063ffffffff16565b9050600061208c83611e6f6015548761211a90919063ffffffff16565b905060006120a48261209e8786611d0a565b90611d0a565b905080156120c7576004546120c79061010090046001600160a01b031682612360565b81156120e357601e546120e3906001600160a01b031683612360565b6000831180156120f35750600087115b15612102576121028784612396565b5050601f805460ff60a01b1916905550505050505050565b60008261212957506000610b59565b60006121358385612786565b9050826121428583612766565b14610c215760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b89565b6000610c2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061247a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061221e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561227257600080fd5b505afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa91906124d9565b816001815181106122cb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601d546122f191309116846116ba565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061232a9085906000908690309042906004016126de565b600060405180830381600087803b15801561234457600080fd5b505af1158015612358573d6000803e3d6000fd5b505050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611fca573d6000803e3d6000fd5b601d546123ae9030906001600160a01b0316846116ba565b601d546001600160a01b031663f305d7198230856000806123d76000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561243a57600080fd5b505af115801561244e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124739190612629565b5050505050565b6000818361249b5760405162461bcd60e51b8152600401610b899190612656565b506000611d018486612766565b803580151581146124b857600080fd5b919050565b6000602082840312156124ce578081fd5b8135610c218161280d565b6000602082840312156124ea578081fd5b8151610c218161280d565b60008060408385031215612507578081fd5b82356125128161280d565b915060208301356125228161280d565b809150509250929050565b600080600060608486031215612541578081fd5b833561254c8161280d565b9250602084013561255c8161280d565b929592945050506040919091013590565b6000806040838503121561257f578182fd5b823561258a8161280d565b9150612598602084016124a8565b90509250929050565b600080604083850312156125b3578182fd5b82356125be8161280d565b946020939093013593505050565b6000602082840312156125dd578081fd5b610c21826124a8565b6000602082840312156125f7578081fd5b5035919050565b600080600060608486031215612612578283fd5b505081359360208301359350604090920135919050565b60008060006060848603121561263d578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b8181101561268257858101830151858201604001528201612666565b818111156126935783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561272d5784516001600160a01b031683529383019391830191600101612708565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612761576127616127f7565b500190565b60008261278157634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156127a0576127a06127f7565b500290565b6000828210156127b7576127b76127f7565b500390565b600181811c908216806127d057607f821691505b602082108114156127f157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461282257600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220603ed6fa128964dd1aa1b8306928b37e46f166d574a3a2f6b6827320921c28d664736f6c63430008040033

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

000000000000000000000000ed416fcc98f6a55e2b04fb7fc793bbee64273bfa000000000000000000000000c39886c268cc2350cdf3d7347a19ecc6175c1f7d

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0xEd416fCc98f6A55E2b04Fb7fC793BBEE64273BFa
Arg [1] : _rewardsEngine (address): 0xc39886c268cc2350Cdf3D7347A19ECC6175c1f7d

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ed416fcc98f6a55e2b04fb7fc793bbee64273bfa
Arg [1] : 000000000000000000000000c39886c268cc2350cdf3d7347a19ecc6175c1f7d


Deployed Bytecode Sourcemap

14416:16053:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18343:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19509:161;;;;;;;;;;-1:-1:-1;19509:161:0;;;;;:::i;:::-;;:::i;:::-;;;4856:14:1;;4849:22;4831:41;;4819:2;4804:18;19509:161:0;4786:92:1;16002:41:0;;;;;;;;;;-1:-1:-1;16002:41:0;;;;-1:-1:-1;;;;;16002:41:0;;;;;;-1:-1:-1;;;;;3447:32:1;;;3429:51;;3417:2;3402:18;16002:41:0;3384:102:1;18620:100:0;;;;;;;;;;-1:-1:-1;18700:12:0;;18620:100;;;10009:25:1;;;9997:2;9982:18;18620:100:0;9964:76:1;20891:353:0;;;;;;;;;;-1:-1:-1;20891:353:0;;;;;:::i;:::-;;:::i;:::-;;24098:313;;;;;;;;;;-1:-1:-1;24098:313:0;;;;;:::i;:::-;;:::i;20538:345::-;;;;;;;;;;-1:-1:-1;20538:345:0;;;;;:::i;:::-;;:::i;21762:113::-;;;;;;;;;;-1:-1:-1;21762:113:0;;;;;:::i;:::-;;:::i;14699:81::-;;;;;;;;;;;;;;;22734:128;;;;;;;;;;;;;:::i;20387:143::-;;;;;;;;;;-1:-1:-1;20387:143:0;;;;;:::i;:::-;;:::i;15287:36::-;;;;;;;;;;;;;;;;15458:34;;;;;;;;;;;;;;;;15370:37;;;;;;;;;;;;;;;;18529:83;;;;;;;;;;-1:-1:-1;18595:9:0;;18529:83;;18595:9;;;;11175:36:1;;11163:2;11148:18;18529:83:0;11130:87:1;19006:218:0;;;;;;;;;;-1:-1:-1;19006:218:0;;;;;:::i;:::-;;:::i;22289:125::-;;;;;;;;;;-1:-1:-1;22289:125:0;;;;;:::i;:::-;;:::i;16161:40::-;;;;;;;;;;-1:-1:-1;16161:40:0;;;;-1:-1:-1;;;16161:40:0;;;;;;15013:55;;;;;;;;;;-1:-1:-1;15013:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15133:48;;;;;;;;;;-1:-1:-1;15133:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15543:35;;;;;;;;;;;;;;;;21883:141;;;;;;;;;;-1:-1:-1;21883:141:0;;;;;:::i;:::-;;:::i;23008:813::-;;;;;;;;;;-1:-1:-1;23008:813:0;;;;;:::i;:::-;;:::i;22032:100::-;;;;;;;;;;-1:-1:-1;22032:100:0;;;;;:::i;:::-;;:::i;22140:141::-;;;;;;;;;;-1:-1:-1;22140:141:0;;;;;:::i;:::-;;:::i;15414:37::-;;;;;;;;;;;;;;;;20242:133;;;;;;;;;;-1:-1:-1;20242:133:0;;;;;:::i;:::-;;:::i;18728:119::-;;;;;;;;;;-1:-1:-1;18728:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;18821:18:0;18794:7;18821:18;;;:9;:18;;;;;;;18728:119;6074:148;;;;;;;;;;;;;:::i;15585:32::-;;;;;;;;;;;;;;;;15824:49;;;;;;;;;;;;;;;;15880:47;;;;;;;;;;;;;;;;15669:37;;;;;;;;;;;;;;;;5849:79;;;;;;;;;;-1:-1:-1;5887:7:0;5914:6;-1:-1:-1;;;;;5914:6:0;5849:79;;21640:114;;;;;;;;;;-1:-1:-1;21640:114:0;;;;;:::i;:::-;;:::i;18434:87::-;;;;;;;;;;;;;:::i;16050:35::-;;;;;;;;;;-1:-1:-1;16050:35:0;;;;-1:-1:-1;;;;;16050:35:0;;;15501;;;;;;;;;;;;;;;;15713:43;;;;;;;;;;;;;;;;19232:269;;;;;;;;;;-1:-1:-1;19232:269:0;;;;;:::i;:::-;;:::i;22422:125::-;;;;;;;;;;-1:-1:-1;22422:125:0;;;;;:::i;:::-;;:::i;23923:167::-;;;;;;;;;;-1:-1:-1;23923:167:0;;;;;:::i;:::-;;:::i;15244:36::-;;;;;;;;;;;;;;;;21256:372;;;;;;;;;;-1:-1:-1;21256:372:0;;;;;:::i;:::-;;:::i;22555:171::-;;;;;;;;;;-1:-1:-1;22555:171:0;;;;;:::i;:::-;;:::i;15075:51::-;;;;;;;;;;-1:-1:-1;15075:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16094:26;;;;;;;;;;-1:-1:-1;16094:26:0;;;;-1:-1:-1;;;;;16094:26:0;;;20023:96;;;;;;;;;;-1:-1:-1;20023:96:0;;;;;:::i;:::-;;:::i;15330:33::-;;;;;;;;;;;;;;;;16250:45;;;;;;;;;;-1:-1:-1;16250:45:0;;;;-1:-1:-1;;;16250:45:0;;;;;;18855:143;;;;;;;;;;-1:-1:-1;18855:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18963:18:0;;;18936:7;18963:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18855:143;20127:107;;;;;;;;;;-1:-1:-1;20127:107:0;;;;;:::i;:::-;;:::i;15626:36::-;;;;;;;;;;;;;;;;15934:59;;;;;;;;;;;;;;;;6230:244;;;;;;;;;;-1:-1:-1;6230:244:0;;;;;:::i;:::-;;:::i;16208:35::-;;;;;;;;;;-1:-1:-1;16208:35:0;;;;-1:-1:-1;;;16208:35:0;;;;;;14952:54;;;;;;;;;;-1:-1:-1;14952:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18343:83;18380:13;18413:5;18406:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18343:83;:::o;19509:161::-;19584:4;19601:39;279:10;19624:7;19633:6;19601:8;:39::i;:::-;-1:-1:-1;19658:4:0;19509:161;;;;;:::o;20891:353::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;;;;;;;;;21015:18:::1;:36:::0;;;21062:18:::1;:36:::0;;;21109:15:::1;:30:::0;;;21173:63:::1;21127:12:::0;21173:42:::1;21036:15:::0;21083;21173:22:::1;:42::i;:::-;:46:::0;::::1;:63::i;:::-;21152:18;:84:::0;-1:-1:-1;;;20891:353:0:o;24098:313::-;24196:4;24213:36;24223:6;24231:9;24242:6;24213:9;:36::i;:::-;-1:-1:-1;24260:121:0;24269:6;279:10;24291:89;24329:6;24291:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24291:19:0;;;;;;:11;:19;;;;;;;;279:10;24291:33;;;;;;;;;;:37;:89::i;:::-;24260:8;:121::i;:::-;-1:-1:-1;24399:4:0;24098:313;;;;;;:::o;20538:345::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;20661:17:::1;:35:::0;;;20707:17:::1;:35:::0;;;20753:14:::1;:29:::0;;;20815:60:::1;20770:12:::0;20815:40:::1;20681:15:::0;20727;20815:21:::1;:40::i;:60::-;20795:17;:80:::0;-1:-1:-1;;;20538:345:0:o;21762:113::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;21840:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;21840:27:0::1;-1:-1:-1::0;;;;21840:27:0;;::::1;::::0;;;::::1;::::0;;21762:113::o;22734:128::-;22841:11;-1:-1:-1;;;;;18821:18:0;22787:7;18821:18;;;:9;:18;;;;;;22814:12;;:40;;:16;:40::i;:::-;22807:47;;22734:128;:::o;20387:143::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20481:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:41;;-1:-1:-1;;20481:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20387:143::o;19006:218::-;279:10;19094:4;19143:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19143:34:0;;;;;;;;;;19094:4;;19111:83;;19134:7;;19143:50;;19182:10;19143:38;:50::i;22289:125::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;22371:24:::1;:35:::0;22289:125::o;21883:141::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21977:30:0;;;::::1;;::::0;;;:22:::1;:30;::::0;;;;:39;;-1:-1:-1;;21977:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21883:141::o;23008:813::-;23088:22;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;23125:35:::1;23182:16;23125:74;;23248:16;-1:-1:-1::0;;;;;23248:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23230:53:0::1;;23292:4;23299:16;-1:-1:-1::0;;;;;23299:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23230:93;::::0;-1:-1:-1;;;;;;23230:93:0::1;::::0;;;;;;-1:-1:-1;;;;;3721:15:1;;;23230:93:0::1;::::0;::::1;3703:34:1::0;3773:15;;3753:18;;;3746:43;3638:18;;23230:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23213:110:::0;-1:-1:-1;;;;;;23339:28:0;::::1;23336:225;;23453:16;-1:-1:-1::0;;;;;23453:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23435:74:0::1;;23518:4;23525:16;-1:-1:-1::0;;;;;23525:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23435:114;::::0;-1:-1:-1;;;;;;23435:114:0::1;::::0;;;;;;-1:-1:-1;;;;;3721:15:1;;;23435:114:0::1;::::0;::::1;3703:34:1::0;3773:15;;3753:18;;;3746:43;3638:18;;23435:114:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23418:131;;23336:225;23573:11;:28:::0;;-1:-1:-1;;;;;;23573:28:0;;::::1;-1:-1:-1::0;;;;;23573:28:0;;::::1;::::0;;::::1;::::0;;23635:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;23707:44:0;;;:22:::1;:44;::::0;;;;;;;:51;;-1:-1:-1;;23707:51:0;;::::1;-1:-1:-1::0;23707:51:0;;::::1;::::0;;;23793:11;;;;::::1;23769:37:::0;;:15:::1;:37:::0;;;;;:44;;;;::::1;::::0;;::::1;::::0;;23573:28;23587:14;-1:-1:-1;23008:813:0:o;22032:100::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;22102:10:::1;:22:::0;22032:100::o;22140:141::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;22228:15:::1;:45:::0;;-1:-1:-1;;;;;22228:45:0;;::::1;;;-1:-1:-1::0;;;;;;22228:45:0;;::::1;::::0;;;::::1;::::0;;22140:141::o;20242:133::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20332:26:0;;;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35;;-1:-1:-1;;20332:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20242:133::o;6074:148::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;6181:1:::1;6165:6:::0;;6144:40:::1;::::0;-1:-1:-1;;;;;6165:6:0;;::::1;::::0;6144:40:::1;::::0;6181:1;;6144:40:::1;6212:1;6195:19:::0;;-1:-1:-1;;;;;;6195:19:0::1;::::0;;6074:148::o;21640:114::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;21720:12:::1;:26:::0;21640:114::o;18434:87::-;18473:13;18506:7;18499:14;;;;;:::i;19232:269::-;19325:4;19342:129;279:10;19365:7;19374:96;19413:15;19374:96;;;;;;;;;;;;;;;;;279:10;19374:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19374:34:0;;;;;;;;;;;;:38;:96::i;22422:125::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;22503:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;22503:36:0::1;-1:-1:-1::0;;;;22503:36:0;;::::1;::::0;;;::::1;::::0;;22422:125::o;23923:167::-;24001:4;24018:42;279:10;24042:9;24053:6;24018:9;:42::i;21256:372::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;21399:16:::1;:36:::0;;;21446:16:::1;:36:::0;;;21493:13:::1;:30:::0;;;21563:57:::1;21509:14:::0;21563:38:::1;21418:17:::0;21465;21563:20:::1;:38::i;:57::-;21536:24;:84:::0;-1:-1:-1;;;21256:372:0:o;22555:171::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;22632:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;22632:32:0::1;-1:-1:-1::0;;;;22632:32:0;;::::1;;::::0;;22680:38:::1;::::0;::::1;::::0;::::1;::::0;22656:8;4856:14:1;4849:22;4831:41;;4819:2;4804:18;;4786:92;22680:38:0::1;;;;;;;;22555:171:::0;:::o;20023:96::-;16637:13;;-1:-1:-1;;;;;16637:13:0;279:10;16629:38;16621:75;;;;-1:-1:-1;;;16621:75:0;;9307:2:1;16621:75:0;;;9289:21:1;9346:2;9326:18;;;9319:30;9385:26;9365:18;;;9358:54;9429:18;;16621:75:0;9279:174:1;16621:75:0;20090:11:::1;:21:::0;;-1:-1:-1;;;;;;20090:21:0::1;-1:-1:-1::0;;;;;20090:21:0;;;::::1;::::0;;;::::1;::::0;;20023:96::o;20127:107::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20195:24:0::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;20195:31:0::1;20222:4;20195:31;::::0;;20127:107::o;6230:244::-;5983:6;;-1:-1:-1;;;;;5983:6:0;279:10;5983:22;5975:67;;;;-1:-1:-1;;;5975:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6319:22:0;::::1;6311:73;;;::::0;-1:-1:-1;;;6311:73:0;;6563:2:1;6311:73:0::1;::::0;::::1;6545:21:1::0;6602:2;6582:18;;;6575:30;6641:34;6621:18;;;6614:62;-1:-1:-1;;;6692:18:1;;;6685:36;6738:19;;6311:73:0::1;6535:228:1::0;6311:73:0::1;6421:6;::::0;;6400:38:::1;::::0;-1:-1:-1;;;;;6400:38:0;;::::1;::::0;6421:6;::::1;::::0;6400:38:::1;::::0;::::1;6449:6;:17:::0;;-1:-1:-1;;;;;;6449:17:0::1;-1:-1:-1::0;;;;;6449:17:0;;;::::1;::::0;;;::::1;::::0;;6230:244::o;1251:181::-;1309:7;;1341:5;1345:1;1341;:5;:::i;:::-;1329:17;;1370:1;1365;:6;;1357:46;;;;-1:-1:-1;;;1357:46:0;;7373:2:1;1357:46:0;;;7355:21:1;7412:2;7392:18;;;7385:30;7451:29;7431:18;;;7424:57;7498:18;;1357:46:0;7345:177:1;19678:337:0;-1:-1:-1;;;;;19771:19:0;;19763:68;;;;-1:-1:-1;;;19763:68:0;;9660:2:1;19763:68:0;;;9642:21:1;9699:2;9679:18;;;9672:30;9738:34;9718:18;;;9711:62;-1:-1:-1;;;9789:18:1;;;9782:34;9833:19;;19763:68:0;9632:226:1;19763:68:0;-1:-1:-1;;;;;19850:21:0;;19842:68;;;;-1:-1:-1;;;19842:68:0;;6970:2:1;19842:68:0;;;6952:21:1;7009:2;6989:18;;;6982:30;7048:34;7028:18;;;7021:62;-1:-1:-1;;;7099:18:1;;;7092:32;7141:19;;19842:68:0;6942:224:1;19842:68:0;-1:-1:-1;;;;;19923:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19975:32;;10009:25:1;;;19975:32:0;;9982:18:1;19975:32:0;;;;;;;19678:337;;;:::o;24419:2474::-;24506:4;-1:-1:-1;;;;;24531:20:0;;24523:70;;;;-1:-1:-1;;;24523:70:0;;8901:2:1;24523:70:0;;;8883:21:1;8940:2;8920:18;;;8913:30;8979:34;8959:18;;;8952:62;-1:-1:-1;;;9030:18:1;;;9023:35;9075:19;;24523:70:0;8873:227:1;24523:70:0;-1:-1:-1;;;;;24612:23:0;;24604:71;;;;-1:-1:-1;;;24604:71:0;;6159:2:1;24604:71:0;;;6141:21:1;6198:2;6178:18;;;6171:30;6237:34;6217:18;;;6210:62;-1:-1:-1;;;6288:18:1;;;6281:33;6331:19;;24604:71:0;6131:225:1;24604:71:0;24691:16;;-1:-1:-1;;;24691:16:0;;;;24688:2198;;;24741:41;24756:6;24764:9;24775:6;24741:14;:41::i;:::-;24734:48;;;;24688:2198;-1:-1:-1;;;;;24838:26:0;;;;;;:18;:26;;;;;;;;24837:27;:61;;;;-1:-1:-1;;;;;;24869:29:0;;;;;;:18;:29;;;;;;;;24868:30;24837:61;24834:176;;;24937:12;;24927:6;:22;;24919:75;;;;-1:-1:-1;;;24919:75:0;;7729:2:1;24919:75:0;;;7711:21:1;7768:2;7748:18;;;7741:30;7807:34;7787:18;;;7780:62;-1:-1:-1;;;7858:18:1;;;7851:38;7906:19;;24919:75:0;7701:230:1;24919:75:0;-1:-1:-1;;;;;25055:29:0;;25038:13;25055:29;;;:21;:29;;;;;;;;;:65;;-1:-1:-1;;;;;;25088:32:0;;;;;;:21;:32;;;;;;;;25055:65;25038:83;;25158:53;25180:6;25158:53;;;;;;;;;;;;;-1:-1:-1;;;25158:53:0;;;:9;:17;25168:6;-1:-1:-1;;;;;25158:17:0;-1:-1:-1;;;;;25158:17:0;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;-1:-1:-1;;;;;25138:17:0;;;;;;:9;:17;;;;;:73;;;;25250:8;:97;;25313:34;25321:6;25329:9;25340:6;25313:7;:34::i;:::-;25250:97;;;25304:6;25250:97;25427:4;25378:28;18821:18;;;:9;:18;;;;;;25228:119;;-1:-1:-1;25378:28:0;25494:24;;25540:16;;25378:55;;-1:-1:-1;25470:48:0;;;;-1:-1:-1;;;25540:16:0;;;;25539:17;:43;;;;-1:-1:-1;25561:21:0;;-1:-1:-1;;;25561:21:0;;;;25539:43;:56;;;;;25587:8;25586:9;25539:56;25535:1020;;;-1:-1:-1;;;;;25633:23:0;;;;;;:15;:23;;;;;;;;25630:910;;;25683:11;;-1:-1:-1;;;;;25683:24:0;;;:11;;:24;:53;;;;-1:-1:-1;;;;;;25712:24:0;;;;;;:13;:24;;;;;;;;25711:25;25683:53;25680:428;;;-1:-1:-1;;;;;25812:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;25812:31:0;25839:4;25812:31;;;25779:6;;-1:-1:-1;25630:910:0;;25680:428;25899:44;25911:20;25920:11;25911:6;:20;:::i;:::-;25933:9;25899:11;:44::i;:::-;-1:-1:-1;;;;;25975:24:0;;;;;;:13;:24;;;;;;;;25970:115;;-1:-1:-1;;;;;26027:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;26027:31:0;26054:4;26027:31;;;25970:115;25630:910;;;-1:-1:-1;;;;;26138:26:0;;;;;;:15;:26;;;;;;;;26134:406;;;26189:41;26201:20;26210:11;26201:6;:20;:::i;:::-;26223:6;26189:11;:41::i;:::-;26257:12;26253:268;;;26301:25;;-1:-1:-1;;;26301:25:0;;;;26298:135;;;26381:24;;26358:47;;26298:135;26459:36;26474:20;26459:14;:36::i;:::-;26574:16;;-1:-1:-1;;;26574:16:0;;;;:54;;;;-1:-1:-1;;;;;;26595:33:0;;;;;;:22;:33;;;;;;;;26594:34;26574:54;26571:136;;;26696:10;;26655:37;26680:11;26655:20;26665:9;-1:-1:-1;;;;;18821:18:0;18794:7;18821:18;;;:9;:18;;;;;;;18728:119;26655:37;:51;;26647:60;;;;;;-1:-1:-1;;;;;26747:20:0;;;;;;:9;:20;;;;;;:37;;26772:11;26747:24;:37::i;:::-;-1:-1:-1;;;;;26724:20:0;;;;;;;:9;:20;;;;;;;:60;;;;26806:40;;;;;;;;;;26834:11;10009:25:1;;9997:2;9982:18;;9964:76;26806:40:0;;;;;;;;26870:4;26863:11;;;;;;;;1584:192;1670:7;1706:12;1698:6;;;;1690:29;;;;-1:-1:-1;;;1690:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1730:9:0;1742:5;1746:1;1742;:5;:::i;:::-;1730:17;1584:192;-1:-1:-1;;;;;1584:192:0:o;1440:136::-;1498:7;1525:43;1529:1;1532;1525:43;;;;;;;;;;;;;;;;;:3;:43::i;26901:330::-;27031:53;;;;;;;;;;;-1:-1:-1;;;27031:53:0;;;;;;;;-1:-1:-1;;;;;27031:17:0;;26994:4;27031:17;;;:9;:17;;;;;;;:53;;27053:6;;27031:21;:53::i;:::-;-1:-1:-1;;;;;27011:17:0;;;;;;;:9;:17;;;;;;:73;;;;27118:20;;;;;;;:32;;27143:6;27118:24;:32::i;:::-;-1:-1:-1;;;;;27095:20:0;;;;;;;:9;:20;;;;;;;:55;;;;27166:35;;;;;;;;;;27194:6;10009:25:1;;9997:2;9982:18;;9964:76;27166:35:0;;;;;;;;-1:-1:-1;27219:4:0;26901:330;;;;;:::o;29834:628::-;-1:-1:-1;;;;;29995:23:0;;29920:7;29995:23;;;:15;:23;;;;;;29920:7;;29995:23;;29992:229;;;30047:38;30081:3;30047:29;30058:17;;30047:6;:10;;:29;;;;:::i;:::-;:33;;:38::i;:::-;30035:50;;29992:229;;;-1:-1:-1;;;;;30115:26:0;;;;;;:15;:26;;;;;;;;30112:109;;;30170:39;30205:3;30170:30;30181:18;;30170:6;:10;;:30;;;;:::i;:39::-;30158:51;;30112:109;30244:13;;30241:173;;30319:4;30301:24;;;;:9;:24;;;;;;:39;;30330:9;30301:28;:39::i;:::-;30292:4;30274:24;;;;:9;:24;;;;;;;:66;;;;30360:42;;-1:-1:-1;;;;;30360:42:0;;;;;;;30392:9;10009:25:1;;9997:2;9982:18;;9964:76;30360:42:0;;;;;;;;30241:173;30433:21;:6;30444:9;30433:10;:21::i;27239:269::-;27311:21;27335:56;27366:24;;27335:26;27347:13;;27335:7;:11;;:26;;;;:::i;:56::-;27311:80;-1:-1:-1;27406:17:0;;27402:99;;27440:13;;:49;;-1:-1:-1;;;27440:49:0;;-1:-1:-1;;;;;3992:32:1;;;27440:49:0;;;3974:51:1;4041:18;;;4034:34;;;27440:13:0;;;;:27;;3947:18:1;;27440:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27402:99;27239:269;;;:::o;27516:1172::-;16760:16;:23;;-1:-1:-1;;;;16760:23:0;-1:-1:-1;;;16760:23:0;;;27701:24:::1;::::0;27679:16:::1;::::0;27613:21:::1;::::0;16760:23;;27667:66:::1;::::0;27731:1:::1;::::0;27667:59:::1;::::0;27701:24;27667:59;;:7;;:11:::1;:29::i;:66::-;27645:88:::0;-1:-1:-1;27744:21:0::1;27768:24;:7:::0;27645:88;27768:11:::1;:24::i;:::-;27744:48;;27803:31;27820:13;27803:16;:31::i;:::-;27845:22;27870:38;27894:14:::0;27870:21:::1;:38;:::i;:::-;27845:63;;27921:19;27943:53;27972:23;27993:1;27972:16;;:20;;:23;;;;:::i;:::-;27943:24;::::0;;:28:::1;:53::i;:::-;27921:75;;28017:26;28046:60;28104:1;28046:53;28087:11;28046:36;28065:16;;28046:14;:18;;:36;;;;:::i;:60::-;28017:89;;28117:24;28144:50;28182:11;28144:33;28163:13;;28144:14;:18;;:33;;;;:::i;:50::-;28117:77:::0;-1:-1:-1;28205:26:0::1;28234:60;28117:77:::0;28234:38:::1;:14:::0;28253:18;28234::::1;:38::i;:::-;:42:::0;::::1;:60::i;:::-;28205:89:::0;-1:-1:-1;28310:22:0;;28307:110:::1;;28369:15;::::0;28348:57:::1;::::0;28369:15:::1;::::0;::::1;-1:-1:-1::0;;;;;28369:15:0::1;28386:18:::0;28348:20:::1;:57::i;:::-;28432:20:::0;;28429:122:::1;;28505:13;::::0;28468:71:::1;::::0;-1:-1:-1;;;;;28505:13:0::1;28522:16:::0;28468:20:::1;:71::i;:::-;28587:1;28566:18;:22;:41;;;;;28606:1;28592:11;:15;28566:41;28563:118;;;28624:45;28637:11;28650:18;28624:12;:45::i;:::-;-1:-1:-1::0;;16806:16:0;:24;;-1:-1:-1;;;;16806:24:0;;;-1:-1:-1;;;;;;;27516:1172:0:o;1784:250::-;1842:7;1866:6;1862:47;;-1:-1:-1;1896:1:0;1889:8;;1862:47;1921:9;1933:5;1937:1;1933;:5;:::i;:::-;1921:17;-1:-1:-1;1966:1:0;1957:5;1961:1;1921:17;1957:5;:::i;:::-;:10;1949:56;;;;-1:-1:-1;;;1949:56:0;;8138:2:1;1949:56:0;;;8120:21:1;8177:2;8157:18;;;8150:30;8216:34;8196:18;;;8189:62;-1:-1:-1;;;8267:18:1;;;8260:31;8308:19;;1949:56:0;8110:223:1;2042:132:0;2100:7;2127:39;2131:1;2134;2127:39;;;;;;;;;;;;;;;;;:3;:39::i;28700:605::-;28850:16;;;28864:1;28850:16;;;;;;;;28826:21;;28850:16;;;;;;;;;;-1:-1:-1;28850:16:0;28826:40;;28895:4;28877;28882:1;28877:7;;;;;;-1:-1:-1;;;28877:7:0;;;;;;;;;-1:-1:-1;;;;;28877:23:0;;;:7;;;;;;;;;;:23;;;;28921:15;;:22;;;-1:-1:-1;;;28921:22:0;;;;:15;;;;;:20;;:22;;;;;28877:7;;28921:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28911:4;28916:1;28911:7;;;;;;-1:-1:-1;;;28911:7:0;;;;;;;;;-1:-1:-1;;;;;28911:32:0;;;:7;;;;;;;;;:32;28988:15;;28956:62;;28973:4;;28988:15;29006:11;28956:8;:62::i;:::-;29057:15;;:240;;-1:-1:-1;;;29057:240:0;;-1:-1:-1;;;;;29057:15:0;;;;:66;;:240;;29138:11;;29057:15;;29208:4;;29235;;29271:15;;29057:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28700:605;;:::o;22870:126::-;22962:26;;-1:-1:-1;;;;;22962:18:0;;;:26;;;;;22981:6;;22962:26;;;;22981:6;22962:18;:26;;;;;;;;;;;;;;;;;;;29313:513;29493:15;;29461:62;;29478:4;;-1:-1:-1;;;;;29493:15:0;29511:11;29461:8;:62::i;:::-;29566:15;;-1:-1:-1;;;;;29566:15:0;:31;29605:9;29638:4;29658:11;29566:15;;29770:7;5887;5914:6;-1:-1:-1;;;;;5914:6:0;;5849:79;29770:7;29566:252;;;;;;-1:-1:-1;;;;;;29566:252:0;;;-1:-1:-1;;;;;4438:15:1;;;29566:252:0;;;4420:34:1;4470:18;;;4463:34;;;;4513:18;;;4506:34;;;;4556:18;;;4549:34;4620:15;;;4599:19;;;4592:44;29792:15:0;4652:19:1;;;4645:35;4354:19;;29566:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29313:513;;:::o;2182:278::-;2268:7;2303:12;2296:5;2288:28;;;;-1:-1:-1;;;2288:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2327:9:0;2339:5;2343:1;2339;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1646:6;1654;1707:2;1695:9;1686:7;1682:23;1678:32;1675:2;;;1728:6;1720;1713:22;1675:2;1772:9;1759:23;1791:31;1816:5;1791:31;:::i;:::-;1841:5;-1:-1:-1;1865:35:1;1896:2;1881:18;;1865:35;:::i;:::-;1855:45;;1665:241;;;;;:::o;1911:325::-;1979:6;1987;2040:2;2028:9;2019:7;2015:23;2011:32;2008:2;;;2061:6;2053;2046:22;2008:2;2105:9;2092:23;2124:31;2149:5;2124:31;:::i;:::-;2174:5;2226:2;2211:18;;;;2198:32;;-1:-1:-1;;;1998:238:1:o;2241:190::-;2297:6;2350:2;2338:9;2329:7;2325:23;2321:32;2318:2;;;2371:6;2363;2356:22;2318:2;2399:26;2415:9;2399:26;:::i;2436:190::-;2495:6;2548:2;2536:9;2527:7;2523:23;2519:32;2516:2;;;2569:6;2561;2554:22;2516:2;-1:-1:-1;2597:23:1;;2506:120;-1:-1:-1;2506:120:1:o;2631:326::-;2708:6;2716;2724;2777:2;2765:9;2756:7;2752:23;2748:32;2745:2;;;2798:6;2790;2783:22;2745:2;-1:-1:-1;;2826:23:1;;;2896:2;2881:18;;2868:32;;-1:-1:-1;2947:2:1;2932:18;;;2919:32;;2735:222;-1:-1:-1;2735:222:1:o;2962:316::-;3050:6;3058;3066;3119:2;3107:9;3098:7;3094:23;3090:32;3087:2;;;3140:6;3132;3125:22;3087:2;3174:9;3168:16;3158:26;;3224:2;3213:9;3209:18;3203:25;3193:35;;3268:2;3257:9;3253:18;3247:25;3237:35;;3077:201;;;;;:::o;5349:603::-;5461:4;5490:2;5519;5508:9;5501:21;5551:6;5545:13;5594:6;5589:2;5578:9;5574:18;5567:34;5619:4;5632:140;5646:6;5643:1;5640:13;5632:140;;;5741:14;;;5737:23;;5731:30;5707:17;;;5726:2;5703:26;5696:66;5661:10;;5632:140;;;5790:6;5787:1;5784:13;5781:2;;;5860:4;5855:2;5846:6;5835:9;5831:22;5827:31;5820:45;5781:2;-1:-1:-1;5936:2:1;5915:15;-1:-1:-1;;5911:29:1;5896:45;;;;5943:2;5892:54;;5470:482;-1:-1:-1;;;5470:482:1:o;8338:356::-;8540:2;8522:21;;;8559:18;;;8552:30;8618:34;8613:2;8598:18;;8591:62;8685:2;8670:18;;8512:182::o;10045:983::-;10307:4;10355:3;10344:9;10340:19;10386:6;10375:9;10368:25;10412:2;10450:6;10445:2;10434:9;10430:18;10423:34;10493:3;10488:2;10477:9;10473:18;10466:31;10517:6;10552;10546:13;10583:6;10575;10568:22;10621:3;10610:9;10606:19;10599:26;;10660:2;10652:6;10648:15;10634:29;;10681:4;10694:195;10708:6;10705:1;10702:13;10694:195;;;10773:13;;-1:-1:-1;;;;;10769:39:1;10757:52;;10864:15;;;;10829:12;;;;10805:1;10723:9;10694:195;;;-1:-1:-1;;;;;;;10945:32:1;;;;10940:2;10925:18;;10918:60;-1:-1:-1;;;11009:3:1;10994:19;10987:35;10906:3;10316:712;-1:-1:-1;;;10316:712:1:o;11222:128::-;11262:3;11293:1;11289:6;11286:1;11283:13;11280:2;;;11299:18;;:::i;:::-;-1:-1:-1;11335:9:1;;11270:80::o;11355:217::-;11395:1;11421;11411:2;;-1:-1:-1;;;11446:31:1;;11500:4;11497:1;11490:15;11528:4;11453:1;11518:15;11411:2;-1:-1:-1;11557:9:1;;11401:171::o;11577:168::-;11617:7;11683:1;11679;11675:6;11671:14;11668:1;11665:21;11660:1;11653:9;11646:17;11642:45;11639:2;;;11690:18;;:::i;:::-;-1:-1:-1;11730:9:1;;11629:116::o;11750:125::-;11790:4;11818:1;11815;11812:8;11809:2;;;11823:18;;:::i;:::-;-1:-1:-1;11860:9:1;;11799:76::o;11880:380::-;11959:1;11955:12;;;;12002;;;12023:2;;12077:4;12069:6;12065:17;12055:27;;12023:2;12130;12122:6;12119:14;12099:18;12096:38;12093:2;;;12176:10;12171:3;12167:20;12164:1;12157:31;12211:4;12208:1;12201:15;12239:4;12236:1;12229:15;12093:2;;11935:325;;;:::o;12265:127::-;12326:10;12321:3;12317:20;12314:1;12307:31;12357:4;12354:1;12347:15;12381:4;12378:1;12371:15;12397:131;-1:-1:-1;;;;;12472:31:1;;12462:42;;12452:2;;12518:1;12515;12508:12;12452:2;12442:86;:::o

Swarm Source

ipfs://603ed6fa128964dd1aa1b8306928b37e46f166d574a3a2f6b6827320921c28d6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.