ETH Price: $1,851.91 (-9.35%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve137822722021-12-11 6:33:261185 days ago1639204406IN
0x6CEB0a40...50C5EccDF
0 ETH0.0029697663.69343109
Approve137758762021-12-10 6:54:421186 days ago1639119282IN
0x6CEB0a40...50C5EccDF
0 ETH0.0028803561.7756813
Approve137755762021-12-10 5:46:041186 days ago1639115164IN
0x6CEB0a40...50C5EccDF
0 ETH0.0027035257.98311217
Approve137630462021-12-08 5:35:541188 days ago1638941754IN
0x6CEB0a40...50C5EccDF
0 ETH0.0030273964.92934738
Approve137610812021-12-07 22:08:271189 days ago1638914907IN
0x6CEB0a40...50C5EccDF
0 ETH0.004460895.67195742
Approve137559212021-12-07 2:15:441189 days ago1638843344IN
0x6CEB0a40...50C5EccDF
0 ETH0.0045133996.8
Set Taxes137549592021-12-06 22:41:241190 days ago1638830484IN
0x6CEB0a40...50C5EccDF
0 ETH0.01138269181.74516862
Set Taxes137549562021-12-06 22:39:461190 days ago1638830386IN
0x6CEB0a40...50C5EccDF
0 ETH0.01013995146.04573265
Set Percents137549542021-12-06 22:39:071190 days ago1638830347IN
0x6CEB0a40...50C5EccDF
0 ETH0.00472153134.97822367
Approve137545252021-12-06 21:04:401190 days ago1638824680IN
0x6CEB0a40...50C5EccDF
0 ETH0.00589147126.35603764
Approve137543882021-12-06 20:30:531190 days ago1638822653IN
0x6CEB0a40...50C5EccDF
0 ETH0.0046039298.74158666
Approve137539642021-12-06 18:51:321190 days ago1638816692IN
0x6CEB0a40...50C5EccDF
0 ETH0.0049368105.88084093
Approve137537122021-12-06 17:55:211190 days ago1638813321IN
0x6CEB0a40...50C5EccDF
0 ETH0.003900883.66158837
Update Marketing...137535712021-12-06 17:24:061190 days ago1638811446IN
0x6CEB0a40...50C5EccDF
0 ETH0.00416862143.82987516
Set Taxes137535562021-12-06 17:19:441190 days ago1638811184IN
0x6CEB0a40...50C5EccDF
0 ETH0.01260382130.68810021
Set Percents137535502021-12-06 17:18:521190 days ago1638811132IN
0x6CEB0a40...50C5EccDF
0 ETH0.00833872151.91139294
Update Cards137535222021-12-06 17:09:381190 days ago1638810578IN
0x6CEB0a40...50C5EccDF
0 ETH0.0027843295.77671241
Manual Send137534982021-12-06 17:04:511190 days ago1638810291IN
0x6CEB0a40...50C5EccDF
0 ETH0.0022636696.38764513
Approve137534622021-12-06 16:57:311190 days ago1638809851IN
0x6CEB0a40...50C5EccDF
0 ETH0.00738555158.4
Manual Swap137534572021-12-06 16:56:201190 days ago1638809780IN
0x6CEB0a40...50C5EccDF
0 ETH0.02091423122.07989729
Approve137534032021-12-06 16:43:471190 days ago1638809027IN
0x6CEB0a40...50C5EccDF
0 ETH0.00583351125.11283126
Approve137533912021-12-06 16:40:531190 days ago1638808853IN
0x6CEB0a40...50C5EccDF
0 ETH0.00569657122.17591533
Approve137533882021-12-06 16:40:151190 days ago1638808815IN
0x6CEB0a40...50C5EccDF
0 ETH0.00553102118.62538173
Approve137533842021-12-06 16:39:121190 days ago1638808752IN
0x6CEB0a40...50C5EccDF
0 ETH0.00692396148.5
Approve137533832021-12-06 16:39:041190 days ago1638808744IN
0x6CEB0a40...50C5EccDF
0 ETH0.00595626127.74564322
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-137546292021-12-06 21:26:031190 days ago1638825963
0x6CEB0a40...50C5EccDF
0.01378463 ETH
-137546292021-12-06 21:26:031190 days ago1638825963
0x6CEB0a40...50C5EccDF
0.00000191 ETH
-137546292021-12-06 21:26:031190 days ago1638825963
0x6CEB0a40...50C5EccDF
0.00689136 ETH
-137546292021-12-06 21:26:031190 days ago1638825963
0x6CEB0a40...50C5EccDF
0.02067408 ETH
-137544582021-12-06 20:48:041190 days ago1638823684
0x6CEB0a40...50C5EccDF
0.00592393 ETH
-137544582021-12-06 20:48:041190 days ago1638823684
0x6CEB0a40...50C5EccDF
0.00296196 ETH
-137544582021-12-06 20:48:041190 days ago1638823684
0x6CEB0a40...50C5EccDF
0.00888589 ETH
-137544132021-12-06 20:38:131190 days ago1638823093
0x6CEB0a40...50C5EccDF
0.01868164 ETH
-137544132021-12-06 20:38:131190 days ago1638823093
0x6CEB0a40...50C5EccDF
0.00001104 ETH
-137544132021-12-06 20:38:131190 days ago1638823093
0x6CEB0a40...50C5EccDF
0.0093353 ETH
-137544132021-12-06 20:38:131190 days ago1638823093
0x6CEB0a40...50C5EccDF
0.0280059 ETH
-137543252021-12-06 20:16:211190 days ago1638821781
0x6CEB0a40...50C5EccDF
0.02423942 ETH
-137543252021-12-06 20:16:211190 days ago1638821781
0x6CEB0a40...50C5EccDF
0.00002587 ETH
-137543252021-12-06 20:16:211190 days ago1638821781
0x6CEB0a40...50C5EccDF
0.01210677 ETH
-137543252021-12-06 20:16:211190 days ago1638821781
0x6CEB0a40...50C5EccDF
0.03632032 ETH
-137541542021-12-06 19:34:371190 days ago1638819277
0x6CEB0a40...50C5EccDF
0.01215098 ETH
-137541542021-12-06 19:34:371190 days ago1638819277
0x6CEB0a40...50C5EccDF
0.00607549 ETH
-137541542021-12-06 19:34:371190 days ago1638819277
0x6CEB0a40...50C5EccDF
0.01822647 ETH
-137541512021-12-06 19:33:451190 days ago1638819225
0x6CEB0a40...50C5EccDF
0.01215098 ETH
-137541512021-12-06 19:33:451190 days ago1638819225
0x6CEB0a40...50C5EccDF
0.00607549 ETH
-137541512021-12-06 19:33:451190 days ago1638819225
0x6CEB0a40...50C5EccDF
0.01822647 ETH
-137541502021-12-06 19:33:191190 days ago1638819199
0x6CEB0a40...50C5EccDF
0.00692042 ETH
-137541502021-12-06 19:33:191190 days ago1638819199
0x6CEB0a40...50C5EccDF
0.00346021 ETH
-137541502021-12-06 19:33:191190 days ago1638819199
0x6CEB0a40...50C5EccDF
0.01038063 ETH
-137540532021-12-06 19:12:531190 days ago1638817973
0x6CEB0a40...50C5EccDF
0.01730849 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TrollsToken

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-06
*/

/*  The internet is full of trolls, and in the realm of crypto, the population is especially concentrated. Come visit us at t.me/TrollsOfTelegram and see what type of troll you are and get rewarded with Ethereum. The Trolls token has a special wallet to reward those most active in telegram and/or the ones who exhibit the best troll repellent. 

    10% Tax with autoLP & a wallet to feed the trolls of telegram (the holders)
    The more active one is in Telegram & Twitter, the more ETH you will earn.

*/
/*  
    Trolls Token t.me/TelegramOfTrolls
    The internet is full of trolls, and in the realm of crypto,
    the population is especially concentrated.
    Come visit us at t.me/TrollsOfTelegram and see what type of troll you are
    and get rewarded with Ethereum from the special wallet for those most active
    in telegram and/or the ones who exhibit the best troll repellent. 

    🏵$TROLLS🏵 Launch Dec 6, 2021
    Total Supply: 3,750,000,000
    Max Txn: 3% (122,500,000)
    Max Wallet: 5%
    💎10% Tax featuring an Auto LP and the TROLL TAX to feed the trolls of Telegram. 
     
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

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

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

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 transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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 IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    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);
}

abstract contract IERC20Extented is IERC20 {
    function decimals() external view virtual returns (uint8);
    function name() external view virtual returns (string memory);
    function symbol() external view virtual returns (string memory);
}

contract TrollsToken is Context, IERC20, IERC20Extented, Ownable {
    using SafeMath for uint256;
    string private constant _name = "Trolls Token";
    string private constant _symbol = "TROLLS";
    uint8 private constant _decimals = 9;
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant _tTotal = 3750 * 1e6 * 1e9; // 3,750,000,000
    uint256 public _priceImpact = 2;
    uint256 private _firstBlock;
    uint256 private _botBlocks;
    uint256 public _maxWalletAmount;
    uint256 private _maxSellAmountETH = 5 * 1e9; // 5 ETH
    uint256 private _minBuyETH = 0; //1 * 1e7; // 0.01 ETH
    uint256 private _minSellETH = 0; //1 * 1e7; // 0.01 ETH

    // fees
    uint256 public _liquidityFee = 40; // divided by 1000
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 public _marketingFee = 40; // divided by 1000
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 public _trollFee = 10; // divided by 1000
    uint256 private _previousTrollFee = _trollFee;
    uint256 private _cardsFee = 10; // divided by 1000
    uint256 private _previousCardsFee = _cardsFee;
    uint256 public _burnFee = 0; // divided by 1000
    uint256 private _previousBurnFee = _burnFee;
    
    uint256 private _marketingPercent = 750;
    uint256 private _trollPercent = 125;
    uint256 private _cardsPercent = 125;

    struct FeeBreakdown {
        uint256 tLiquidity;
        uint256 tMarketing;
        uint256 tTroll;
        uint256 tCards;
        uint256 tBurn;
        uint256 tAmount;
    }

    mapping(address => bool) private bots;
    address payable private _marketingAddress = payable(0xE85EC5e9b863eEcD8EfE12b77EcA2e2Cc8Fd1155);
    address payable private _trollAddress = payable(0x2008FbC22476fE372A8a449a832CEa4e3b517B1c);
    address payable private _cards;
    address payable constant private _burnAddress = payable(0x000000000000000000000000000000000000dEaD);
    address private presaleRouter;
    address private presaleAddress;
    IUniswapV2Router02 private uniswapV2Router;
    address public uniswapV2Pair;
    uint256 private _maxTxAmount;

    bool private tradingOpen = false;
    bool private inSwap = false;
    bool private presale = true;
    bool private pairSwapped = false;
    bool public _priceImpactSellLimitEnabled = false;
    bool public _ETHsellLimitEnabled = false;

    event EndedPresale(bool presale);
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    event PercentsUpdated(uint256 _marketingPercent, uint256 _trollPercent, uint256 _cardsPercent);
    event FeesUpdated(uint256 _marketingFee, uint256 _liquidityFee, uint256 _trollFee, uint256 _cardsFee, uint256 _burnFee);
    event PriceImpactUpdated(uint256 _priceImpact);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor(address cards) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router),type(uint256).max);

        _maxTxAmount = _tTotal; // start off transaction limit at 100% of total supply
        _maxWalletAmount = _tTotal.div(1); // 100%
        _priceImpact = 100;
        cards = _cards;
        
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function airdrop(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner {
        require(airdropWallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop
        for(uint256 i = 0; i < airdropWallets.length; i++){
            address wallet = airdropWallets[i];
            uint256 amount = amounts[i];
            _transfer(msg.sender, wallet, amount);
        }
    }

    function name() override external pure returns (string memory) {
        return _name;
    }

    function symbol() override external pure returns (string memory) {
        return _symbol;
    }

    function decimals() override external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

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

    function isBot(address account) public view returns (bool) {
        return bots[account];
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

    function removeAllFee() private {
        if (_marketingFee == 0 && _liquidityFee == 0 && _trollFee == 0 && _cardsFee == 0 && _burnFee == 0) return;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        _previousTrollFee = _trollFee;
        _previousCardsFee = _cardsFee;
        _previousBurnFee = _burnFee;
        
        _marketingFee = 0;
        _liquidityFee = 0;
        _trollFee = 0;
        _cardsFee = 0;
        _burnFee = 0;
    }

    function setBotFee() private {
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        _previousTrollFee = _trollFee;
        _previousCardsFee = _cardsFee;
        _previousBurnFee = _burnFee;
        
        _marketingFee = 300;
        _liquidityFee = 300;
        _trollFee = 18;
        _cardsFee = 0;
        _burnFee = 0;
    }
    
    function restoreAllFee() private {
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
        _trollFee = _previousTrollFee;
        _cardsFee = _previousCardsFee;
        _burnFee = _previousBurnFee;
    }

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

    // calculate price based on pair reserves
    function getTokenPriceETH(uint256 amount) external view returns(uint256) {
        IERC20Extented token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());//Meliodas
        IERC20Extented token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());//eth
        
        require(token0.decimals() != 0, "ERR: decimals cannot be zero");
        
        (uint112 Res0, uint112 Res1,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        if(pairSwapped) {
            token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());//Meliodas
            token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());//eth
            (Res1, Res0,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        }

        uint res1 = Res1*(10**token0.decimals());
        return((amount*res1)/(Res0*(10**token0.decimals()))); // return amount of token1 needed to buy token0
    }
    
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        bool takeFee = true;

        if (from != owner() && to != owner() && !presale && from != address(this) && to != address(this)) {
            require(tradingOpen);
            if (from != presaleRouter && from != presaleAddress) {
                require(amount <= _maxTxAmount);
            }
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {//buys

                if (block.timestamp <= _firstBlock.add(_botBlocks) && from != presaleRouter && from != presaleAddress) {
                    bots[to] = true;
                }
                
                uint256 ethAmount = this.getTokenPriceETH(amount);
                
                require(ethAmount >= _minBuyETH, "you must buy at least min ETH worth of token");
                require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");
            }
            
            if (!inSwap && from != uniswapV2Pair) { //sells, transfers
                require(!bots[from] && !bots[to]);
                
                uint256 ethAmount = this.getTokenPriceETH(amount);
                
                require(ethAmount >= _minSellETH, "you must sell at least the min ETH worth of token");

                if (_ETHsellLimitEnabled) {
                    
                    require(ethAmount <= _maxSellAmountETH, 'you cannot sell more than the max ETH amount per transaction');

                }
                
                else if (_priceImpactSellLimitEnabled) {
                    
                    require(amount <= balanceOf(uniswapV2Pair).mul(_priceImpact).div(100)); // price impact limit

                }
                
                if(to != uniswapV2Pair) {
                    
                    require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");

                }

                uint256 contractTokenBalance = balanceOf(address(this));

                if (contractTokenBalance > 0) {

                    swapAndLiquify(contractTokenBalance);
                
                }
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
                    
            }
        }

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || presale ) {
            takeFee = false;
        }

        else if (bots[from] || bots[to]) {
            setBotFee();
            takeFee = true;
        }

        if (presale) {
            require(from == owner() || from == presaleRouter || from == presaleAddress);
        }
        
        _tokenTransfer(from, to, amount, takeFee);
        restoreAllFee();
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _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 swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 autoLPamount = _liquidityFee.mul(contractTokenBalance).div(_marketingFee.add(_trollFee).add(_cardsFee).add(_liquidityFee));

        // split the contract balance into halves
        uint256 half =  autoLPamount.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(otherHalf); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = ((address(this).balance.sub(initialBalance)).mul(half)).div(otherHalf);

        
        addLiquidity(half, newBalance);
    }

    function sendETHToFee(uint256 amount) private {
        _trollAddress.transfer(amount.mul(_trollPercent).div(1000));
        _cards.transfer(amount.mul(_cardsPercent).div(1000));
        _marketingAddress.transfer(amount.mul(_marketingPercent).div(1000));
    }

    function openTrading(uint256 botBlocks) private {
        _firstBlock = block.timestamp;
        _botBlocks = botBlocks;
        tradingOpen = true;
    }

    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance > 0) {
            swapTokensForEth(contractBalance);
        }
    }

    function manualSend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee(contractETHBalance);
        }
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee) { 
                removeAllFee();
        }
        _transferStandard(sender, recipient, amount);
        restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 amount) private {
        FeeBreakdown memory fees;
        fees.tMarketing = amount.mul(_marketingFee).div(1000);
        fees.tLiquidity = amount.mul(_liquidityFee).div(1000);
        fees.tTroll = amount.mul(_trollFee).div(1000);
        fees.tCards = amount.mul(_cardsFee).div(1000);
        fees.tBurn = amount.mul(_burnFee).div(1000);
        
        fees.tAmount = amount.sub(fees.tMarketing).sub(fees.tLiquidity).sub(fees.tTroll).sub(fees.tCards).sub(fees.tBurn);
        
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(fees.tAmount);
        _balances[address(this)] = _balances[address(this)].add(fees.tMarketing.add(fees.tLiquidity).add(fees.tTroll).add(fees.tCards));
        _balances[_burnAddress] = _balances[_burnAddress].add(fees.tBurn);
        
        emit Transfer(sender, recipient, fees.tAmount);
    }
    
    receive() external payable {}

    function excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = false;
    }
    
    function removeBot(address account) external onlyOwner() {
        bots[account] = false;
    }

    function addBot(address account) external onlyOwner() {
        bots[account] = true;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > _tTotal.div(10000), "Amount must be greater than 0.01% of supply");
        require(maxTxAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxTxAmount = maxTxAmount;
        emit MaxTxAmountUpdated(_maxTxAmount);
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        require(maxWalletAmount > _tTotal.div(200), "Amount must be greater than 0.5% of supply");
        require(maxWalletAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxWalletAmount = maxWalletAmount;
    }

    function setTaxes(uint256 marketingFee, uint256 liquidityFee, uint256 trollFee, uint256 cardsFee, uint256 burnFee) external onlyOwner() {
        uint256 totalFee = marketingFee.add(liquidityFee).add(trollFee).add(cardsFee).add(burnFee);
        require(totalFee.div(10) < 50, "Sum of fees must be less than 50");

        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        _trollFee = trollFee;
        _cardsFee = cardsFee;
        _burnFee = burnFee;
        
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        _previousTrollFee = _trollFee;
        _previousCardsFee = _cardsFee;
        _previousBurnFee = _burnFee;
        
        uint256 totalETHfees = _marketingFee.add(_trollFee).add(_cardsFee);
        
        _marketingPercent = (_marketingFee.mul(1000)).div(totalETHfees);
        _trollPercent = (_trollFee.mul(1000)).div(totalETHfees);
        _cardsPercent = (_cardsFee.mul(1000)).div(totalETHfees);
        
        emit FeesUpdated(_marketingFee, _liquidityFee, _trollFee, _cardsFee, _burnFee);
        
    }

    function setPercents(uint256 marketingPercent, uint256 trollPercent, uint256 cardsPercent) external onlyOwner() {
        _marketingPercent = marketingPercent;
        _trollPercent = trollPercent;
        _cardsPercent = cardsPercent;

        emit PercentsUpdated(_marketingPercent, _trollPercent, _cardsPercent);
    }

    function setPriceImpact(uint256 priceImpact) external onlyOwner() {
        require(priceImpact <= 100, "max price impact must be less than or equal to 100");
        require(priceImpact > 0, "cant prevent sells, choose value greater than 0");
        _priceImpact = priceImpact;
        emit PriceImpactUpdated(_priceImpact);
    }

    function endPresale(uint256 botBlocks) external onlyOwner() {
        require(presale == true, "presale already ended");
        presale = false;
        openTrading(botBlocks);
        emit EndedPresale(presale);
    }

    function updatePairSwapped(bool swapped) external onlyOwner() {
        pairSwapped = swapped;
    }
    
    function updateMinBuySellETH(uint256 minBuyETH, uint256 minSellETH) external onlyOwner() {
        require(minBuyETH <= 1e7, "cant make the limit higher than 0.1 ETH");
        require(minSellETH <= 1e7, "cant make the limit higher than 0.1 ETH");
        _minBuyETH = minBuyETH;
        _minSellETH = minSellETH;
    }
    
    function updateMaxSellAmountETH(uint256 maxSellETH) external onlyOwner() {
        require(maxSellETH >= 1e9, "cant make the limit lower than 1 ETH");
        _maxSellAmountETH = maxSellETH;
    }
    
    function updateCards(address payable cards) external onlyOwner() {
        _cards = cards;
    }
    
    function updateMarketingAddress(address payable marketingAddress) external onlyOwner() {
        _marketingAddress = marketingAddress;
    }
    
    function updateTrollAddress(address payable trollAddress) external onlyOwner() {
        _trollAddress = trollAddress;
    }
    
    function enableETHsellLimit() external onlyOwner() {
        require(_ETHsellLimitEnabled == false, "already enabled");
        _ETHsellLimitEnabled = true;
        _priceImpactSellLimitEnabled = false;
    }
    
    function disableETHsellLimit() external onlyOwner() {
        require(_ETHsellLimitEnabled == true, "already disabled");
        _ETHsellLimitEnabled = false;
    }
    
    function enablePriceImpactSellLimit() external onlyOwner() {
        require(_priceImpactSellLimitEnabled == false, "already enabled");
        _priceImpactSellLimitEnabled = true;
        _ETHsellLimitEnabled = false;
    }
    
    function disablePriceImpactSellLimit() external onlyOwner() {
        require(_priceImpactSellLimitEnabled == true, "already disabled");
        _priceImpactSellLimitEnabled = false;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"cards","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":false,"internalType":"bool","name":"presale","type":"bool"}],"name":"EndedPresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_trollFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_cardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"_marketingPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_trollPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_cardsPercent","type":"uint256"}],"name":"PercentsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_priceImpact","type":"uint256"}],"name":"PriceImpactUpdated","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":"_ETHsellLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_priceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_priceImpactSellLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_trollFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableETHsellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disablePriceImpactSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableETHsellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePriceImpactSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenPriceETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingPercent","type":"uint256"},{"internalType":"uint256","name":"trollPercent","type":"uint256"},{"internalType":"uint256","name":"cardsPercent","type":"uint256"}],"name":"setPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"name":"setPriceImpact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"trollFee","type":"uint256"},{"internalType":"uint256","name":"cardsFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"cards","type":"address"}],"name":"updateCards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellETH","type":"uint256"}],"name":"updateMaxSellAmountETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuyETH","type":"uint256"},{"internalType":"uint256","name":"minSellETH","type":"uint256"}],"name":"updateMinBuySellETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapped","type":"bool"}],"name":"updatePairSwapped","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"trollAddress","type":"address"}],"name":"updateTrollAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600260055564012a05f2006009556000600a818155600b8290556028600c819055600d819055600e819055600f5560108190556011819055601281905560135560148190556015556102ee601655607d6017819055601855601a80546001600160a01b031990811673e85ec5e9b863eecd8efe12b77eca2e2cc8fd115517909155601b8054909116732008fbc22476fe372a8a449a832cea4e3b517b1c1790556022805465ffffffffffff191662010000179055348015620000c557600080fd5b5060405162003c1338038062003c13833981016040819052620000e891620005cd565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915562000167308267340aad21b3b7000062000414565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cc9190620005cd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002409190620005cd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b49190620005cd565b602080546001600160a01b0319166001600160a01b03928316908117909155601f5460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b3906044016020604051808303816000875af11580156200031c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003429190620005f8565b5067340aad21b3b7000060218190555062000375600167340aad21b3b700006200054060201b62001b481790919060201c565b6008556064600555601c5433600081815260026020908152604080832067340aad21b3b700009081905583546001600160a01b039081168552600484528285208054600160ff19918216811790925530875284872080549091169091179055915190815294169550919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000697565b6001600160a01b0383166200047c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004df5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000473565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006200058a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200059160201b60201c565b9392505050565b60008183620005b55760405162461bcd60e51b81526004016200047391906200061c565b506000620005c4848662000674565b95945050505050565b600060208284031215620005e057600080fd5b81516001600160a01b03811681146200058a57600080fd5b6000602082840312156200060b57600080fd5b815180151581146200058a57600080fd5b600060208083528351808285015260005b818110156200064b578581018301518582016040015282016200062d565b818111156200065e576000604083870101525b50601f01601f1916929092016040019392505050565b6000826200069257634e487b7160e01b600052601260045260246000fd5b500490565b61356c80620006a76000396000f3fe6080604052600436106102765760003560e01c80636bc87c3a1161014f578063b1ec2164116100c1578063ec28438a1161007a578063ec28438a146107a6578063efe8a45e146107c6578063f2fde38b146107e6578063f429389014610806578063f8ace3f41461081b578063ffecf5161461083b57600080fd5b8063b1ec2164146106df578063bfa31ff9146106ff578063c0b0fda214610715578063cdda3e541461072b578063dd62ed3e14610740578063ea2f0b371461078657600080fd5b806391ff8d481161011357806391ff8d481461061a57806395d89b41146106305780639edf96cb1461065f5780639f92aa9c1461067f578063a9059cbb1461069f578063abda6292146106bf57600080fd5b80636bc87c3a146105855780636c0a24eb1461059b57806370a08231146105b157806385c7b67b146105e75780638da5cb5b146105fc57600080fd5b80633bbac579116101e857806359175c76116101ac57806359175c76146104cd5780635e3d3007146104ee5780635fcefa42146105105780635fecd9261461053057806367243482146105505780636ac56ced1461057057600080fd5b80633bbac57914610407578063437823ec1461044057806349bd5a5e1461046057806351bc3c851461049857806356209b29146104ad57600080fd5b80632369bf831161023a5780632369bf831461034b57806323b872dd1461036b57806327a14fc21461038b5780632b929aa8146103ab578063313ce567146103cb57806334596c16146103e757600080fd5b80630286ac171461028257806306fdde0314610299578063095ea7b3146102e057806318160ddd1461031057806322976e0d1461033557600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029761085b565b005b3480156102a557600080fd5b5060408051808201909152600c81526b2a3937b63639902a37b5b2b760a11b60208201525b6040516102d79190612d44565b60405180910390f35b3480156102ec57600080fd5b506103006102fb366004612dae565b6108f1565b60405190151581526020016102d7565b34801561031c57600080fd5b5067340aad21b3b700005b6040519081526020016102d7565b34801561034157600080fd5b50610327600e5481565b34801561035757600080fd5b50610297610366366004612dda565b610908565b34801561037757600080fd5b50610300610386366004612df7565b610954565b34801561039757600080fd5b506102976103a6366004612e38565b6109bd565b3480156103b757600080fd5b506102976103c6366004612e38565b610a88565b3480156103d757600080fd5b50604051600981526020016102d7565b3480156103f357600080fd5b50610297610402366004612e51565b610bc2565b34801561041357600080fd5b50610300610422366004612dda565b6001600160a01b031660009081526019602052604090205460ff1690565b34801561044c57600080fd5b5061029761045b366004612dda565b610c0a565b34801561046c57600080fd5b50602054610480906001600160a01b031681565b6040516001600160a01b0390911681526020016102d7565b3480156104a457600080fd5b50610297610c58565b3480156104b957600080fd5b506102976104c8366004612dda565b610ca4565b3480156104d957600080fd5b5060225461030090600160281b900460ff1681565b3480156104fa57600080fd5b5060225461030090640100000000900460ff1681565b34801561051c57600080fd5b5061029761052b366004612e73565b610cf0565b34801561053c57600080fd5b5061029761054b366004612dda565b610e8b565b34801561055c57600080fd5b5061029761056b366004612f84565b610ed6565b34801561057c57600080fd5b50610297610fdd565b34801561059157600080fd5b50610327600c5481565b3480156105a757600080fd5b5061032760085481565b3480156105bd57600080fd5b506103276105cc366004612dda565b6001600160a01b031660009081526002602052604090205490565b3480156105f357600080fd5b5061029761106c565b34801561060857600080fd5b506000546001600160a01b0316610480565b34801561062657600080fd5b5061032760105481565b34801561063c57600080fd5b5060408051808201909152600681526554524f4c4c5360d01b60208201526102ca565b34801561066b57600080fd5b5061029761067a366004612e38565b6110f8565b34801561068b57600080fd5b5061032761069a366004612e38565b6111cd565b3480156106ab57600080fd5b506103006106ba366004612dae565b611672565b3480156106cb57600080fd5b506102976106da366004612e38565b61167f565b3480156106eb57600080fd5b506102976106fa366004613046565b61170e565b34801561070b57600080fd5b5061032760055481565b34801561072157600080fd5b5061032760145481565b34801561073757600080fd5b50610297611789565b34801561074c57600080fd5b5061032761075b366004613068565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561079257600080fd5b506102976107a1366004612dda565b611815565b3480156107b257600080fd5b506102976107c1366004612e38565b611860565b3480156107d257600080fd5b506102976107e13660046130a1565b61195d565b3480156107f257600080fd5b50610297610801366004612dda565b6119dc565b34801561081257600080fd5b50610297611a74565b34801561082757600080fd5b50610297610836366004612dda565b611aae565b34801561084757600080fd5b50610297610856366004612dda565b611afa565b6000546001600160a01b0316331461088e5760405162461bcd60e51b8152600401610885906130cd565b60405180910390fd5b602254600160281b900460ff16156108da5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610885565b6022805465ffff000000001916600160281b179055565b60006108fe338484611b91565b5060015b92915050565b6000546001600160a01b031633146109325760405162461bcd60e51b8152600401610885906130cd565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610961848484611cb5565b6109b384336109ae8560405180606001604052806028815260200161350f602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061248c565b611b91565b5060019392505050565b6000546001600160a01b031633146109e75760405162461bcd60e51b8152600401610885906130cd565b6109fa67340aad21b3b7000060c8611b48565b8111610a5b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e3525604482015269206f6620737570706c7960b01b6064820152608401610885565b67340aad21b3b70000811115610a835760405162461bcd60e51b815260040161088590613102565b600855565b6000546001600160a01b03163314610ab25760405162461bcd60e51b8152600401610885906130cd565b6064811115610b1e5760405162461bcd60e51b815260206004820152603260248201527f6d617820707269636520696d70616374206d757374206265206c6573732074686044820152710616e206f7220657175616c20746f203130360741b6064820152608401610885565b60008111610b865760405162461bcd60e51b815260206004820152602f60248201527f63616e742070726576656e742073656c6c732c2063686f6f73652076616c756560448201526e02067726561746572207468616e203608c1b6064820152608401610885565b60058190556040518181527f585981c0db15e25002a67c38e62f983f189bb219fae23eb213566640fbae5e3c906020015b60405180910390a150565b6000546001600160a01b03163314610bec5760405162461bcd60e51b8152600401610885906130cd565b6022805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610c825760405162461bcd60e51b8152600401610885906130cd565b306000908152600260205260409020548015610ca157610ca1816124c6565b50565b6000546001600160a01b03163314610cce5760405162461bcd60e51b8152600401610885906130cd565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d1a5760405162461bcd60e51b8152600401610885906130cd565b6000610d3482610d2e858188818c8c61263a565b9061263a565b90506032610d4382600a611b48565b10610d905760405162461bcd60e51b815260206004820181905260248201527f53756d206f662066656573206d757374206265206c657373207468616e2035306044820152606401610885565b600e869055600c859055601084905560128390556014829055600f869055600d8590556011849055601383905560158290556000610dd284610d2e898861263a565b9050610df581610def6103e8600e5461269990919063ffffffff16565b90611b48565b601655601054610e0d908290610def906103e8612699565b601755601254610e25908290610def906103e8612699565b601855600e54600c546010546012546014546040805195865260208601949094528484019290925260608401526080830152517f96b67df2c4648b38ada47da86f80d0a256df93150752a7b365ca487cab934e649181900360a00190a150505050505050565b6000546001600160a01b03163314610eb55760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b03166000908152601960205260409020805460ff19169055565b6000546001600160a01b03163314610f005760405162461bcd60e51b8152600401610885906130cd565b60c8825110610f705760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610885565b60005b8251811015610fd8576000838281518110610f9057610f90613152565b602002602001015190506000838381518110610fae57610fae613152565b60200260200101519050610fc3338383611cb5565b50508080610fd09061317e565b915050610f73565b505050565b6000546001600160a01b031633146110075760405162461bcd60e51b8152600401610885906130cd565b602254640100000000900460ff16156110545760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610885565b6022805465ffff000000001916640100000000179055565b6000546001600160a01b031633146110965760405162461bcd60e51b8152600401610885906130cd565b602254600160281b900460ff1615156001146110e75760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610885565b6022805465ff000000000019169055565b6000546001600160a01b031633146111225760405162461bcd60e51b8152600401610885906130cd565b60225462010000900460ff1615156001146111775760405162461bcd60e51b81526020600482015260156024820152741c1c995cd85b1948185b1c9958591e48195b991959605a1b6044820152606401610885565b6022805442600655600783905562ff00ff191660011790556022546040516201000090910460ff16151581527fbad30b8287730cfd8b6df18f878abbd745dc20365bfec848056cad8e6c17b91b90602001610bb7565b6020805460408051630dfe168160e01b8152905160009384936001600160a01b031692630dfe168192600480830193928290030181865afa158015611216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123a9190613199565b602080546040805163d21220a760e01b815290519394506000936001600160a01b039092169263d21220a7926004808401938290030181865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190613199565b9050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d91906131b6565b60ff1661135c5760405162461bcd60e51b815260206004820152601c60248201527f4552523a20646563696d616c732063616e6e6f74206265207a65726f000000006044820152606401610885565b600080602060009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d691906131f5565b5060225491935091506301000000900460ff161561154f57602080546040805163d21220a760e01b815290516001600160a01b039092169263d21220a7926004808401938290030181865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190613199565b9350602060009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d09190613199565b9250602060009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611525573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154991906131f5565b50925090505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b391906131b6565b6115be90600a613329565b6115d1906001600160701b038416613338565b9050846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163591906131b6565b61164090600a613329565b611653906001600160701b038516613338565b61165d8289613338565b6116679190613357565b979650505050505050565b60006108fe338484611cb5565b6000546001600160a01b031633146116a95760405162461bcd60e51b8152600401610885906130cd565b633b9aca008110156117095760405162461bcd60e51b8152602060048201526024808201527f63616e74206d616b6520746865206c696d6974206c6f776572207468616e20316044820152630408aa8960e31b6064820152608401610885565b600955565b6000546001600160a01b031633146117385760405162461bcd60e51b8152600401610885906130cd565b6298968082111561175b5760405162461bcd60e51b815260040161088590613379565b6298968081111561177e5760405162461bcd60e51b815260040161088590613379565b600a91909155600b55565b6000546001600160a01b031633146117b35760405162461bcd60e51b8152600401610885906130cd565b602254640100000000900460ff1615156001146118055760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610885565b6022805464ff0000000019169055565b6000546001600160a01b0316331461183f5760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461188a5760405162461bcd60e51b8152600401610885906130cd565b61189e67340aad21b3b70000612710611b48565b81116119005760405162461bcd60e51b815260206004820152602b60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e303160448201526a25206f6620737570706c7960a81b6064820152608401610885565b67340aad21b3b700008111156119285760405162461bcd60e51b815260040161088590613102565b60218190556040518181527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf90602001610bb7565b6000546001600160a01b031633146119875760405162461bcd60e51b8152600401610885906130cd565b60168390556017829055601881905560408051848152602081018490529081018290527f27224e2696b8b5ac8d85f4e227d20f3116a7d3b066e62b3d355dfeebd302231a9060600160405180910390a1505050565b6000546001600160a01b03163314611a065760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b038116611a6b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610885565b610ca181612718565b6000546001600160a01b03163314611a9e5760405162461bcd60e51b8152600401610885906130cd565b478015610ca157610ca181612768565b6000546001600160a01b03163314611ad85760405162461bcd60e51b8152600401610885906130cd565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b245760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b03166000908152601960205260409020805460ff19166001179055565b6000611b8a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612861565b9392505050565b6001600160a01b038316611bf35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610885565b6001600160a01b038216611c545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610885565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d195760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610885565b6001600160a01b038216611d7b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610885565b60008111611ddd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610885565b6001611df16000546001600160a01b031690565b6001600160a01b0316846001600160a01b031614158015611e2057506000546001600160a01b03848116911614155b8015611e35575060225462010000900460ff16155b8015611e4a57506001600160a01b0384163014155b8015611e5f57506001600160a01b0383163014155b156123175760225460ff16611e7357600080fd5b601d546001600160a01b03858116911614801590611e9f5750601e546001600160a01b03858116911614155b15611eb357602154821115611eb357600080fd5b6020546001600160a01b038581169116148015611ede5750601f546001600160a01b03848116911614155b1561206457600754600654611ef29161263a565b4211158015611f0f5750601d546001600160a01b03858116911614155b8015611f295750601e546001600160a01b03858116911614155b15611f52576001600160a01b0383166000908152601960205260409020805460ff191660011790555b6040516327e4aaa760e21b8152600481018390526000903090639f92aa9c90602401602060405180830381865afa158015611f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb591906133c0565b9050600a5481101561201e5760405162461bcd60e51b815260206004820152602c60248201527f796f75206d75737420627579206174206c65617374206d696e2045544820776f60448201526b393a341037b3103a37b5b2b760a11b6064820152608401610885565b60085461204484610d2e876001600160a01b031660009081526002602052604090205490565b11156120625760405162461bcd60e51b8152600401610885906133d9565b505b602254610100900460ff1615801561208a57506020546001600160a01b03858116911614155b15612317576001600160a01b03841660009081526019602052604090205460ff161580156120d157506001600160a01b03831660009081526019602052604090205460ff16155b6120da57600080fd5b6040516327e4aaa760e21b8152600481018390526000903090639f92aa9c90602401602060405180830381865afa158015612119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213d91906133c0565b9050600b548110156121ab5760405162461bcd60e51b815260206004820152603160248201527f796f75206d7573742073656c6c206174206c6561737420746865206d696e20456044820152702a24103bb7b93a341037b3103a37b5b2b760791b6064820152608401610885565b602254600160281b900460ff161561223a576009548111156122355760405162461bcd60e51b815260206004820152603c60248201527f796f752063616e6e6f742073656c6c206d6f7265207468616e20746865206d6160448201527f782045544820616d6f756e7420706572207472616e73616374696f6e000000006064820152608401610885565b61228b565b602254640100000000900460ff161561228b57600554602080546001600160a01b031660009081526002909152604090205461227f91606491610def91905b90612699565b83111561228b57600080fd5b6020546001600160a01b038581169116146122e4576008546122c684610d2e876001600160a01b031660009081526002602052604090205490565b11156122e45760405162461bcd60e51b8152600401610885906133d9565b306000908152600260205260409020548015612303576123038161288f565b4780156123135761231347612768565b5050505b6001600160a01b03841660009081526004602052604090205460ff168061235657506001600160a01b03831660009081526004602052604090205460ff165b80612369575060225462010000900460ff165b15612376575060006123fc565b6001600160a01b03841660009081526019602052604090205460ff16806123b557506001600160a01b03831660009081526019602052604090205460ff165b156123fc576123f8600e8054600f55600c8054600d5560108054601155601280546013556014805460155561012c94859055939092558190556000908190559055565b5060015b60225462010000900460ff1615612457576000546001600160a01b03858116911614806124365750601d546001600160a01b038581169116145b8061244e5750601e546001600160a01b038581169116145b61245757600080fd5b61246384848484612919565b612486600f54600e55600d54600c55601154601055601354601255601554601455565b50505050565b600081848411156124b05760405162461bcd60e51b81526004016108859190612d44565b5060006124bd8486613440565b95945050505050565b6022805461ff001916610100179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061250a5761250a613152565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125879190613199565b8160018151811061259a5761259a613152565b6001600160a01b039283166020918202929092010152601f546125c09130911684611b91565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125f9908590600090869030904290600401613457565b600060405180830381600087803b15801561261357600080fd5b505af1158015612627573d6000803e3d6000fd5b50506022805461ff001916905550505050565b60008061264783856134c8565b905083811015611b8a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610885565b6000826126a857506000610902565b60006126b48385613338565b9050826126c18583613357565b14611b8a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610885565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601b546017546001600160a01b03909116906108fc90612791906103e890610def908690612699565b6040518115909202916000818181858888f193505050501580156127b9573d6000803e3d6000fd5b50601c546018546001600160a01b03909116906108fc906127e3906103e890610def908690612699565b6040518115909202916000818181858888f1935050505015801561280b573d6000803e3d6000fd5b50601a546016546001600160a01b03909116906108fc90612835906103e890610def908690612699565b6040518115909202916000818181858888f1935050505015801561285d573d6000803e3d6000fd5b5050565b600081836128825760405162461bcd60e51b81526004016108859190612d44565b5060006124bd8486613357565b6022805461ff001916610100179055600c54601254601054600e546000936128d0936128c3939192610d2e9283919061263a565b600c54610def9085612699565b905060006128df826002611b48565b905060006128ed8483612931565b9050476128f9826124c6565b600061290d83610def866122794787612931565b90506126278482612973565b8061292657612926612a48565b612463848484612aba565b6000611b8a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061248c565b601f5461298b9030906001600160a01b031684611b91565b601f546001600160a01b031663f305d7198230856000806129b46000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612a1c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a4191906134e0565b5050505050565b600e54158015612a585750600c54155b8015612a645750601054155b8015612a705750601254155b8015612a7c5750601454155b15612a8357565b600e8054600f55600c8054600d55601080546011556012805460135560148054601555600094859055928490559083905582905555565b612af36040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612b0e6103e8610def600e548561269990919063ffffffff16565b6020820152600c54612b29906103e890610def908590612699565b8152601054612b41906103e890610def908590612699565b6040820152601254612b5c906103e890610def908590612699565b6060820152601454612b77906103e890610def908590612699565b608082018190526060820151604083015183516020850151612bae9493612ba8939092849283919082908b90612931565b90612931565b60a08201526001600160a01b038416600090815260026020526040902054612bd69083612931565b6001600160a01b038086166000908152600260205260408082209390935560a084015191861681529190912054612c0c9161263a565b60026000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550612c79612c638260600151610d2e8460400151610d2e8660000151876020015161263a90919063ffffffff16565b306000908152600260205260409020549061263a565b30600090815260026020526040812091909155608082015161dead9091527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612cc29161263a565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5560a08101516040516001600160a01b0385811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612d369190815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015612d7157858101830151858201604001528201612d55565b81811115612d83576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ca157600080fd5b60008060408385031215612dc157600080fd5b8235612dcc81612d99565b946020939093013593505050565b600060208284031215612dec57600080fd5b8135611b8a81612d99565b600080600060608486031215612e0c57600080fd5b8335612e1781612d99565b92506020840135612e2781612d99565b929592945050506040919091013590565b600060208284031215612e4a57600080fd5b5035919050565b600060208284031215612e6357600080fd5b81358015158114611b8a57600080fd5b600080600080600060a08688031215612e8b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612eed57612eed612eae565b604052919050565b600067ffffffffffffffff821115612f0f57612f0f612eae565b5060051b60200190565b600082601f830112612f2a57600080fd5b81356020612f3f612f3a83612ef5565b612ec4565b82815260059290921b84018101918181019086841115612f5e57600080fd5b8286015b84811015612f795780358352918301918301612f62565b509695505050505050565b60008060408385031215612f9757600080fd5b823567ffffffffffffffff80821115612faf57600080fd5b818501915085601f830112612fc357600080fd5b81356020612fd3612f3a83612ef5565b82815260059290921b84018101918181019089841115612ff257600080fd5b948201945b8386101561301957853561300a81612d99565b82529482019490820190612ff7565b9650508601359250508082111561302f57600080fd5b5061303c85828601612f19565b9150509250929050565b6000806040838503121561305957600080fd5b50508035926020909101359150565b6000806040838503121561307b57600080fd5b823561308681612d99565b9150602083013561309681612d99565b809150509250929050565b6000806000606084860312156130b657600080fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f416d6f756e74206d757374206265206c657373207468616e206f72206571756160408201526f6c20746f20746f74616c537570706c7960801b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561319257613192613168565b5060010190565b6000602082840312156131ab57600080fd5b8151611b8a81612d99565b6000602082840312156131c857600080fd5b815160ff81168114611b8a57600080fd5b80516001600160701b03811681146131f057600080fd5b919050565b60008060006060848603121561320a57600080fd5b613213846131d9565b9250613221602085016131d9565b9150604084015163ffffffff8116811461323a57600080fd5b809150509250925092565b600181815b8085111561328057816000190482111561326657613266613168565b8085161561327357918102915b93841c939080029061324a565b509250929050565b60008261329757506001610902565b816132a457506000610902565b81600181146132ba57600281146132c4576132e0565b6001915050610902565b60ff8411156132d5576132d5613168565b50506001821b610902565b5060208310610133831016604e8410600b8410161715613303575081810a610902565b61330d8383613245565b806000190482111561332157613321613168565b029392505050565b6000611b8a60ff841683613288565b600081600019048311821515161561335257613352613168565b500290565b60008261337457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526027908201527f63616e74206d616b6520746865206c696d697420686967686572207468616e206040820152660605c62408aa8960cb1b606082015260800190565b6000602082840312156133d257600080fd5b5051919050565b60208082526041908201527f77616c6c65742062616c616e6365206166746572207472616e73666572206d7560408201527f7374206265206c657373207468616e206d61782077616c6c657420616d6f756e6060820152601d60fa1b608082015260a00190565b60008282101561345257613452613168565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134a75784516001600160a01b031683529383019391830191600101613482565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156134db576134db613168565b500190565b6000806000606084860312156134f557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122016e7a5d32834e3ec1476f0e1ff0c1397ad0b4703df208310e213b949e5b52b2364736f6c634300080a0033000000000000000000000000b03fc7872f63d6b15cbd661234cc2946def83792

Deployed Bytecode

0x6080604052600436106102765760003560e01c80636bc87c3a1161014f578063b1ec2164116100c1578063ec28438a1161007a578063ec28438a146107a6578063efe8a45e146107c6578063f2fde38b146107e6578063f429389014610806578063f8ace3f41461081b578063ffecf5161461083b57600080fd5b8063b1ec2164146106df578063bfa31ff9146106ff578063c0b0fda214610715578063cdda3e541461072b578063dd62ed3e14610740578063ea2f0b371461078657600080fd5b806391ff8d481161011357806391ff8d481461061a57806395d89b41146106305780639edf96cb1461065f5780639f92aa9c1461067f578063a9059cbb1461069f578063abda6292146106bf57600080fd5b80636bc87c3a146105855780636c0a24eb1461059b57806370a08231146105b157806385c7b67b146105e75780638da5cb5b146105fc57600080fd5b80633bbac579116101e857806359175c76116101ac57806359175c76146104cd5780635e3d3007146104ee5780635fcefa42146105105780635fecd9261461053057806367243482146105505780636ac56ced1461057057600080fd5b80633bbac57914610407578063437823ec1461044057806349bd5a5e1461046057806351bc3c851461049857806356209b29146104ad57600080fd5b80632369bf831161023a5780632369bf831461034b57806323b872dd1461036b57806327a14fc21461038b5780632b929aa8146103ab578063313ce567146103cb57806334596c16146103e757600080fd5b80630286ac171461028257806306fdde0314610299578063095ea7b3146102e057806318160ddd1461031057806322976e0d1461033557600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029761085b565b005b3480156102a557600080fd5b5060408051808201909152600c81526b2a3937b63639902a37b5b2b760a11b60208201525b6040516102d79190612d44565b60405180910390f35b3480156102ec57600080fd5b506103006102fb366004612dae565b6108f1565b60405190151581526020016102d7565b34801561031c57600080fd5b5067340aad21b3b700005b6040519081526020016102d7565b34801561034157600080fd5b50610327600e5481565b34801561035757600080fd5b50610297610366366004612dda565b610908565b34801561037757600080fd5b50610300610386366004612df7565b610954565b34801561039757600080fd5b506102976103a6366004612e38565b6109bd565b3480156103b757600080fd5b506102976103c6366004612e38565b610a88565b3480156103d757600080fd5b50604051600981526020016102d7565b3480156103f357600080fd5b50610297610402366004612e51565b610bc2565b34801561041357600080fd5b50610300610422366004612dda565b6001600160a01b031660009081526019602052604090205460ff1690565b34801561044c57600080fd5b5061029761045b366004612dda565b610c0a565b34801561046c57600080fd5b50602054610480906001600160a01b031681565b6040516001600160a01b0390911681526020016102d7565b3480156104a457600080fd5b50610297610c58565b3480156104b957600080fd5b506102976104c8366004612dda565b610ca4565b3480156104d957600080fd5b5060225461030090600160281b900460ff1681565b3480156104fa57600080fd5b5060225461030090640100000000900460ff1681565b34801561051c57600080fd5b5061029761052b366004612e73565b610cf0565b34801561053c57600080fd5b5061029761054b366004612dda565b610e8b565b34801561055c57600080fd5b5061029761056b366004612f84565b610ed6565b34801561057c57600080fd5b50610297610fdd565b34801561059157600080fd5b50610327600c5481565b3480156105a757600080fd5b5061032760085481565b3480156105bd57600080fd5b506103276105cc366004612dda565b6001600160a01b031660009081526002602052604090205490565b3480156105f357600080fd5b5061029761106c565b34801561060857600080fd5b506000546001600160a01b0316610480565b34801561062657600080fd5b5061032760105481565b34801561063c57600080fd5b5060408051808201909152600681526554524f4c4c5360d01b60208201526102ca565b34801561066b57600080fd5b5061029761067a366004612e38565b6110f8565b34801561068b57600080fd5b5061032761069a366004612e38565b6111cd565b3480156106ab57600080fd5b506103006106ba366004612dae565b611672565b3480156106cb57600080fd5b506102976106da366004612e38565b61167f565b3480156106eb57600080fd5b506102976106fa366004613046565b61170e565b34801561070b57600080fd5b5061032760055481565b34801561072157600080fd5b5061032760145481565b34801561073757600080fd5b50610297611789565b34801561074c57600080fd5b5061032761075b366004613068565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561079257600080fd5b506102976107a1366004612dda565b611815565b3480156107b257600080fd5b506102976107c1366004612e38565b611860565b3480156107d257600080fd5b506102976107e13660046130a1565b61195d565b3480156107f257600080fd5b50610297610801366004612dda565b6119dc565b34801561081257600080fd5b50610297611a74565b34801561082757600080fd5b50610297610836366004612dda565b611aae565b34801561084757600080fd5b50610297610856366004612dda565b611afa565b6000546001600160a01b0316331461088e5760405162461bcd60e51b8152600401610885906130cd565b60405180910390fd5b602254600160281b900460ff16156108da5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610885565b6022805465ffff000000001916600160281b179055565b60006108fe338484611b91565b5060015b92915050565b6000546001600160a01b031633146109325760405162461bcd60e51b8152600401610885906130cd565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610961848484611cb5565b6109b384336109ae8560405180606001604052806028815260200161350f602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061248c565b611b91565b5060019392505050565b6000546001600160a01b031633146109e75760405162461bcd60e51b8152600401610885906130cd565b6109fa67340aad21b3b7000060c8611b48565b8111610a5b5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e3525604482015269206f6620737570706c7960b01b6064820152608401610885565b67340aad21b3b70000811115610a835760405162461bcd60e51b815260040161088590613102565b600855565b6000546001600160a01b03163314610ab25760405162461bcd60e51b8152600401610885906130cd565b6064811115610b1e5760405162461bcd60e51b815260206004820152603260248201527f6d617820707269636520696d70616374206d757374206265206c6573732074686044820152710616e206f7220657175616c20746f203130360741b6064820152608401610885565b60008111610b865760405162461bcd60e51b815260206004820152602f60248201527f63616e742070726576656e742073656c6c732c2063686f6f73652076616c756560448201526e02067726561746572207468616e203608c1b6064820152608401610885565b60058190556040518181527f585981c0db15e25002a67c38e62f983f189bb219fae23eb213566640fbae5e3c906020015b60405180910390a150565b6000546001600160a01b03163314610bec5760405162461bcd60e51b8152600401610885906130cd565b6022805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b03163314610c345760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610c825760405162461bcd60e51b8152600401610885906130cd565b306000908152600260205260409020548015610ca157610ca1816124c6565b50565b6000546001600160a01b03163314610cce5760405162461bcd60e51b8152600401610885906130cd565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d1a5760405162461bcd60e51b8152600401610885906130cd565b6000610d3482610d2e858188818c8c61263a565b9061263a565b90506032610d4382600a611b48565b10610d905760405162461bcd60e51b815260206004820181905260248201527f53756d206f662066656573206d757374206265206c657373207468616e2035306044820152606401610885565b600e869055600c859055601084905560128390556014829055600f869055600d8590556011849055601383905560158290556000610dd284610d2e898861263a565b9050610df581610def6103e8600e5461269990919063ffffffff16565b90611b48565b601655601054610e0d908290610def906103e8612699565b601755601254610e25908290610def906103e8612699565b601855600e54600c546010546012546014546040805195865260208601949094528484019290925260608401526080830152517f96b67df2c4648b38ada47da86f80d0a256df93150752a7b365ca487cab934e649181900360a00190a150505050505050565b6000546001600160a01b03163314610eb55760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b03166000908152601960205260409020805460ff19169055565b6000546001600160a01b03163314610f005760405162461bcd60e51b8152600401610885906130cd565b60c8825110610f705760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610885565b60005b8251811015610fd8576000838281518110610f9057610f90613152565b602002602001015190506000838381518110610fae57610fae613152565b60200260200101519050610fc3338383611cb5565b50508080610fd09061317e565b915050610f73565b505050565b6000546001600160a01b031633146110075760405162461bcd60e51b8152600401610885906130cd565b602254640100000000900460ff16156110545760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610885565b6022805465ffff000000001916640100000000179055565b6000546001600160a01b031633146110965760405162461bcd60e51b8152600401610885906130cd565b602254600160281b900460ff1615156001146110e75760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610885565b6022805465ff000000000019169055565b6000546001600160a01b031633146111225760405162461bcd60e51b8152600401610885906130cd565b60225462010000900460ff1615156001146111775760405162461bcd60e51b81526020600482015260156024820152741c1c995cd85b1948185b1c9958591e48195b991959605a1b6044820152606401610885565b6022805442600655600783905562ff00ff191660011790556022546040516201000090910460ff16151581527fbad30b8287730cfd8b6df18f878abbd745dc20365bfec848056cad8e6c17b91b90602001610bb7565b6020805460408051630dfe168160e01b8152905160009384936001600160a01b031692630dfe168192600480830193928290030181865afa158015611216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123a9190613199565b602080546040805163d21220a760e01b815290519394506000936001600160a01b039092169263d21220a7926004808401938290030181865afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190613199565b9050816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130d91906131b6565b60ff1661135c5760405162461bcd60e51b815260206004820152601c60248201527f4552523a20646563696d616c732063616e6e6f74206265207a65726f000000006044820152606401610885565b600080602060009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d691906131f5565b5060225491935091506301000000900460ff161561154f57602080546040805163d21220a760e01b815290516001600160a01b039092169263d21220a7926004808401938290030181865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190613199565b9350602060009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d09190613199565b9250602060009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611525573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154991906131f5565b50925090505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b391906131b6565b6115be90600a613329565b6115d1906001600160701b038416613338565b9050846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163591906131b6565b61164090600a613329565b611653906001600160701b038516613338565b61165d8289613338565b6116679190613357565b979650505050505050565b60006108fe338484611cb5565b6000546001600160a01b031633146116a95760405162461bcd60e51b8152600401610885906130cd565b633b9aca008110156117095760405162461bcd60e51b8152602060048201526024808201527f63616e74206d616b6520746865206c696d6974206c6f776572207468616e20316044820152630408aa8960e31b6064820152608401610885565b600955565b6000546001600160a01b031633146117385760405162461bcd60e51b8152600401610885906130cd565b6298968082111561175b5760405162461bcd60e51b815260040161088590613379565b6298968081111561177e5760405162461bcd60e51b815260040161088590613379565b600a91909155600b55565b6000546001600160a01b031633146117b35760405162461bcd60e51b8152600401610885906130cd565b602254640100000000900460ff1615156001146118055760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610885565b6022805464ff0000000019169055565b6000546001600160a01b0316331461183f5760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b0316331461188a5760405162461bcd60e51b8152600401610885906130cd565b61189e67340aad21b3b70000612710611b48565b81116119005760405162461bcd60e51b815260206004820152602b60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e303160448201526a25206f6620737570706c7960a81b6064820152608401610885565b67340aad21b3b700008111156119285760405162461bcd60e51b815260040161088590613102565b60218190556040518181527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf90602001610bb7565b6000546001600160a01b031633146119875760405162461bcd60e51b8152600401610885906130cd565b60168390556017829055601881905560408051848152602081018490529081018290527f27224e2696b8b5ac8d85f4e227d20f3116a7d3b066e62b3d355dfeebd302231a9060600160405180910390a1505050565b6000546001600160a01b03163314611a065760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b038116611a6b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610885565b610ca181612718565b6000546001600160a01b03163314611a9e5760405162461bcd60e51b8152600401610885906130cd565b478015610ca157610ca181612768565b6000546001600160a01b03163314611ad85760405162461bcd60e51b8152600401610885906130cd565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b245760405162461bcd60e51b8152600401610885906130cd565b6001600160a01b03166000908152601960205260409020805460ff19166001179055565b6000611b8a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612861565b9392505050565b6001600160a01b038316611bf35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610885565b6001600160a01b038216611c545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610885565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d195760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610885565b6001600160a01b038216611d7b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610885565b60008111611ddd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610885565b6001611df16000546001600160a01b031690565b6001600160a01b0316846001600160a01b031614158015611e2057506000546001600160a01b03848116911614155b8015611e35575060225462010000900460ff16155b8015611e4a57506001600160a01b0384163014155b8015611e5f57506001600160a01b0383163014155b156123175760225460ff16611e7357600080fd5b601d546001600160a01b03858116911614801590611e9f5750601e546001600160a01b03858116911614155b15611eb357602154821115611eb357600080fd5b6020546001600160a01b038581169116148015611ede5750601f546001600160a01b03848116911614155b1561206457600754600654611ef29161263a565b4211158015611f0f5750601d546001600160a01b03858116911614155b8015611f295750601e546001600160a01b03858116911614155b15611f52576001600160a01b0383166000908152601960205260409020805460ff191660011790555b6040516327e4aaa760e21b8152600481018390526000903090639f92aa9c90602401602060405180830381865afa158015611f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb591906133c0565b9050600a5481101561201e5760405162461bcd60e51b815260206004820152602c60248201527f796f75206d75737420627579206174206c65617374206d696e2045544820776f60448201526b393a341037b3103a37b5b2b760a11b6064820152608401610885565b60085461204484610d2e876001600160a01b031660009081526002602052604090205490565b11156120625760405162461bcd60e51b8152600401610885906133d9565b505b602254610100900460ff1615801561208a57506020546001600160a01b03858116911614155b15612317576001600160a01b03841660009081526019602052604090205460ff161580156120d157506001600160a01b03831660009081526019602052604090205460ff16155b6120da57600080fd5b6040516327e4aaa760e21b8152600481018390526000903090639f92aa9c90602401602060405180830381865afa158015612119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213d91906133c0565b9050600b548110156121ab5760405162461bcd60e51b815260206004820152603160248201527f796f75206d7573742073656c6c206174206c6561737420746865206d696e20456044820152702a24103bb7b93a341037b3103a37b5b2b760791b6064820152608401610885565b602254600160281b900460ff161561223a576009548111156122355760405162461bcd60e51b815260206004820152603c60248201527f796f752063616e6e6f742073656c6c206d6f7265207468616e20746865206d6160448201527f782045544820616d6f756e7420706572207472616e73616374696f6e000000006064820152608401610885565b61228b565b602254640100000000900460ff161561228b57600554602080546001600160a01b031660009081526002909152604090205461227f91606491610def91905b90612699565b83111561228b57600080fd5b6020546001600160a01b038581169116146122e4576008546122c684610d2e876001600160a01b031660009081526002602052604090205490565b11156122e45760405162461bcd60e51b8152600401610885906133d9565b306000908152600260205260409020548015612303576123038161288f565b4780156123135761231347612768565b5050505b6001600160a01b03841660009081526004602052604090205460ff168061235657506001600160a01b03831660009081526004602052604090205460ff165b80612369575060225462010000900460ff165b15612376575060006123fc565b6001600160a01b03841660009081526019602052604090205460ff16806123b557506001600160a01b03831660009081526019602052604090205460ff165b156123fc576123f8600e8054600f55600c8054600d5560108054601155601280546013556014805460155561012c94859055939092558190556000908190559055565b5060015b60225462010000900460ff1615612457576000546001600160a01b03858116911614806124365750601d546001600160a01b038581169116145b8061244e5750601e546001600160a01b038581169116145b61245757600080fd5b61246384848484612919565b612486600f54600e55600d54600c55601154601055601354601255601554601455565b50505050565b600081848411156124b05760405162461bcd60e51b81526004016108859190612d44565b5060006124bd8486613440565b95945050505050565b6022805461ff001916610100179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061250a5761250a613152565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125879190613199565b8160018151811061259a5761259a613152565b6001600160a01b039283166020918202929092010152601f546125c09130911684611b91565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125f9908590600090869030904290600401613457565b600060405180830381600087803b15801561261357600080fd5b505af1158015612627573d6000803e3d6000fd5b50506022805461ff001916905550505050565b60008061264783856134c8565b905083811015611b8a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610885565b6000826126a857506000610902565b60006126b48385613338565b9050826126c18583613357565b14611b8a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610885565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601b546017546001600160a01b03909116906108fc90612791906103e890610def908690612699565b6040518115909202916000818181858888f193505050501580156127b9573d6000803e3d6000fd5b50601c546018546001600160a01b03909116906108fc906127e3906103e890610def908690612699565b6040518115909202916000818181858888f1935050505015801561280b573d6000803e3d6000fd5b50601a546016546001600160a01b03909116906108fc90612835906103e890610def908690612699565b6040518115909202916000818181858888f1935050505015801561285d573d6000803e3d6000fd5b5050565b600081836128825760405162461bcd60e51b81526004016108859190612d44565b5060006124bd8486613357565b6022805461ff001916610100179055600c54601254601054600e546000936128d0936128c3939192610d2e9283919061263a565b600c54610def9085612699565b905060006128df826002611b48565b905060006128ed8483612931565b9050476128f9826124c6565b600061290d83610def866122794787612931565b90506126278482612973565b8061292657612926612a48565b612463848484612aba565b6000611b8a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061248c565b601f5461298b9030906001600160a01b031684611b91565b601f546001600160a01b031663f305d7198230856000806129b46000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612a1c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a4191906134e0565b5050505050565b600e54158015612a585750600c54155b8015612a645750601054155b8015612a705750601254155b8015612a7c5750601454155b15612a8357565b600e8054600f55600c8054600d55601080546011556012805460135560148054601555600094859055928490559083905582905555565b612af36040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612b0e6103e8610def600e548561269990919063ffffffff16565b6020820152600c54612b29906103e890610def908590612699565b8152601054612b41906103e890610def908590612699565b6040820152601254612b5c906103e890610def908590612699565b6060820152601454612b77906103e890610def908590612699565b608082018190526060820151604083015183516020850151612bae9493612ba8939092849283919082908b90612931565b90612931565b60a08201526001600160a01b038416600090815260026020526040902054612bd69083612931565b6001600160a01b038086166000908152600260205260408082209390935560a084015191861681529190912054612c0c9161263a565b60026000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550612c79612c638260600151610d2e8460400151610d2e8660000151876020015161263a90919063ffffffff16565b306000908152600260205260409020549061263a565b30600090815260026020526040812091909155608082015161dead9091527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612cc29161263a565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5560a08101516040516001600160a01b0385811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612d369190815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015612d7157858101830151858201604001528201612d55565b81811115612d83576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ca157600080fd5b60008060408385031215612dc157600080fd5b8235612dcc81612d99565b946020939093013593505050565b600060208284031215612dec57600080fd5b8135611b8a81612d99565b600080600060608486031215612e0c57600080fd5b8335612e1781612d99565b92506020840135612e2781612d99565b929592945050506040919091013590565b600060208284031215612e4a57600080fd5b5035919050565b600060208284031215612e6357600080fd5b81358015158114611b8a57600080fd5b600080600080600060a08688031215612e8b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612eed57612eed612eae565b604052919050565b600067ffffffffffffffff821115612f0f57612f0f612eae565b5060051b60200190565b600082601f830112612f2a57600080fd5b81356020612f3f612f3a83612ef5565b612ec4565b82815260059290921b84018101918181019086841115612f5e57600080fd5b8286015b84811015612f795780358352918301918301612f62565b509695505050505050565b60008060408385031215612f9757600080fd5b823567ffffffffffffffff80821115612faf57600080fd5b818501915085601f830112612fc357600080fd5b81356020612fd3612f3a83612ef5565b82815260059290921b84018101918181019089841115612ff257600080fd5b948201945b8386101561301957853561300a81612d99565b82529482019490820190612ff7565b9650508601359250508082111561302f57600080fd5b5061303c85828601612f19565b9150509250929050565b6000806040838503121561305957600080fd5b50508035926020909101359150565b6000806040838503121561307b57600080fd5b823561308681612d99565b9150602083013561309681612d99565b809150509250929050565b6000806000606084860312156130b657600080fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f416d6f756e74206d757374206265206c657373207468616e206f72206571756160408201526f6c20746f20746f74616c537570706c7960801b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561319257613192613168565b5060010190565b6000602082840312156131ab57600080fd5b8151611b8a81612d99565b6000602082840312156131c857600080fd5b815160ff81168114611b8a57600080fd5b80516001600160701b03811681146131f057600080fd5b919050565b60008060006060848603121561320a57600080fd5b613213846131d9565b9250613221602085016131d9565b9150604084015163ffffffff8116811461323a57600080fd5b809150509250925092565b600181815b8085111561328057816000190482111561326657613266613168565b8085161561327357918102915b93841c939080029061324a565b509250929050565b60008261329757506001610902565b816132a457506000610902565b81600181146132ba57600281146132c4576132e0565b6001915050610902565b60ff8411156132d5576132d5613168565b50506001821b610902565b5060208310610133831016604e8410600b8410161715613303575081810a610902565b61330d8383613245565b806000190482111561332157613321613168565b029392505050565b6000611b8a60ff841683613288565b600081600019048311821515161561335257613352613168565b500290565b60008261337457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526027908201527f63616e74206d616b6520746865206c696d697420686967686572207468616e206040820152660605c62408aa8960cb1b606082015260800190565b6000602082840312156133d257600080fd5b5051919050565b60208082526041908201527f77616c6c65742062616c616e6365206166746572207472616e73666572206d7560408201527f7374206265206c657373207468616e206d61782077616c6c657420616d6f756e6060820152601d60fa1b608082015260a00190565b60008282101561345257613452613168565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156134a75784516001600160a01b031683529383019391830191600101613482565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156134db576134db613168565b500190565b6000806000606084860312156134f557600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122016e7a5d32834e3ec1476f0e1ff0c1397ad0b4703df208310e213b949e5b52b2364736f6c634300080a0033

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

000000000000000000000000b03fc7872f63d6b15cbd661234cc2946def83792

-----Decoded View---------------
Arg [0] : cards (address): 0xB03Fc7872f63D6B15cBD661234Cc2946DeF83792

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b03fc7872f63d6b15cbd661234cc2946def83792


Deployed Bytecode Sourcemap

8404:20754:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28321:212;;;;;;;;;;;;;:::i;:::-;;12775:94;;;;;;;;;;-1:-1:-1;12856:5:0;;;;;;;;;;;;-1:-1:-1;;;12856:5:0;;;;12775:94;;;;;;;:::i;:::-;;;;;;;;13757:163;;;;;;;;;;-1:-1:-1;13757:163:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;13757:163:0;1072:187:1;13085:97:0;;;;;;;;;;-1:-1:-1;8875:16:0;13085:97;;;1410:25:1;;;1398:2;1383:18;13085:97:0;1264:177:1;9372:33:0;;;;;;;;;;;;;;;;28029:142;;;;;;;;;;-1:-1:-1;28029:142:0;;;;;:::i;:::-;;:::i;13928:312::-;;;;;;;;;;-1:-1:-1;13928:312:0;;;;;:::i;:::-;;:::i;24876:325::-;;;;;;;;;;-1:-1:-1;24876:325:0;;;;;:::i;:::-;;:::i;26681:337::-;;;;;;;;;;-1:-1:-1;26681:337:0;;;;;:::i;:::-;;:::i;12983:94::-;;;;;;;;;;-1:-1:-1;12983:94:0;;8646:1;2494:36:1;;2482:2;2467:18;12983:94:0;2352:184:1;27258:102:0;;;;;;;;;;-1:-1:-1;27258:102:0;;;;;:::i;:::-;;:::i;13317:98::-;;;;;;;;;;-1:-1:-1;13317:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;13394:13:0;13370:4;13394:13;;;:4;:13;;;;;;;;;13317:98;24059:113;;;;;;;;;;-1:-1:-1;24059:113:0;;;;;:::i;:::-;;:::i;10650:28::-;;;;;;;;;;-1:-1:-1;10650:28:0;;;;-1:-1:-1;;;;;10650:28:0;;;;;;-1:-1:-1;;;;;3235:32:1;;;3217:51;;3205:2;3190:18;10650:28:0;3071:203:1;22334:207:0;;;;;;;;;;;;;:::i;27919:98::-;;;;;;;;;;-1:-1:-1;27919:98:0;;;;;:::i;:::-;;:::i;10923:40::-;;;;;;;;;;-1:-1:-1;10923:40:0;;;;-1:-1:-1;;;10923:40:0;;;;;;10868:48;;;;;;;;;;-1:-1:-1;10868:48:0;;;;;;;;;;;25209:1129;;;;;;;;;;-1:-1:-1;25209:1129:0;;;;;:::i;:::-;;:::i;24306:97::-;;;;;;;;;;-1:-1:-1;24306:97:0;;;;;:::i;:::-;;:::i;12322:445::-;;;;;;;;;;-1:-1:-1;12322:445:0;;;;;:::i;:::-;;:::i;28724:228::-;;;;;;;;;;;;;:::i;9253:33::-;;;;;;;;;;;;;;;;9020:31;;;;;;;;;;;;;;;;13190:119;;;;;;;;;;-1:-1:-1;13190:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;13283:18:0;13256:7;13283:18;;;:9;:18;;;;;;;13190:119;28545:167;;;;;;;;;;;;;:::i;3507:79::-;;;;;;;;;;-1:-1:-1;3545:7:0;3572:6;-1:-1:-1;;;;;3572:6:0;3507:79;;9491:29;;;;;;;;;;;;;;;;12877:98;;;;;;;;;;-1:-1:-1;12960:7:0;;;;;;;;;;;;-1:-1:-1;;;12960:7:0;;;;12877:98;;27026:224;;;;;;;;;;-1:-1:-1;27026:224:0;;;;;:::i;:::-;;:::i;15821:901::-;;;;;;;;;;-1:-1:-1;15821:901:0;;;;;:::i;:::-;;:::i;13427:169::-;;;;;;;;;;-1:-1:-1;13427:169:0;;;;;:::i;:::-;;:::i;27708:199::-;;;;;;;;;;-1:-1:-1;27708:199:0;;;;;:::i;:::-;;:::i;27372:324::-;;;;;;;;;;-1:-1:-1;27372:324:0;;;;;:::i;:::-;;:::i;8915:31::-;;;;;;;;;;;;;;;;9706:27;;;;;;;;;;;;;;;;28964:191;;;;;;;;;;;;;:::i;13604:145::-;;;;;;;;;;-1:-1:-1;13604:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;13714:18:0;;;13687:7;13714:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13604:145;24180:114;;;;;;;;;;-1:-1:-1;24180:114:0;;;;;:::i;:::-;;:::i;24516:352::-;;;;;;;;;;-1:-1:-1;24516:352:0;;;;;:::i;:::-;;:::i;26346:327::-;;;;;;;;;;-1:-1:-1;26346:327:0;;;;;:::i;:::-;;:::i;3725:201::-;;;;;;;;;;-1:-1:-1;3725:201:0;;;;;:::i;:::-;;:::i;22549:209::-;;;;;;;;;;;;;:::i;28183:126::-;;;;;;;;;;-1:-1:-1;28183:126:0;;;;;:::i;:::-;;:::i;24411:93::-;;;;;;;;;;-1:-1:-1;24411:93:0;;;;;:::i;:::-;;:::i;28321:212::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;;;;;;;;;28391:20:::1;::::0;-1:-1:-1;;;28391:20:0;::::1;;;:29;28383:57;;;::::0;-1:-1:-1;;;28383:57:0;;7755:2:1;28383:57:0::1;::::0;::::1;7737:21:1::0;7794:2;7774:18;;;7767:30;-1:-1:-1;;;7813:18:1;;;7806:45;7868:18;;28383:57:0::1;7553:339:1::0;28383:57:0::1;28451:20;:27:::0;;-1:-1:-1;;28489:36:0;-1:-1:-1;;;28489:36:0;;;28321:212::o;13757:163::-;13834:4;13851:39;1308:10;13874:7;13883:6;13851:8;:39::i;:::-;-1:-1:-1;13908:4:0;13757:163;;;;;:::o;28029:142::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;28127:17:::1;:36:::0;;-1:-1:-1;;;;;;28127:36:0::1;-1:-1:-1::0;;;;;28127:36:0;;;::::1;::::0;;;::::1;::::0;;28029:142::o;13928:312::-;14028:4;14045:36;14055:6;14063:9;14074:6;14045:9;:36::i;:::-;14092:118;14101:6;1308:10;14121:88;14159:6;14121:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14121:19:0;;;;;;:11;:19;;;;;;;;1308:10;14121:33;;;;;;;;;;:37;:88::i;:::-;14092:8;:118::i;:::-;-1:-1:-1;14228:4:0;13928:312;;;;;:::o;24876:325::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;24987:16:::1;8875;24999:3;24987:11;:16::i;:::-;24969:15;:34;24961:89;;;::::0;-1:-1:-1;;;24961:89:0;;8099:2:1;24961:89:0::1;::::0;::::1;8081:21:1::0;8138:2;8118:18;;;8111:30;8177:34;8157:18;;;8150:62;-1:-1:-1;;;8228:18:1;;;8221:40;8278:19;;24961:89:0::1;7897:406:1::0;24961:89:0::1;8875:16;25069:15;:26;;25061:87;;;;-1:-1:-1::0;;;25061:87:0::1;;;;;;;:::i;:::-;25159:16;:34:::0;24876:325::o;26681:337::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;26781:3:::1;26766:11;:18;;26758:81;;;::::0;-1:-1:-1;;;26758:81:0;;8927:2:1;26758:81:0::1;::::0;::::1;8909:21:1::0;8966:2;8946:18;;;8939:30;9005:34;8985:18;;;8978:62;-1:-1:-1;;;9056:18:1;;;9049:48;9114:19;;26758:81:0::1;8725:414:1::0;26758:81:0::1;26872:1;26858:11;:15;26850:75;;;::::0;-1:-1:-1;;;26850:75:0;;9346:2:1;26850:75:0::1;::::0;::::1;9328:21:1::0;9385:2;9365:18;;;9358:30;9424:34;9404:18;;;9397:62;-1:-1:-1;;;9475:18:1;;;9468:45;9530:19;;26850:75:0::1;9144:411:1::0;26850:75:0::1;26936:12;:26:::0;;;26978:32:::1;::::0;1410:25:1;;;26978:32:0::1;::::0;1398:2:1;1383:18;26978:32:0::1;;;;;;;;26681:337:::0;:::o;27258:102::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;27331:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27331:21:0;;::::1;::::0;;;::::1;::::0;;27258:102::o;24059:113::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24130:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;24130:34:0::1;24160:4;24130:34;::::0;;24059:113::o;22334:207::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;22432:4:::1;22388:23;13283:18:::0;;;:9;:18;;;;;;22453:19;;22449:85:::1;;22489:33;22506:15;22489:16;:33::i;:::-;22377:164;22334:207::o:0;27919:98::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;27995:6:::1;:14:::0;;-1:-1:-1;;;;;;27995:14:0::1;-1:-1:-1::0;;;;;27995:14:0;;;::::1;::::0;;;::::1;::::0;;27919:98::o;25209:1129::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;25356:16:::1;25375:71;25438:7:::0;25375:58:::1;25424:8:::0;25375:58;25410:8;25375:58;:12;25392;25375:16:::1;:30::i;:::-;:34:::0;::::1;:44::i;:71::-;25356:90:::0;-1:-1:-1;25484:2:0::1;25465:16;25356:90:::0;25478:2:::1;25465:12;:16::i;:::-;:21;25457:66;;;::::0;-1:-1:-1;;;25457:66:0;;9762:2:1;25457:66:0::1;::::0;::::1;9744:21:1::0;;;9781:18;;;9774:30;9840:34;9820:18;;;9813:62;9892:18;;25457:66:0::1;9560:356:1::0;25457:66:0::1;25536:13;:28:::0;;;25575:13:::1;:28:::0;;;25614:9:::1;:20:::0;;;25645:9:::1;:20:::0;;;25676:8:::1;:18:::0;;;25715:21:::1;:37:::0;;;25763:21:::1;:37:::0;;;25811:17:::1;:29:::0;;;25851:17:::1;:29:::0;;;25891:16:::1;:27:::0;;;-1:-1:-1;25962:43:0::1;25657:8:::0;25962:28:::1;25552:12:::0;25626:8;25962:17:::1;:28::i;:43::-;25939:66;;26046:43;26076:12;26047:23;26065:4;26047:13;;:17;;:23;;;;:::i;:::-;26046:29:::0;::::1;:43::i;:::-;26026:17;:63:::0;26117:9:::1;::::0;26116:39:::1;::::0;26142:12;;26117:19:::1;::::0;26131:4:::1;26117:13;:19::i;26116:39::-;26100:13;:55:::0;26183:9:::1;::::0;26182:39:::1;::::0;26208:12;;26183:19:::1;::::0;26197:4:::1;26183:13;:19::i;26182:39::-;26166:13;:55:::0;26259:13:::1;::::0;26274::::1;::::0;26289:9:::1;::::0;26300::::1;::::0;26311:8:::1;::::0;26247:73:::1;::::0;;10180:25:1;;;10236:2;10221:18;;10214:34;;;;10264:18;;;10257:34;;;;10322:2;10307:18;;10300:34;10365:3;10350:19;;10343:35;26247:73:0;::::1;::::0;;;;10167:3:1;26247:73:0;;::::1;25345:993;;25209:1129:::0;;;;;:::o;24306:97::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24374:13:0::1;24390:5;24374:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;24374:21:0::1;::::0;;24306:97::o;12322:445::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;12460:3:::1;12436:14;:21;:27;12428:94;;;::::0;-1:-1:-1;;;12428:94:0;;10591:2:1;12428:94:0::1;::::0;::::1;10573:21:1::0;10630:2;10610:18;;;10603:30;10669:34;10649:18;;;10642:62;-1:-1:-1;;;10720:18:1;;;10713:52;10782:19;;12428:94:0::1;10389:418:1::0;12428:94:0::1;12559:9;12555:205;12578:14;:21;12574:1;:25;12555:205;;;12620:14;12637;12652:1;12637:17;;;;;;;;:::i;:::-;;;;;;;12620:34;;12669:14;12686:7;12694:1;12686:10;;;;;;;;:::i;:::-;;;;;;;12669:27;;12711:37;12721:10;12733:6;12741;12711:9;:37::i;:::-;12605:155;;12601:3;;;;;:::i;:::-;;;;12555:205;;;;12322:445:::0;;:::o;28724:228::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;28802:28:::1;::::0;;;::::1;;;:37;28794:65;;;::::0;-1:-1:-1;;;28794:65:0;;7755:2:1;28794:65:0::1;::::0;::::1;7737:21:1::0;7794:2;7774:18;;;7767:30;-1:-1:-1;;;7813:18:1;;;7806:45;7868:18;;28794:65:0::1;7553:339:1::0;28794:65:0::1;28870:28;:35:::0;;-1:-1:-1;;28916:28:0;28870:35;28916:28;;;28724:228::o;28545:167::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;28616:20:::1;::::0;-1:-1:-1;;;28616:20:0;::::1;;;:28;;28640:4;28616:28;28608:57;;;::::0;-1:-1:-1;;;28608:57:0;;11418:2:1;28608:57:0::1;::::0;::::1;11400:21:1::0;11457:2;11437:18;;;11430:30;-1:-1:-1;;;11476:18:1;;;11469:46;11532:18;;28608:57:0::1;11216:340:1::0;28608:57:0::1;28676:20;:28:::0;;-1:-1:-1;;28676:28:0::1;::::0;;28545:167::o;27026:224::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;27105:7:::1;::::0;;;::::1;;;:15;;27116:4;27105:15;27097:49;;;::::0;-1:-1:-1;;;27097:49:0;;11763:2:1;27097:49:0::1;::::0;::::1;11745:21:1::0;11802:2;11782:18;;;11775:30;-1:-1:-1;;;11821:18:1;;;11814:51;11882:18;;27097:49:0::1;11561:345:1::0;27097:49:0::1;27157:7;:15:::0;;22241;22227:11;:29;22267:10;:22;;;-1:-1:-1;;22300:18:0;-1:-1:-1;22300:18:0;;;27234:7:::1;::::0;27221:21:::1;::::0;27234:7;;;::::1;;;1237:14:1::0;1230:22;1212:41;;27221:21:0::1;::::0;1200:2:1;1185:18;27221:21:0::1;1072:187:1::0;15821:901:0;15959:13;;;15944:38;;;-1:-1:-1;;;15944:38:0;;;;15885:7;;;;-1:-1:-1;;;;;15959:13:0;;15944:36;;:38;;;;;15959:13;15944:38;;;;;15959:13;15944:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16058:13;;;16043:38;;;-1:-1:-1;;;16043:38:0;;;;15905:78;;-1:-1:-1;16004:21:0;;-1:-1:-1;;;;;16058:13:0;;;;16043:36;;:38;;;;;;;;;;16058:13;16043:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16004:78;;16116:6;-1:-1:-1;;;;;16116:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:22;;16108:63;;;;-1:-1:-1;;;16108:63:0;;12647:2:1;16108:63:0;;;12629:21:1;12686:2;12666:18;;;12659:30;12725;12705:18;;;12698:58;12773:18;;16108:63:0;12445:352:1;16108:63:0;16193:12;16207;16239:13;;;;;;;;;-1:-1:-1;;;;;16239:13:0;-1:-1:-1;;;;;16224:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16281:11:0;;16192:75;;-1:-1:-1;16192:75:0;-1:-1:-1;16281:11:0;;;;;16278:273;;;16348:13;;;16333:38;;;-1:-1:-1;;;16333:38:0;;;;-1:-1:-1;;;;;16348:13:0;;;;16333:36;;:38;;;;;;;;;;16348:13;16333:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16309:63;;16436:13;;;;;;;;;-1:-1:-1;;;;;16436:13:0;-1:-1:-1;;;;;16421:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16397:63;;16511:13;;;;;;;;;-1:-1:-1;;;;;16511:13:0;-1:-1:-1;;;;;16496:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16480:59:0;-1:-1:-1;16480:59:0;-1:-1:-1;16278:273:0;16563:9;16585:6;-1:-1:-1;;;;;16585:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16581:21;;:2;:21;:::i;:::-;16575:28;;-1:-1:-1;;;;;16575:28:0;;;:::i;:::-;16563:40;;16646:6;-1:-1:-1;;;;;16646:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16642:21;;:2;:21;:::i;:::-;16636:28;;-1:-1:-1;;;;;16636:28:0;;;:::i;:::-;16622:11;16629:4;16622:6;:11;:::i;:::-;16621:44;;;;:::i;:::-;16614:52;15821:901;-1:-1:-1;;;;;;;15821:901:0:o;13427:169::-;13507:4;13524:42;1308:10;13548:9;13559:6;13524:9;:42::i;27708:199::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;27814:3:::1;27800:10;:17;;27792:66;;;::::0;-1:-1:-1;;;27792:66:0;;15430:2:1;27792:66:0::1;::::0;::::1;15412:21:1::0;15469:2;15449:18;;;15442:30;15508:34;15488:18;;;15481:62;-1:-1:-1;;;15559:18:1;;;15552:34;15603:19;;27792:66:0::1;15228:400:1::0;27792:66:0::1;27869:17;:30:::0;27708:199::o;27372:324::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;27493:3:::1;27480:9;:16;;27472:68;;;;-1:-1:-1::0;;;27472:68:0::1;;;;;;;:::i;:::-;27573:3;27559:10;:17;;27551:69;;;;-1:-1:-1::0;;;27551:69:0::1;;;;;;;:::i;:::-;27631:10;:22:::0;;;;27664:11:::1;:24:::0;27372:324::o;28964:191::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;29043:28:::1;::::0;;;::::1;;;:36;;29075:4;29043:36;29035:65;;;::::0;-1:-1:-1;;;29035:65:0;;11418:2:1;29035:65:0::1;::::0;::::1;11400:21:1::0;11457:2;11437:18;;;11430:30;-1:-1:-1;;;11476:18:1;;;11469:46;11532:18;;29035:65:0::1;11216:340:1::0;29035:65:0::1;29111:28;:36:::0;;-1:-1:-1;;29111:36:0::1;::::0;;28964:191::o;24180:114::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24251:27:0::1;24281:5;24251:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;24251:35:0::1;::::0;;24180:114::o;24516:352::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;24615:18:::1;8875:16;24627:5;24615:11;:18::i;:::-;24601:11;:32;24593:88;;;::::0;-1:-1:-1;;;24593:88:0;;16243:2:1;24593:88:0::1;::::0;::::1;16225:21:1::0;16282:2;16262:18;;;16255:30;16321:34;16301:18;;;16294:62;-1:-1:-1;;;16372:18:1;;;16365:41;16423:19;;24593:88:0::1;16041:407:1::0;24593:88:0::1;8875:16;24700:11;:22;;24692:83;;;;-1:-1:-1::0;;;24692:83:0::1;;;;;;;:::i;:::-;24786:12;:26:::0;;;24828:32:::1;::::0;1410:25:1;;;24828:32:0::1;::::0;1398:2:1;1383:18;24828:32:0::1;1264:177:1::0;26346:327:0;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;26469:17:::1;:36:::0;;;26516:13:::1;:28:::0;;;26555:13:::1;:28:::0;;;26601:64:::1;::::0;;16655:25:1;;;16711:2;16696:18;;16689:34;;;16739:18;;;16732:34;;;26601:64:0::1;::::0;16643:2:1;16628:18;26601:64:0::1;;;;;;;26346:327:::0;;;:::o;3725:201::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3814:22:0;::::1;3806:73;;;::::0;-1:-1:-1;;;3806:73:0;;16979:2:1;3806:73:0::1;::::0;::::1;16961:21:1::0;17018:2;16998:18;;;16991:30;17057:34;17037:18;;;17030:62;-1:-1:-1;;;17108:18:1;;;17101:36;17154:19;;3806:73:0::1;16777:402:1::0;3806:73:0::1;3890:28;3909:8;3890:18;:28::i;22549:209::-:0;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;22632:21:::1;22668:22:::0;;22664:87:::1;;22707:32;22720:18;22707:12;:32::i;28183:126::-:0;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;28273:13:::1;:28:::0;;-1:-1:-1;;;;;;28273:28:0::1;-1:-1:-1::0;;;;;28273:28:0;;;::::1;::::0;;;::::1;::::0;;28183:126::o;24411:93::-;3634:6;;-1:-1:-1;;;;;3634:6:0;1308:10;3634:22;3626:67;;;;-1:-1:-1;;;3626:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24476:13:0::1;;::::0;;;:4:::1;:13;::::0;;;;:20;;-1:-1:-1;;24476:20:0::1;24492:4;24476:20;::::0;;24411:93::o;2817:132::-;2875:7;2902:39;2906:1;2909;2902:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2895:46;2817:132;-1:-1:-1;;;2817:132:0:o;15431:335::-;-1:-1:-1;;;;;15524:19:0;;15516:68;;;;-1:-1:-1;;;15516:68:0;;17386:2:1;15516:68:0;;;17368:21:1;17425:2;17405:18;;;17398:30;17464:34;17444:18;;;17437:62;-1:-1:-1;;;17515:18:1;;;17508:34;17559:19;;15516:68:0;17184:400:1;15516:68:0;-1:-1:-1;;;;;15603:21:0;;15595:68;;;;-1:-1:-1;;;15595:68:0;;17791:2:1;15595:68:0;;;17773:21:1;17830:2;17810:18;;;17803:30;17869:34;17849:18;;;17842:62;-1:-1:-1;;;17920:18:1;;;17913:32;17962:19;;15595:68:0;17589:398:1;15595:68:0;-1:-1:-1;;;;;15674:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15726:32;;1410:25:1;;;15726:32:0;;1383:18:1;15726:32:0;;;;;;;15431:335;;;:::o;16734:3202::-;-1:-1:-1;;;;;16822:18:0;;16814:68;;;;-1:-1:-1;;;16814:68:0;;18194:2:1;16814:68:0;;;18176:21:1;18233:2;18213:18;;;18206:30;18272:34;18252:18;;;18245:62;-1:-1:-1;;;18323:18:1;;;18316:35;18368:19;;16814:68:0;17992:401:1;16814:68:0;-1:-1:-1;;;;;16901:16:0;;16893:64;;;;-1:-1:-1;;;16893:64:0;;18600:2:1;16893:64:0;;;18582:21:1;18639:2;18619:18;;;18612:30;18678:34;18658:18;;;18651:62;-1:-1:-1;;;18729:18:1;;;18722:33;18772:19;;16893:64:0;18398:399:1;16893:64:0;16985:1;16976:6;:10;16968:64;;;;-1:-1:-1;;;16968:64:0;;19004:2:1;16968:64:0;;;18986:21:1;19043:2;19023:18;;;19016:30;19082:34;19062:18;;;19055:62;-1:-1:-1;;;19133:18:1;;;19126:39;19182:19;;16968:64:0;18802:405:1;16968:64:0;17060:4;17089:7;3545;3572:6;-1:-1:-1;;;;;3572:6:0;;3507:79;17089:7;-1:-1:-1;;;;;17081:15:0;:4;-1:-1:-1;;;;;17081:15:0;;;:32;;;;-1:-1:-1;3545:7:0;3572:6;-1:-1:-1;;;;;17100:13:0;;;3572:6;;17100:13;;17081:32;:44;;;;-1:-1:-1;17118:7:0;;;;;;;17117:8;17081:44;:69;;;;-1:-1:-1;;;;;;17129:21:0;;17145:4;17129:21;;17081:69;:92;;;;-1:-1:-1;;;;;;17154:19:0;;17168:4;17154:19;;17081:92;17077:2403;;;17198:11;;;;17190:20;;;;;;17237:13;;-1:-1:-1;;;;;17229:21:0;;;17237:13;;17229:21;;;;:47;;-1:-1:-1;17262:14:0;;-1:-1:-1;;;;;17254:22:0;;;17262:14;;17254:22;;17229:47;17225:119;;;17315:12;;17305:6;:22;;17297:31;;;;;;17370:13;;-1:-1:-1;;;;;17362:21:0;;;17370:13;;17362:21;:55;;;;-1:-1:-1;17401:15:0;;-1:-1:-1;;;;;17387:30:0;;;17401:15;;17387:30;;17362:55;17358:609;;;17485:10;;17469:11;;:27;;:15;:27::i;:::-;17450:15;:46;;:71;;;;-1:-1:-1;17508:13:0;;-1:-1:-1;;;;;17500:21:0;;;17508:13;;17500:21;;17450:71;:97;;;;-1:-1:-1;17533:14:0;;-1:-1:-1;;;;;17525:22:0;;;17533:14;;17525:22;;17450:97;17446:161;;;-1:-1:-1;;;;;17572:8:0;;;;;;:4;:8;;;;;:15;;-1:-1:-1;;17572:15:0;17583:4;17572:15;;;17446:161;17663:29;;-1:-1:-1;;;17663:29:0;;;;;1410:25:1;;;17643:17:0;;17663:4;;:21;;1383:18:1;;17663:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17643:49;;17750:10;;17737:9;:23;;17729:80;;;;-1:-1:-1;;;17729:80:0;;19603:2:1;17729:80:0;;;19585:21:1;19642:2;19622:18;;;19615:30;19681:34;19661:18;;;19654:62;-1:-1:-1;;;19732:18:1;;;19725:42;19784:19;;17729:80:0;19401:408:1;17729:80:0;17865:16;;17836:25;17854:6;17836:13;17846:2;-1:-1:-1;;;;;13283:18:0;13256:7;13283:18;;;:9;:18;;;;;;;13190:119;17836:25;:45;;17828:123;;;;-1:-1:-1;;;17828:123:0;;;;;;;:::i;:::-;17419:548;17358:609;18000:6;;;;;;;17999:7;:32;;;;-1:-1:-1;18018:13:0;;-1:-1:-1;;;;;18010:21:0;;;18018:13;;18010:21;;17999:32;17995:1474;;;-1:-1:-1;;;;;18080:10:0;;;;;;:4;:10;;;;;;;;18079:11;:24;;;;-1:-1:-1;;;;;;18095:8:0;;;;;;:4;:8;;;;;;;;18094:9;18079:24;18071:33;;;;;;18161:29;;-1:-1:-1;;;18161:29:0;;;;;1410:25:1;;;18141:17:0;;18161:4;;:21;;1383:18:1;;18161:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18141:49;;18248:11;;18235:9;:24;;18227:86;;;;-1:-1:-1;;;18227:86:0;;20490:2:1;18227:86:0;;;20472:21:1;20529:2;20509:18;;;20502:30;20568:34;20548:18;;;20541:62;-1:-1:-1;;;20619:18:1;;;20612:47;20676:19;;18227:86:0;20288:413:1;18227:86:0;18338:20;;-1:-1:-1;;;18338:20:0;;;;18334:430;;;18426:17;;18413:9;:30;;18405:103;;;;-1:-1:-1;;;18405:103:0;;20908:2:1;18405:103:0;;;20890:21:1;20947:2;20927:18;;;20920:30;20986:34;20966:18;;;20959:62;21057:30;21037:18;;;21030:58;21105:19;;18405:103:0;20706:424:1;18405:103:0;18334:430;;;18575:28;;;;;;;18571:193;;;18697:12;;18678:13;;;-1:-1:-1;;;;;18678:13:0;13256:7;13283:18;;;:9;:18;;;;;;;18668:51;;18715:3;;18668:42;;18697:12;18668:24;:28;;:42::i;:51::-;18658:6;:61;;18650:70;;;;;;18809:13;;-1:-1:-1;;;;;18803:19:0;;;18809:13;;18803:19;18800:214;;18906:16;;18877:25;18895:6;18877:13;18887:2;-1:-1:-1;;;;;13283:18:0;13256:7;13283:18;;;:9;:18;;;;;;;13190:119;18877:25;:45;;18869:123;;;;-1:-1:-1;;;18869:123:0;;;;;;;:::i;:::-;19083:4;19034:28;13283:18;;;:9;:18;;;;;;19114:24;;19110:129;;19165:36;19180:20;19165:14;:36::i;:::-;19286:21;19330:22;;19326:106;;19377:35;19390:21;19377:12;:35::i;:::-;18033:1436;;;17995:1474;-1:-1:-1;;;;;19496:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;19524:22:0;;;;;;:18;:22;;;;;;;;19496:50;:61;;;-1:-1:-1;19550:7:0;;;;;;;19496:61;19492:222;;;-1:-1:-1;19585:5:0;19492:222;;;-1:-1:-1;;;;;19623:10:0;;;;;;:4;:10;;;;;;;;;:22;;-1:-1:-1;;;;;;19637:8:0;;;;;;:4;:8;;;;;;;;19623:22;19619:95;;;19662:11;14827:13;;;14803:21;:37;14875:13;;;14851:21;:37;14919:9;;;14899:17;:29;14959:9;;;14939:17;:29;14998:8;;;14979:16;:27;15043:3;15027:19;;;;15057;;;;15087:14;;;-1:-1:-1;15112:13:0;;;;15136:12;;14763:393;19662:11;-1:-1:-1;19698:4:0;19619:95;19730:7;;;;;;;19726:115;;;3545:7;3572:6;-1:-1:-1;;;;;19762:15:0;;;3572:6;;19762:15;;:40;;-1:-1:-1;19789:13:0;;-1:-1:-1;;;;;19781:21:0;;;19789:13;;19781:21;19762:40;:66;;;-1:-1:-1;19814:14:0;;-1:-1:-1;;;;;19806:22:0;;;19814:14;;19806:22;19762:66;19754:75;;;;;;19861:41;19876:4;19882:2;19886:6;19894:7;19861:14;:41::i;:::-;19913:15;15228:21;;15212:13;:37;15276:21;;15260:13;:37;15320:17;;15308:9;:29;15360:17;;15348:9;:29;15399:16;;15388:8;:27;15168:255;19913:15;16803:3133;16734:3202;;;:::o;2365:190::-;2451:7;2487:12;2479:6;;;;2471:29;;;;-1:-1:-1;;;2471:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2511:9:0;2523:5;2527:1;2523;:5;:::i;:::-;2511:17;2365:190;-1:-1:-1;;;;;2365:190:0:o;19944:407::-;11378:6;:13;;-1:-1:-1;;11378:13:0;;;;;20046:16:::1;::::0;;20060:1:::1;20046:16:::0;;;;;::::1;::::0;;-1:-1:-1;;20046:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20046:16:0::1;20022:40;;20091:4;20073;20078:1;20073:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20073:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;20117:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;20117:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;20073:7;;20117:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20107:4;20112:1;20107:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20107:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;20182:15:::1;::::0;20150:62:::1;::::0;20167:4:::1;::::0;20182:15:::1;20200:11:::0;20150:8:::1;:62::i;:::-;20223:15;::::0;:120:::1;::::0;-1:-1:-1;;;20223:120:0;;-1:-1:-1;;;;;20223:15:0;;::::1;::::0;:66:::1;::::0;:120:::1;::::0;20290:11;;20223:15:::1;::::0;20306:4;;20320::::1;::::0;20327:15:::1;::::0;20223:120:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11414:6:0;:14;;-1:-1:-1;;11414:14:0;;;-1:-1:-1;;;;19944:407:0:o;2034:179::-;2092:7;;2124:5;2128:1;2124;:5;:::i;:::-;2112:17;;2153:1;2148;:6;;2140:46;;;;-1:-1:-1;;;2140:46:0;;22585:2:1;2140:46:0;;;22567:21:1;22624:2;22604:18;;;22597:30;22663:29;22643:18;;;22636:57;22710:18;;2140:46:0;22383:351:1;2563:246:0;2621:7;2645:6;2641:47;;-1:-1:-1;2675:1:0;2668:8;;2641:47;2698:9;2710:5;2714:1;2710;:5;:::i;:::-;2698:17;-1:-1:-1;2743:1:0;2734:5;2738:1;2698:17;2734:5;:::i;:::-;:10;2726:56;;;;-1:-1:-1;;;2726:56:0;;22941:2:1;2726:56:0;;;22923:21:1;22980:2;22960:18;;;22953:30;23019:34;22999:18;;;22992:62;-1:-1:-1;;;23070:18:1;;;23063:31;23111:19;;2726:56:0;22739:397:1;3934:191:0;4008:16;4027:6;;-1:-1:-1;;;;;4044:17:0;;;-1:-1:-1;;;;;;4044:17:0;;;;;;4077:40;;4027:6;;;;;;;4077:40;;4008:16;4077:40;3997:128;3934:191;:::o;21895:265::-;21952:13;;21986;;-1:-1:-1;;;;;21952:13:0;;;;:59;;21975:35;;22005:4;;21975:25;;:6;;:10;:25::i;:35::-;21952:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22022:6:0;;22049:13;;-1:-1:-1;;;;;22022:6:0;;;;:52;;22038:35;;22068:4;;22038:25;;:6;;:10;:25::i;:35::-;22022:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22085:17:0;;22123;;-1:-1:-1;;;;;22085:17:0;;;;:67;;22112:39;;22146:4;;22112:29;;:6;;:10;:29::i;:39::-;22085:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21895:265;:::o;2957:189::-;3043:7;3078:12;3071:5;3063:28;;;;-1:-1:-1;;;3063:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3102:9:0;3114:5;3118:1;3114;:5;:::i;20833:1054::-;11378:6;:13;;-1:-1:-1;;11378:13:0;;;;;21033::::1;::::0;21018:9:::1;::::0;21003::::1;::::0;20985:13:::1;::::0;11378;;20941:107:::1;::::0;20985:62:::1;::::0;21033:13;;20985:43:::1;::::0;;;:13;:17:::1;:28::i;:62::-;20941:13;::::0;:39:::1;::::0;20959:20;20941:17:::1;:39::i;:107::-;20918:130:::0;-1:-1:-1;21112:12:0::1;21128:19;20918:130:::0;21145:1:::1;21128:16;:19::i;:::-;21112:35:::0;-1:-1:-1;21158:17:0::1;21178:30;:20:::0;21112:35;21178:24:::1;:30::i;:::-;21158:50:::0;-1:-1:-1;21511:21:0::1;21577:27;21158:50:::0;21577:16:::1;:27::i;:::-;21735:18;21756:70;21816:9:::0;21757:53:::1;21805:4:::0;21758:41:::1;:21;21784:14:::0;21758:25:::1;:41::i;21756:70::-;21735:91;;21849:30;21862:4;21868:10;21849:12;:30::i;22766:256::-:0;22879:7;22874:60;;22908:14;:12;:14::i;:::-;22944:44;22962:6;22970:9;22981:6;22944:17;:44::i;2221:136::-;2279:7;2306:43;2310:1;2313;2306:43;;;;;;;;;;;;;;;;;:3;:43::i;20363:460::-;20476:15;;20444:62;;20461:4;;-1:-1:-1;;;;;20476:15:0;20494:11;20444:8;:62::i;:::-;20549:15;;-1:-1:-1;;;;;20549:15:0;:31;20588:9;20623:4;20645:11;20549:15;;20763:7;3545;3572:6;-1:-1:-1;;;;;3572:6:0;;3507:79;20763:7;20549:266;;;;;;-1:-1:-1;;;;;;20549:266:0;;;-1:-1:-1;;;;;23500:15:1;;;20549:266:0;;;23482:34:1;23532:18;;;23525:34;;;;23575:18;;;23568:34;;;;23618:18;;;23611:34;23682:15;;;23661:19;;;23654:44;20787:15:0;23714:19:1;;;23707:35;23416:19;;20549:266:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20363:460;;:::o;14248:507::-;14295:13;;:18;:40;;;;-1:-1:-1;14317:13:0;;:18;14295:40;:58;;;;-1:-1:-1;14339:9:0;;:14;14295:58;:76;;;;-1:-1:-1;14357:9:0;;:14;14295:76;:93;;;;-1:-1:-1;14375:8:0;;:13;14295:93;14291:106;;;14248:507::o;14291:106::-;14431:13;;;14407:21;:37;14479:13;;;14455:21;:37;14523:9;;;14503:17;:29;14563:9;;;14543:17;:29;14602:8;;;14583:16;:27;-1:-1:-1;14631:17:0;;;;14659;;;;14687:13;;;;14711;;;14735:12;14248:507::o;23030:980::-;23127:24;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23127:24:0;23180:35;23210:4;23180:25;23191:13;;23180:6;:10;;:25;;;;:::i;:35::-;23162:15;;;:53;23255:13;;23244:35;;23274:4;;23244:25;;:6;;:10;:25::i;:35::-;23226:53;;23315:9;;23304:31;;23330:4;;23304:21;;:6;;:10;:21::i;:31::-;23290:11;;;:45;23371:9;;23360:31;;23386:4;;23360:21;;:6;;:10;:21::i;:31::-;23346:11;;;:45;23426:8;;23415:30;;23440:4;;23415:20;;:6;;:10;:20::i;:30::-;23402:10;;;:43;;;23551:11;;;;23534;;;;23513:15;;23492;;;;23481:98;;23402:43;23481:82;;23551:11;;23481:82;;;;23513:15;23481:82;;:6;;:10;:27::i;:::-;:31;;:48::i;:98::-;23466:12;;;:113;-1:-1:-1;;;;;23620:17:0;;;;;;:9;:17;;;;;;:29;;23642:6;23620:21;:29::i;:::-;-1:-1:-1;;;;;23600:17:0;;;;;;;:9;:17;;;;;;:49;;;;23708:12;;;;23683:20;;;;;;;;;;:38;;:24;:38::i;:::-;23660:9;:20;23670:9;-1:-1:-1;;;;;23660:20:0;-1:-1:-1;;;;;23660:20:0;;;;;;;;;;;;:61;;;;23759:100;23788:70;23846:4;:11;;;23788:53;23829:4;:11;;;23788:36;23808:4;:15;;;23788:4;:15;;;:19;;:36;;;;:::i;:70::-;23777:4;23759:24;;;;:9;:24;;;;;;;:28;:100::i;:::-;23750:4;23732:24;;;;:9;:24;;;;;:127;;;;23924:10;;;;10478:42;23896:23;;;;;:39;;:27;:39::i;:::-;10478:42;23870:23;;:9;:23;;;:65;23989:12;;;;23870:23;23961:41;-1:-1:-1;;;;;23961:41:0;;;;;;;;;;;;1410:25:1;;;1398:2;1383:18;;1264:177;23961:41:0;;;;;;;;23116:894;23030:980;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:255::-;1513:6;1566:2;1554:9;1545:7;1541:23;1537:32;1534:52;;;1582:1;1579;1572:12;1534:52;1621:9;1608:23;1640:31;1665:5;1640:31;:::i;1706:456::-;1783:6;1791;1799;1852:2;1840:9;1831:7;1827:23;1823:32;1820:52;;;1868:1;1865;1858:12;1820:52;1907:9;1894:23;1926:31;1951:5;1926:31;:::i;:::-;1976:5;-1:-1:-1;2033:2:1;2018:18;;2005:32;2046:33;2005:32;2046:33;:::i;:::-;1706:456;;2098:7;;-1:-1:-1;;;2152:2:1;2137:18;;;;2124:32;;1706:456::o;2167:180::-;2226:6;2279:2;2267:9;2258:7;2254:23;2250:32;2247:52;;;2295:1;2292;2285:12;2247:52;-1:-1:-1;2318:23:1;;2167:180;-1:-1:-1;2167:180:1:o;2541:273::-;2597:6;2650:2;2638:9;2629:7;2625:23;2621:32;2618:52;;;2666:1;2663;2656:12;2618:52;2705:9;2692:23;2758:5;2751:13;2744:21;2737:5;2734:32;2724:60;;2780:1;2777;2770:12;3279:454;3374:6;3382;3390;3398;3406;3459:3;3447:9;3438:7;3434:23;3430:33;3427:53;;;3476:1;3473;3466:12;3427:53;-1:-1:-1;;3499:23:1;;;3569:2;3554:18;;3541:32;;-1:-1:-1;3620:2:1;3605:18;;3592:32;;3671:2;3656:18;;3643:32;;-1:-1:-1;3722:3:1;3707:19;3694:33;;-1:-1:-1;3279:454:1;-1:-1:-1;3279:454:1:o;3738:127::-;3799:10;3794:3;3790:20;3787:1;3780:31;3830:4;3827:1;3820:15;3854:4;3851:1;3844:15;3870:275;3941:2;3935:9;4006:2;3987:13;;-1:-1:-1;;3983:27:1;3971:40;;4041:18;4026:34;;4062:22;;;4023:62;4020:88;;;4088:18;;:::i;:::-;4124:2;4117:22;3870:275;;-1:-1:-1;3870:275:1:o;4150:183::-;4210:4;4243:18;4235:6;4232:30;4229:56;;;4265:18;;:::i;:::-;-1:-1:-1;4310:1:1;4306:14;4322:4;4302:25;;4150:183::o;4338:662::-;4392:5;4445:3;4438:4;4430:6;4426:17;4422:27;4412:55;;4463:1;4460;4453:12;4412:55;4499:6;4486:20;4525:4;4549:60;4565:43;4605:2;4565:43;:::i;:::-;4549:60;:::i;:::-;4643:15;;;4729:1;4725:10;;;;4713:23;;4709:32;;;4674:12;;;;4753:15;;;4750:35;;;4781:1;4778;4771:12;4750:35;4817:2;4809:6;4805:15;4829:142;4845:6;4840:3;4837:15;4829:142;;;4911:17;;4899:30;;4949:12;;;;4862;;4829:142;;;-1:-1:-1;4989:5:1;4338:662;-1:-1:-1;;;;;;4338:662:1:o;5005:1215::-;5123:6;5131;5184:2;5172:9;5163:7;5159:23;5155:32;5152:52;;;5200:1;5197;5190:12;5152:52;5240:9;5227:23;5269:18;5310:2;5302:6;5299:14;5296:34;;;5326:1;5323;5316:12;5296:34;5364:6;5353:9;5349:22;5339:32;;5409:7;5402:4;5398:2;5394:13;5390:27;5380:55;;5431:1;5428;5421:12;5380:55;5467:2;5454:16;5489:4;5513:60;5529:43;5569:2;5529:43;:::i;5513:60::-;5607:15;;;5689:1;5685:10;;;;5677:19;;5673:28;;;5638:12;;;;5713:19;;;5710:39;;;5745:1;5742;5735:12;5710:39;5769:11;;;;5789:217;5805:6;5800:3;5797:15;5789:217;;;5885:3;5872:17;5902:31;5927:5;5902:31;:::i;:::-;5946:18;;5822:12;;;;5984;;;;5789:217;;;6025:5;-1:-1:-1;;6068:18:1;;6055:32;;-1:-1:-1;;6099:16:1;;;6096:36;;;6128:1;6125;6118:12;6096:36;;6151:63;6206:7;6195:8;6184:9;6180:24;6151:63;:::i;:::-;6141:73;;;5005:1215;;;;;:::o;6225:248::-;6293:6;6301;6354:2;6342:9;6333:7;6329:23;6325:32;6322:52;;;6370:1;6367;6360:12;6322:52;-1:-1:-1;;6393:23:1;;;6463:2;6448:18;;;6435:32;;-1:-1:-1;6225:248:1:o;6478:388::-;6546:6;6554;6607:2;6595:9;6586:7;6582:23;6578:32;6575:52;;;6623:1;6620;6613:12;6575:52;6662:9;6649:23;6681:31;6706:5;6681:31;:::i;:::-;6731:5;-1:-1:-1;6788:2:1;6773:18;;6760:32;6801:33;6760:32;6801:33;:::i;:::-;6853:7;6843:17;;;6478:388;;;;;:::o;6871:316::-;6948:6;6956;6964;7017:2;7005:9;6996:7;6992:23;6988:32;6985:52;;;7033:1;7030;7023:12;6985:52;-1:-1:-1;;7056:23:1;;;7126:2;7111:18;;7098:32;;-1:-1:-1;7177:2:1;7162:18;;;7149:32;;6871:316;-1:-1:-1;6871:316:1:o;7192:356::-;7394:2;7376:21;;;7413:18;;;7406:30;7472:34;7467:2;7452:18;;7445:62;7539:2;7524:18;;7192:356::o;8308:412::-;8510:2;8492:21;;;8549:2;8529:18;;;8522:30;8588:34;8583:2;8568:18;;8561:62;-1:-1:-1;;;8654:2:1;8639:18;;8632:46;8710:3;8695:19;;8308:412::o;10812:127::-;10873:10;10868:3;10864:20;10861:1;10854:31;10904:4;10901:1;10894:15;10928:4;10925:1;10918:15;10944:127;11005:10;11000:3;10996:20;10993:1;10986:31;11036:4;11033:1;11026:15;11060:4;11057:1;11050:15;11076:135;11115:3;-1:-1:-1;;11136:17:1;;11133:43;;;11156:18;;:::i;:::-;-1:-1:-1;11203:1:1;11192:13;;11076:135::o;11911:251::-;11981:6;12034:2;12022:9;12013:7;12009:23;12005:32;12002:52;;;12050:1;12047;12040:12;12002:52;12082:9;12076:16;12101:31;12126:5;12101:31;:::i;12167:273::-;12235:6;12288:2;12276:9;12267:7;12263:23;12259:32;12256:52;;;12304:1;12301;12294:12;12256:52;12336:9;12330:16;12386:4;12379:5;12375:16;12368:5;12365:27;12355:55;;12406:1;12403;12396:12;12802:188;12881:13;;-1:-1:-1;;;;;12923:42:1;;12913:53;;12903:81;;12980:1;12977;12970:12;12903:81;12802:188;;;:::o;12995:450::-;13082:6;13090;13098;13151:2;13139:9;13130:7;13126:23;13122:32;13119:52;;;13167:1;13164;13157:12;13119:52;13190:40;13220:9;13190:40;:::i;:::-;13180:50;;13249:49;13294:2;13283:9;13279:18;13249:49;:::i;:::-;13239:59;;13341:2;13330:9;13326:18;13320:25;13385:10;13378:5;13374:22;13367:5;13364:33;13354:61;;13411:1;13408;13401:12;13354:61;13434:5;13424:15;;;12995:450;;;;;:::o;13450:422::-;13539:1;13582:5;13539:1;13596:270;13617:7;13607:8;13604:21;13596:270;;;13676:4;13672:1;13668:6;13664:17;13658:4;13655:27;13652:53;;;13685:18;;:::i;:::-;13735:7;13725:8;13721:22;13718:55;;;13755:16;;;;13718:55;13834:22;;;;13794:15;;;;13596:270;;;13600:3;13450:422;;;;;:::o;13877:806::-;13926:5;13956:8;13946:80;;-1:-1:-1;13997:1:1;14011:5;;13946:80;14045:4;14035:76;;-1:-1:-1;14082:1:1;14096:5;;14035:76;14127:4;14145:1;14140:59;;;;14213:1;14208:130;;;;14120:218;;14140:59;14170:1;14161:10;;14184:5;;;14208:130;14245:3;14235:8;14232:17;14229:43;;;14252:18;;:::i;:::-;-1:-1:-1;;14308:1:1;14294:16;;14323:5;;14120:218;;14422:2;14412:8;14409:16;14403:3;14397:4;14394:13;14390:36;14384:2;14374:8;14371:16;14366:2;14360:4;14357:12;14353:35;14350:77;14347:159;;;-1:-1:-1;14459:19:1;;;14491:5;;14347:159;14538:34;14563:8;14557:4;14538:34;:::i;:::-;14608:6;14604:1;14600:6;14596:19;14587:7;14584:32;14581:58;;;14619:18;;:::i;:::-;14657:20;;13877:806;-1:-1:-1;;;13877:806:1:o;14688:140::-;14746:5;14775:47;14816:4;14806:8;14802:19;14796:4;14775:47;:::i;14833:168::-;14873:7;14939:1;14935;14931:6;14927:14;14924:1;14921:21;14916:1;14909:9;14902:17;14898:45;14895:71;;;14946:18;;:::i;:::-;-1:-1:-1;14986:9:1;;14833:168::o;15006:217::-;15046:1;15072;15062:132;;15116:10;15111:3;15107:20;15104:1;15097:31;15151:4;15148:1;15141:15;15179:4;15176:1;15169:15;15062:132;-1:-1:-1;15208:9:1;;15006:217::o;15633:403::-;15835:2;15817:21;;;15874:2;15854:18;;;15847:30;15913:34;15908:2;15893:18;;15886:62;-1:-1:-1;;;15979:2:1;15964:18;;15957:37;16026:3;16011:19;;15633:403::o;19212:184::-;19282:6;19335:2;19323:9;19314:7;19310:23;19306:32;19303:52;;;19351:1;19348;19341:12;19303:52;-1:-1:-1;19374:16:1;;19212:184;-1:-1:-1;19212:184:1:o;19814:469::-;20016:2;19998:21;;;20055:2;20035:18;;;20028:30;20094:34;20089:2;20074:18;;20067:62;20165:34;20160:2;20145:18;;20138:62;-1:-1:-1;;;20231:3:1;20216:19;;20209:32;20273:3;20258:19;;19814:469::o;21135:125::-;21175:4;21203:1;21200;21197:8;21194:34;;;21208:18;;:::i;:::-;-1:-1:-1;21245:9:1;;21135:125::o;21265:980::-;21527:4;21575:3;21564:9;21560:19;21606:6;21595:9;21588:25;21632:2;21670:6;21665:2;21654:9;21650:18;21643:34;21713:3;21708:2;21697:9;21693:18;21686:31;21737:6;21772;21766:13;21803:6;21795;21788:22;21841:3;21830:9;21826:19;21819:26;;21880:2;21872:6;21868:15;21854:29;;21901:1;21911:195;21925:6;21922:1;21919:13;21911:195;;;21990:13;;-1:-1:-1;;;;;21986:39:1;21974:52;;22081:15;;;;22046:12;;;;22022:1;21940:9;21911:195;;;-1:-1:-1;;;;;;;22162:32:1;;;;22157:2;22142:18;;22135:60;-1:-1:-1;;;22226:3:1;22211:19;22204:35;22123:3;21265:980;-1:-1:-1;;;21265:980:1:o;22250:128::-;22290:3;22321:1;22317:6;22314:1;22311:13;22308:39;;;22327:18;;:::i;:::-;-1:-1:-1;22363:9:1;;22250:128::o;23753:306::-;23841:6;23849;23857;23910:2;23898:9;23889:7;23885:23;23881:32;23878:52;;;23926:1;23923;23916:12;23878:52;23955:9;23949:16;23939:26;;24005:2;23994:9;23990:18;23984:25;23974:35;;24049:2;24038:9;24034:18;24028:25;24018:35;;23753:306;;;;;:::o

Swarm Source

ipfs://16e7a5d32834e3ec1476f0e1ff0c1397ad0b4703df208310e213b949e5b52b23

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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