ETH Price: $2,476.19 (+1.50%)
Gas: 8.89 Gwei

Token

Floki Gold ($flokigold)
 

Overview

Max Total Supply

1,000,000 $flokigold

Holders

151

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
925.106359496 $flokigold

Value
$0.00
0xf6c782e47193aaf8ef358672bc5e9d8a67682215
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FlokiGold

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-13
*/

/*

Floki Gold will become the gold standard of all memecoins by providing a 100% safe 
and decentralized token that is owned by the people, for the people — The one token to rule all memecoins!

Telegram: https://t.me/flokigoldeth
Twitter: https://twitter.com/FlokiGoldd

https://medium.com/@riseofcrypto/the-rise-of-floki-gold-2fad5934a8ac

*/
// SPDX-License-Identifier: Unlicensed
 
pragma solidity ^0.6.12;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
 
interface IERC20 {
 
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
 
 
}
 
library SafeMath {
 
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
 
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
library Address {
 
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
 
        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
 
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
 
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
 
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }
 
    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
 
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
 
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
contract Ownable is Context {
    address private _owner;
    address private _creator;
    address private _previousOwner;
    uint256 private _lockTime;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        _creator = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    function owner() public view returns (address) {
        return _owner;
    }
 
    function creator() public view returns (address) {
        return _creator;
    }
 
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    modifier onlyCreator() {
        require(_creator == _msgSender(), "Ownable: caller is not the creator");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
 
    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
 
    function getTime() public view returns (uint256) {
        return now;
    }
 
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract FlokiGold is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
 
	address payable public burningAddress = 0x000000000000000000000000000000000000dEaD; // burn Address
    address payable public marketingAddress = 0xCBFD986FAFae21224d7bb5168Cd876De413eA0AF; // Marketing Address //ToChange
	address payable public devAddress = msg.sender; // Dev Address //ToChange
	address private migrationWallet;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
 
    mapping (address => bool) private _isExcludedFromFee;
 
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
 
    bool public canTrade = false;
 
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
 
    string private constant _name = "Floki Gold";
    string private constant _symbol = "$flokigold";
    uint8 private constant _decimals = 9;

    uint256 public maxWalletHoldings = 20000 * 10**9;
 
    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
 
    uint256 public _liquidityFee = 3;
    uint256 private _previousLiquidityFee = _liquidityFee;
 
    uint256 public _maxTxAmount = 20000 * 10**9;
    uint256 private minimumTokensBeforeSwap = 50 * 10**9; 
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
 
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
 
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
 
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
 
        uniswapV2Router = _uniswapV2Router;
 
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
 
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
 
    function name() external view returns (string memory) {
        return _name;
    }
 
    function symbol() external view returns (string memory) {
        return _symbol;
    }
 
    function decimals() external view returns (uint8) {
        return _decimals;
    }
 
    function totalSupply() external view override returns (uint256) {
        return _tTotal;
    }
 
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[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 removeLimits() external onlyOwner{
        maxWalletHoldings = _tTotal;
    }
 
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {

            if (recipient != burningAddress && recipient != uniswapV2Pair && recipient != marketingAddress && recipient != devAddress  && recipient != address(uniswapV2Router)){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= maxWalletHoldings,"Total Holding is currently limited, you can not buy that much.");

            }
  
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    function isExcludedFromReward(address account) external view returns (bool) {
        return _isExcluded[account];
    }
 
    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
 
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function setMaxWalletHoldings(uint256 amount) public onlyOwner {
        maxWalletHoldings = amount;
    }
 
    function deliver(uint256 tAmount) external {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
 
 
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }
 
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }
 
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
 
    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    function _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");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
 
 
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        if (
            overMinimumTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
 
            swapAndLiquify(contractTokenBalance);
        }
 
 
        bool takeFee = true;
 
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

           if (to != burningAddress && to != uniswapV2Pair && to != marketingAddress && to != devAddress  && to != address(uniswapV2Router)){
            uint256 heldTokens = balanceOf(to);
            require((heldTokens + amount) <= maxWalletHoldings,"Total Holding is currently limited, you can not buy that much.");

            }
 
        _tokenTransfer(from,to,amount,takeFee);
    }
 
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
       
		uint256 liquidityQuota = contractTokenBalance.div(3);
		// 8
        uint256 convertQuota = contractTokenBalance.sub(liquidityQuota);
 
 
        uint256 initialBalance = address(this).balance;
         // swap tokens for ETH
        swapTokensForEth(convertQuota);
 
        // Send to Marketing Address
		uint256 transferredBalance = address(this).balance.sub(initialBalance);
		// -4
		transferForMarketingETH(marketingAddress, transferredBalance.div(2));
 
        uint256 initialBalanceAfterMarket = address(this).balance;
 
 
        // Send to Treasury Address -4
        transferForMarketingETH(devAddress, initialBalanceAfterMarket / 2);
        addLiquidity(liquidityQuota, initialBalanceAfterMarket /2);
 
    }

     function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
 
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devAddress,
            block.timestamp
        );
 
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
    }
 
 
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
 
        if(!canTrade){
            require(sender == owner() || sender == migrationWallet); // only owner allowed to trade or add liquidity
        }
 
        if(!takeFee)
            removeAllFee();
 
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
 
        if(!takeFee)
            restoreAllFee();
    }
 
    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
 
    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
 
    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
 
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
 
    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
 
    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }
 
    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }
 
    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }
 
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
 
    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
 
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
 
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
 
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
 
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
 
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
 
        _taxFee = 0;
        _liquidityFee = 0;
    }
 
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
 
    function isExcludedFromFee(address account) external view returns(bool) {
        return _isExcludedFromFee[account];
    }
 
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
 
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }
 
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require(taxFee < 10, "Tax fee cannot exceed 10%");
        _taxFee = taxFee;
    }
 
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
                require(liquidityFee < 10, "Tax fee cannot exceed 10%");
        _liquidityFee = liquidityFee;
    }
 
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > _tTotal.div(100), "Max TX amount must be superior to 1% of the supply.");
        _maxTxAmount = maxTxAmount;
    }
 
    function allowtrading()external onlyOwner() {
        canTrade = true;
    }
 
    function setMigrationWallet(address walletAddress) external onlyOwner {
        migrationWallet = walletAddress;
    }
 
    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
 
    function setMarketingAddress(address payable _marketingAddress) external onlyOwner() {
        marketingAddress = _marketingAddress;
    }
 
 
    function setBurningAddress(address payable _burningAddress) external onlyOwner() {
        burningAddress = _burningAddress;
    }
 
 
    function setDevAddress(address payable _devAddress) external onlyOwner() {
        devAddress = _devAddress;
    }
 
       function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "Same router");
                 uniswapV2Router = IUniswapV2Router02(newAddress);
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
    }
    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
 
    function transferContractBalance(uint256 amount) external onlyCreator {
        require(amount > 0, "Transfer amount must be greater than zero");
        payable(creator()).transfer(amount);
    }
 
    function transferForMarketingETH(address payable recipient, uint256 amount) public {
        recipient.transfer(amount);
    }
 
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":"burningAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","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":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_burningAddress","type":"address"}],"name":"setBurningAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletHoldings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMigrationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferContractBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferForMarketingETH","outputs":[],"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":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600480546001600160a01b031990811661dead1790915560058054821673cbfd986fafae21224d7bb5168cd876de413ea0af1790556006805490911633179055600e805460ff1916905566038d7ea4c680006000190619600f556512309ce5400060118190556003601281905560138190556014819055601555601655640ba43b74006017556019805460ff60a81b1916600160a81b179055348015620000aa57600080fd5b506000620000b7620003a2565b600080546001600160a01b0383166001600160a01b031991821681178355600180549092168117909155604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600f54600860006200011f620003a2565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200019657600080fd5b505afa158015620001ab573d6000803e3d6000fd5b505050506040513d6020811015620001c257600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200021357600080fd5b505afa15801562000228573d6000803e3d6000fd5b505050506040513d60208110156200023f57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200029257600080fd5b505af1158015620002a7573d6000803e3d6000fd5b505050506040513d6020811015620002be57600080fd5b5051601980546001600160a01b03199081166001600160a01b0393841617909155601880549091169183169190911790556001600b6000620002ff620003a6565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b90925290208054909116600117905562000349620003a2565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef66038d7ea4c680006040518082815260200191505060405180910390a350620003b5565b3390565b6000546001600160a01b031690565b61337c80620003c56000396000f3fe6080604052600436106103395760003560e01c80636bc87c3a116101ab578063a457c2d7116100f7578063c49b9a8011610095578063ea2f0b371161006f578063ea2f0b3714610b32578063ec28438a14610b65578063f0f165af14610b8f578063f2fde38b14610bb957610340565b8063c49b9a8014610a98578063d0d41fe114610ac4578063dd62ed3e14610af757610340565b8063a9059cbb116100d1578063a9059cbb146109ed578063a9ef40d614610a26578063b7ea78b514610a59578063beee20dc14610a6e57610340565b8063a457c2d71461098a578063a5ece941146109c3578063a6334231146109d857610340565b80638bd7f63311610164578063906e9dd01161013e578063906e9dd01461090357806395d89b411461093657806399061beb1461094b578063a073d37f1461097557610340565b80638bd7f6331461088b5780638da5cb5b146108c45780638ee88c53146108d957610340565b80636bc87c3a146107d157806370a08231146107e6578063715018a614610819578063751039fc1461082e5780637d1db4a51461084357806388f820201461085857610340565b8063395093511161028557806349bd5a5e116102235780635342acb4116101fd5780635342acb414610741578063557ed1ba14610774578063602bc62b1461078957806365b8dbc01461079e57610340565b806349bd5a5e146106e45780634a74bb02146106f957806352390c021461070e57610340565b80633bd5d1731161025f5780633bd5d17314610640578063437823ec1461066a5780634549b0391461069d57806348112396146106cf57610340565b806339509351146105dd5780633ad10ef6146106165780633b124fe71461062b57610340565b806318160ddd116102f25780632d838119116102cc5780632d838119146105405780632f05205c1461056a578063313ce5671461057f5780633685d419146105aa57610340565b806318160ddd146104b557806323b872dd146104ca5780632a4555921461050d57610340565b806302d05d3f14610345578063061c82d01461037657806306fdde03146103a2578063095ea7b31461042c57806313114a9d146104795780631694505e146104a057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610bec565b604080516001600160a01b039092168252519081900360200190f35b34801561038257600080fd5b506103a06004803603602081101561039957600080fd5b5035610bfb565b005b3480156103ae57600080fd5b506103b7610ca9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103f15781810151838201526020016103d9565b50505050905090810190601f16801561041e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561043857600080fd5b506104656004803603604081101561044f57600080fd5b506001600160a01b038135169060200135610ccd565b604080519115158252519081900360200190f35b34801561048557600080fd5b5061048e610ceb565b60408051918252519081900360200190f35b3480156104ac57600080fd5b5061035a610cf1565b3480156104c157600080fd5b5061048e610d00565b3480156104d657600080fd5b50610465600480360360608110156104ed57600080fd5b506001600160a01b03813581169160208101359091169060400135610d0b565b34801561051957600080fd5b506103a06004803603602081101561053057600080fd5b50356001600160a01b0316610e64565b34801561054c57600080fd5b5061048e6004803603602081101561056357600080fd5b5035610ede565b34801561057657600080fd5b50610465610f40565b34801561058b57600080fd5b50610594610f49565b6040805160ff9092168252519081900360200190f35b3480156105b657600080fd5b506103a0600480360360208110156105cd57600080fd5b50356001600160a01b0316610f4e565b3480156105e957600080fd5b506104656004803603604081101561060057600080fd5b506001600160a01b03813516906020013561110f565b34801561062257600080fd5b5061035a61115d565b34801561063757600080fd5b5061048e61116c565b34801561064c57600080fd5b506103a06004803603602081101561066357600080fd5b5035611172565b34801561067657600080fd5b506103a06004803603602081101561068d57600080fd5b50356001600160a01b031661124c565b3480156106a957600080fd5b5061048e600480360360408110156106c057600080fd5b508035906020013515156112c8565b3480156106db57600080fd5b5061035a61135f565b3480156106f057600080fd5b5061035a61136e565b34801561070557600080fd5b5061046561137d565b34801561071a57600080fd5b506103a06004803603602081101561073157600080fd5b50356001600160a01b031661138d565b34801561074d57600080fd5b506104656004803603602081101561076457600080fd5b50356001600160a01b0316611513565b34801561078057600080fd5b5061048e611531565b34801561079557600080fd5b5061048e611535565b3480156107aa57600080fd5b506103a0600480360360208110156107c157600080fd5b50356001600160a01b031661153b565b3480156107dd57600080fd5b5061048e611633565b3480156107f257600080fd5b5061048e6004803603602081101561080957600080fd5b50356001600160a01b0316611639565b34801561082557600080fd5b506103a061169b565b34801561083a57600080fd5b506103a061173d565b34801561084f57600080fd5b5061048e6117a2565b34801561086457600080fd5b506104656004803603602081101561087b57600080fd5b50356001600160a01b03166117a8565b34801561089757600080fd5b506103a0600480360360408110156108ae57600080fd5b506001600160a01b0381351690602001356117c6565b3480156108d057600080fd5b5061035a611801565b3480156108e557600080fd5b506103a0600480360360208110156108fc57600080fd5b5035611810565b34801561090f57600080fd5b506103a06004803603602081101561092657600080fd5b50356001600160a01b03166118be565b34801561094257600080fd5b506103b7611938565b34801561095757600080fd5b506103a06004803603602081101561096e57600080fd5b503561195c565b34801561098157600080fd5b5061048e6119b9565b34801561099657600080fd5b50610465600480360360408110156109ad57600080fd5b506001600160a01b0381351690602001356119bf565b3480156109cf57600080fd5b5061035a611a27565b3480156109e457600080fd5b506103a0611a36565b3480156109f957600080fd5b5061046560048036036040811015610a1057600080fd5b506001600160a01b038135169060200135611a9d565b348015610a3257600080fd5b506103a060048036036020811015610a4957600080fd5b50356001600160a01b0316611ab1565b348015610a6557600080fd5b5061048e611b2b565b348015610a7a57600080fd5b506103a060048036036020811015610a9157600080fd5b5035611b31565b348015610aa457600080fd5b506103a060048036036020811015610abb57600080fd5b50351515611c04565b348015610ad057600080fd5b506103a060048036036020811015610ae757600080fd5b50356001600160a01b0316611caf565b348015610b0357600080fd5b5061048e60048036036040811015610b1a57600080fd5b506001600160a01b0381358116916020013516611d29565b348015610b3e57600080fd5b506103a060048036036020811015610b5557600080fd5b50356001600160a01b0316611d54565b348015610b7157600080fd5b506103a060048036036020811015610b8857600080fd5b5035611dcd565b348015610b9b57600080fd5b506103a060048036036020811015610bb257600080fd5b5035611e79565b348015610bc557600080fd5b506103a060048036036020811015610bdc57600080fd5b50356001600160a01b0316611ed6565b6001546001600160a01b031690565b610c03611fce565b6000546001600160a01b03908116911614610c53576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600a8110610ca4576040805162461bcd60e51b8152602060048201526019602482015278546178206665652063616e6e6f74206578636565642031302560381b604482015290519081900360640190fd5b601255565b60408051808201909152600a815269119b1bdada4811dbdb1960b21b602082015290565b6000610ce1610cda611fce565b8484611fd2565b5060015b92915050565b60105490565b6018546001600160a01b031681565b66038d7ea4c6800090565b6004546000906001600160a01b03848116911614801590610d3a57506019546001600160a01b03848116911614155b8015610d5457506005546001600160a01b03848116911614155b8015610d6e57506006546001600160a01b03848116911614155b8015610d8857506018546001600160a01b03848116911614155b15610ddf576000610d9884611639565b90506011548382011115610ddd5760405162461bcd60e51b815260040180806020018281038252603e81526020018061324d603e913960400191505060405180910390fd5b505b610dea8484846120be565b610e5a84610df6611fce565b610e55856040518060600160405280602881526020016131dc602891396001600160a01b038a166000908152600a6020526040812090610e34611fce565b6001600160a01b0316815260208101919091526040016000205491906123a8565b611fd2565b5060019392505050565b610e6c611fce565b6000546001600160a01b03908116911614610ebc576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000600f54821115610f215760405162461bcd60e51b815260040180806020018281038252602a8152602001806130ee602a913960400191505060405180910390fd5b6000610f2b61243f565b9050610f378382612462565b9150505b919050565b600e5460ff1681565b600990565b610f56611fce565b6000546001600160a01b03908116911614610fa6576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600c602052604090205460ff16611013576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600d5481101561110b57816001600160a01b0316600d828154811061103757fe5b6000918252602090912001546001600160a01b0316141561110357600d8054600019810190811061106457fe5b600091825260209091200154600d80546001600160a01b03909216918390811061108a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600c90925220805460ff19169055600d8054806110dc57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561110b565b600101611016565b5050565b6000610ce161111c611fce565b84610e5585600a600061112d611fce565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906124ab565b6006546001600160a01b031681565b60125481565b600061117c611fce565b6001600160a01b0381166000908152600c602052604090205490915060ff16156111d75760405162461bcd60e51b815260040180806020018281038252602c8152602001806132f6602c913960400191505060405180910390fd5b60006111e283612505565b505050506001600160a01b03841660009081526008602052604090205491925061120e91905082612554565b6001600160a01b038316600090815260086020526040902055600f546112349082612554565b600f5560105461124490846124ab565b601055505050565b611254611fce565b6000546001600160a01b039081169116146112a4576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b600066038d7ea4c68000831115611326576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161134557600061133684612505565b50939550610ce5945050505050565b600061135084612505565b50929550610ce5945050505050565b6004546001600160a01b031681565b6019546001600160a01b031681565b601954600160a81b900460ff1681565b611395611fce565b6000546001600160a01b039081169116146113e5576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600c602052604090205460ff1615611453576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260086020526040902054156114ad576001600160a01b03811660009081526008602052604090205461149390610ede565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6001600160a01b03166000908152600b602052604090205460ff1690565b4290565b60035490565b611543611fce565b6000546001600160a01b03908116911614611593576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6018546001600160a01b03828116911614156115e4576040805162461bcd60e51b815260206004820152600b60248201526a29b0b6b2903937baba32b960a91b604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b03838116918217928390556040519216917f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a350565b60145481565b6001600160a01b0381166000908152600c602052604081205460ff161561167957506001600160a01b038116600090815260096020526040902054610f3b565b6001600160a01b038216600090815260086020526040902054610ce590610ede565b6116a3611fce565b6000546001600160a01b039081169116146116f3576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b611745611fce565b6000546001600160a01b03908116911614611795576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b66038d7ea4c68000601155565b60165481565b6001600160a01b03166000908152600c602052604090205460ff1690565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117fc573d6000803e3d6000fd5b505050565b6000546001600160a01b031690565b611818611fce565b6000546001600160a01b03908116911614611868576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600a81106118b9576040805162461bcd60e51b8152602060048201526019602482015278546178206665652063616e6e6f74206578636565642031302560381b604482015290519081900360640190fd5b601455565b6118c6611fce565b6000546001600160a01b03908116911614611916576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600a81526909199b1bdada59dbdb1960b21b602082015290565b611964611fce565b6000546001600160a01b039081169116146119b4576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b601155565b60175490565b6000610ce16119cc611fce565b84610e558560405180606001604052806025815260200161332260259139600a60006119f6611fce565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906123a8565b6005546001600160a01b031681565b611a3e611fce565b6000546001600160a01b03908116911614611a8e576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600e805460ff19166001179055565b6000610ce1611aaa611fce565b84846120be565b611ab9611fce565b6000546001600160a01b03908116911614611b09576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60115481565b611b39611fce565b6001546001600160a01b03908116911614611b855760405162461bcd60e51b815260040180806020018281038252602281526020018061328b6022913960400191505060405180910390fd5b60008111611bc45760405162461bcd60e51b81526004018080602001828103825260298152602001806132246029913960400191505060405180910390fd5b611bcc610bec565b6001600160a01b03166108fc829081150290604051600060405180830381858888f1935050505015801561110b573d6000803e3d6000fd5b611c0c611fce565b6000546001600160a01b03908116911614611c5c576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b60198054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611cb7611fce565b6000546001600160a01b03908116911614611d07576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b611d5c611fce565b6000546001600160a01b03908116911614611dac576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b611dd5611fce565b6000546001600160a01b03908116911614611e25576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b611e3766038d7ea4c680006064612462565b8111611e745760405162461bcd60e51b81526004018080602001828103825260338152602001806131606033913960400191505060405180910390fd5b601655565b611e81611fce565b6000546001600160a01b03908116911614611ed1576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b601755565b611ede611fce565b6000546001600160a01b03908116911614611f2e576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b038116611f735760405162461bcd60e51b81526004018080602001828103825260268152602001806131186026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166120175760405162461bcd60e51b81526004018080602001828103825260248152602001806132d26024913960400191505060405180910390fd5b6001600160a01b03821661205c5760405162461bcd60e51b815260040180806020018281038252602281526020018061313e6022913960400191505060405180910390fd5b6001600160a01b038084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166121035760405162461bcd60e51b81526004018080602001828103825260258152602001806132ad6025913960400191505060405180910390fd5b6001600160a01b0382166121485760405162461bcd60e51b81526004018080602001828103825260238152602001806130cb6023913960400191505060405180910390fd5b600081116121875760405162461bcd60e51b81526004018080602001828103825260298152602001806132246029913960400191505060405180910390fd5b61218f611801565b6001600160a01b0316836001600160a01b0316141580156121c957506121b3611801565b6001600160a01b0316826001600160a01b031614155b1561220f5760165481111561220f5760405162461bcd60e51b81526004018080602001828103825260288152602001806131936028913960400191505060405180910390fd5b600061221a30611639565b6017549091508110801590819061223b5750601954600160a01b900460ff16155b801561225557506019546001600160a01b03868116911614155b801561226a5750601954600160a81b900460ff165b156122785761227882612596565b6001600160a01b0385166000908152600b602052604090205460019060ff16806122ba57506001600160a01b0385166000908152600b602052604090205460ff165b156122c3575060005b6004546001600160a01b038681169116148015906122ef57506019546001600160a01b03868116911614155b801561230957506005546001600160a01b03868116911614155b801561232357506006546001600160a01b03868116911614155b801561233d57506018546001600160a01b03868116911614155b1561239457600061234d86611639565b905060115485820111156123925760405162461bcd60e51b815260040180806020018281038252603e81526020018061324d603e913960400191505060405180910390fd5b505b6123a08686868461263c565b505050505050565b600081848411156124375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123fc5781810151838201526020016123e4565b50505050905090810190601f1680156124295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061244c6127f7565b909250905061245b8282612462565b9250505090565b60006124a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061296e565b9392505050565b6000828201838110156124a4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600080600080600061251c8a6129d3565b925092509250600080600061253a8d868661253561243f565b612a15565b919f909e50909c50959a5093985091965092945050505050565b60006124a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a8565b6019805460ff60a01b1916600160a01b17905560006125b6826003612462565b905060006125c48383612554565b9050476125d082612a65565b60006125dc4783612554565b6005549091506125ff906001600160a01b03166125fa836002612462565b6117c6565b600654479061261a906001600160a01b0316600283046117c6565b6126278560028304612c0b565b50506019805460ff60a01b1916905550505050565b600e5460ff166126835761264e611801565b6001600160a01b0316846001600160a01b0316148061267a57506007546001600160a01b038581169116145b61268357600080fd5b8061269057612690612cc3565b6001600160a01b0384166000908152600c602052604090205460ff1680156126d157506001600160a01b0383166000908152600c602052604090205460ff16155b156126e6576126e1848484612cf5565b6127e4565b6001600160a01b0384166000908152600c602052604090205460ff1615801561272757506001600160a01b0383166000908152600c602052604090205460ff165b15612737576126e1848484612e19565b6001600160a01b0384166000908152600c602052604090205460ff1615801561277957506001600160a01b0383166000908152600c602052604090205460ff16155b15612789576126e1848484612ec2565b6001600160a01b0384166000908152600c602052604090205460ff1680156127c957506001600160a01b0383166000908152600c602052604090205460ff165b156127d9576126e1848484612f06565b6127e4848484612ec2565b806127f1576127f1612f79565b50505050565b600f54600090819066038d7ea4c68000825b600d54811015612932578260086000600d848154811061282557fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061288a57508160096000600d848154811061286357fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128a657600f5466038d7ea4c680009450945050505061296a565b6128e660086000600d84815481106128ba57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612554565b925061292860096000600d84815481106128fc57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612554565b9150600101612809565b50600f546129479066038d7ea4c68000612462565b82101561296457600f5466038d7ea4c6800093509350505061296a565b90925090505b9091565b600081836129bd5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156123fc5781810151838201526020016123e4565b5060008385816129c957fe5b0495945050505050565b6000806000806129e285612f87565b905060006129ef86612fa9565b90506000612a0782612a018986612554565b90612554565b979296509094509092505050565b6000808080612a248886612fc5565b90506000612a328887612fc5565b90506000612a408888612fc5565b90506000612a5282612a018686612554565b939b939a50919850919650505050505050565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612a9357fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612ae757600080fd5b505afa158015612afb573d6000803e3d6000fd5b505050506040513d6020811015612b1157600080fd5b5051815182906001908110612b2257fe5b6001600160a01b039283166020918202929092010152601854612b489130911684611fd2565b60185460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612bce578181015183820152602001612bb6565b505050509050019650505050505050600060405180830381600087803b158015612bf757600080fd5b505af11580156123a0573d6000803e3d6000fd5b601854612c239030906001600160a01b031684611fd2565b6018546006546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612c9857600080fd5b505af1158015612cac573d6000803e3d6000fd5b50505050506040513d60608110156127f157600080fd5b601254158015612cd35750601454155b15612cdd57612cf3565b6012805460135560148054601555600091829055555b565b600080600080600080612d0787612505565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150612d399088612554565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054612d689087612554565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054612d9790866124ab565b6001600160a01b038916600090815260086020526040902055612db98161301e565b612dc384836130a6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080612e2b87612505565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612e5d9087612554565b6001600160a01b03808b16600090815260086020908152604080832094909455918b16815260099091522054612e9390846124ab565b6001600160a01b038916600090815260096020908152604080832093909355600890522054612d9790866124ab565b600080600080600080612ed487612505565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612d689087612554565b600080600080600080612f1887612505565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150612f4a9088612554565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054612e5d9087612554565b601354601255601554601455565b6000610ce56064612fa360125485612fc590919063ffffffff16565b90612462565b6000610ce56064612fa360145485612fc590919063ffffffff16565b600082612fd457506000610ce5565b82820282848281612fe157fe5b04146124a45760405162461bcd60e51b81526004018080602001828103825260218152602001806131bb6021913960400191505060405180910390fd5b600061302861243f565b905060006130368383612fc5565b3060009081526008602052604090205490915061305390826124ab565b30600090815260086020908152604080832093909355600c9052205460ff16156117fc573060009081526009602052604090205461309190846124ab565b30600090815260096020526040902055505050565b600f546130b39083612554565b600f556010546130c390826124ab565b601055505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734d617820545820616d6f756e74206d757374206265207375706572696f7220746f203125206f662074686520737570706c792e5472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682e4f776e61626c653a2063616c6c6572206973206e6f74207468652063726561746f7245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dca72b5233c7c3367987df56e2749b2cbb064e317f57c7d04591416babedab7764736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80636bc87c3a116101ab578063a457c2d7116100f7578063c49b9a8011610095578063ea2f0b371161006f578063ea2f0b3714610b32578063ec28438a14610b65578063f0f165af14610b8f578063f2fde38b14610bb957610340565b8063c49b9a8014610a98578063d0d41fe114610ac4578063dd62ed3e14610af757610340565b8063a9059cbb116100d1578063a9059cbb146109ed578063a9ef40d614610a26578063b7ea78b514610a59578063beee20dc14610a6e57610340565b8063a457c2d71461098a578063a5ece941146109c3578063a6334231146109d857610340565b80638bd7f63311610164578063906e9dd01161013e578063906e9dd01461090357806395d89b411461093657806399061beb1461094b578063a073d37f1461097557610340565b80638bd7f6331461088b5780638da5cb5b146108c45780638ee88c53146108d957610340565b80636bc87c3a146107d157806370a08231146107e6578063715018a614610819578063751039fc1461082e5780637d1db4a51461084357806388f820201461085857610340565b8063395093511161028557806349bd5a5e116102235780635342acb4116101fd5780635342acb414610741578063557ed1ba14610774578063602bc62b1461078957806365b8dbc01461079e57610340565b806349bd5a5e146106e45780634a74bb02146106f957806352390c021461070e57610340565b80633bd5d1731161025f5780633bd5d17314610640578063437823ec1461066a5780634549b0391461069d57806348112396146106cf57610340565b806339509351146105dd5780633ad10ef6146106165780633b124fe71461062b57610340565b806318160ddd116102f25780632d838119116102cc5780632d838119146105405780632f05205c1461056a578063313ce5671461057f5780633685d419146105aa57610340565b806318160ddd146104b557806323b872dd146104ca5780632a4555921461050d57610340565b806302d05d3f14610345578063061c82d01461037657806306fdde03146103a2578063095ea7b31461042c57806313114a9d146104795780631694505e146104a057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610bec565b604080516001600160a01b039092168252519081900360200190f35b34801561038257600080fd5b506103a06004803603602081101561039957600080fd5b5035610bfb565b005b3480156103ae57600080fd5b506103b7610ca9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103f15781810151838201526020016103d9565b50505050905090810190601f16801561041e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561043857600080fd5b506104656004803603604081101561044f57600080fd5b506001600160a01b038135169060200135610ccd565b604080519115158252519081900360200190f35b34801561048557600080fd5b5061048e610ceb565b60408051918252519081900360200190f35b3480156104ac57600080fd5b5061035a610cf1565b3480156104c157600080fd5b5061048e610d00565b3480156104d657600080fd5b50610465600480360360608110156104ed57600080fd5b506001600160a01b03813581169160208101359091169060400135610d0b565b34801561051957600080fd5b506103a06004803603602081101561053057600080fd5b50356001600160a01b0316610e64565b34801561054c57600080fd5b5061048e6004803603602081101561056357600080fd5b5035610ede565b34801561057657600080fd5b50610465610f40565b34801561058b57600080fd5b50610594610f49565b6040805160ff9092168252519081900360200190f35b3480156105b657600080fd5b506103a0600480360360208110156105cd57600080fd5b50356001600160a01b0316610f4e565b3480156105e957600080fd5b506104656004803603604081101561060057600080fd5b506001600160a01b03813516906020013561110f565b34801561062257600080fd5b5061035a61115d565b34801561063757600080fd5b5061048e61116c565b34801561064c57600080fd5b506103a06004803603602081101561066357600080fd5b5035611172565b34801561067657600080fd5b506103a06004803603602081101561068d57600080fd5b50356001600160a01b031661124c565b3480156106a957600080fd5b5061048e600480360360408110156106c057600080fd5b508035906020013515156112c8565b3480156106db57600080fd5b5061035a61135f565b3480156106f057600080fd5b5061035a61136e565b34801561070557600080fd5b5061046561137d565b34801561071a57600080fd5b506103a06004803603602081101561073157600080fd5b50356001600160a01b031661138d565b34801561074d57600080fd5b506104656004803603602081101561076457600080fd5b50356001600160a01b0316611513565b34801561078057600080fd5b5061048e611531565b34801561079557600080fd5b5061048e611535565b3480156107aa57600080fd5b506103a0600480360360208110156107c157600080fd5b50356001600160a01b031661153b565b3480156107dd57600080fd5b5061048e611633565b3480156107f257600080fd5b5061048e6004803603602081101561080957600080fd5b50356001600160a01b0316611639565b34801561082557600080fd5b506103a061169b565b34801561083a57600080fd5b506103a061173d565b34801561084f57600080fd5b5061048e6117a2565b34801561086457600080fd5b506104656004803603602081101561087b57600080fd5b50356001600160a01b03166117a8565b34801561089757600080fd5b506103a0600480360360408110156108ae57600080fd5b506001600160a01b0381351690602001356117c6565b3480156108d057600080fd5b5061035a611801565b3480156108e557600080fd5b506103a0600480360360208110156108fc57600080fd5b5035611810565b34801561090f57600080fd5b506103a06004803603602081101561092657600080fd5b50356001600160a01b03166118be565b34801561094257600080fd5b506103b7611938565b34801561095757600080fd5b506103a06004803603602081101561096e57600080fd5b503561195c565b34801561098157600080fd5b5061048e6119b9565b34801561099657600080fd5b50610465600480360360408110156109ad57600080fd5b506001600160a01b0381351690602001356119bf565b3480156109cf57600080fd5b5061035a611a27565b3480156109e457600080fd5b506103a0611a36565b3480156109f957600080fd5b5061046560048036036040811015610a1057600080fd5b506001600160a01b038135169060200135611a9d565b348015610a3257600080fd5b506103a060048036036020811015610a4957600080fd5b50356001600160a01b0316611ab1565b348015610a6557600080fd5b5061048e611b2b565b348015610a7a57600080fd5b506103a060048036036020811015610a9157600080fd5b5035611b31565b348015610aa457600080fd5b506103a060048036036020811015610abb57600080fd5b50351515611c04565b348015610ad057600080fd5b506103a060048036036020811015610ae757600080fd5b50356001600160a01b0316611caf565b348015610b0357600080fd5b5061048e60048036036040811015610b1a57600080fd5b506001600160a01b0381358116916020013516611d29565b348015610b3e57600080fd5b506103a060048036036020811015610b5557600080fd5b50356001600160a01b0316611d54565b348015610b7157600080fd5b506103a060048036036020811015610b8857600080fd5b5035611dcd565b348015610b9b57600080fd5b506103a060048036036020811015610bb257600080fd5b5035611e79565b348015610bc557600080fd5b506103a060048036036020811015610bdc57600080fd5b50356001600160a01b0316611ed6565b6001546001600160a01b031690565b610c03611fce565b6000546001600160a01b03908116911614610c53576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600a8110610ca4576040805162461bcd60e51b8152602060048201526019602482015278546178206665652063616e6e6f74206578636565642031302560381b604482015290519081900360640190fd5b601255565b60408051808201909152600a815269119b1bdada4811dbdb1960b21b602082015290565b6000610ce1610cda611fce565b8484611fd2565b5060015b92915050565b60105490565b6018546001600160a01b031681565b66038d7ea4c6800090565b6004546000906001600160a01b03848116911614801590610d3a57506019546001600160a01b03848116911614155b8015610d5457506005546001600160a01b03848116911614155b8015610d6e57506006546001600160a01b03848116911614155b8015610d8857506018546001600160a01b03848116911614155b15610ddf576000610d9884611639565b90506011548382011115610ddd5760405162461bcd60e51b815260040180806020018281038252603e81526020018061324d603e913960400191505060405180910390fd5b505b610dea8484846120be565b610e5a84610df6611fce565b610e55856040518060600160405280602881526020016131dc602891396001600160a01b038a166000908152600a6020526040812090610e34611fce565b6001600160a01b0316815260208101919091526040016000205491906123a8565b611fd2565b5060019392505050565b610e6c611fce565b6000546001600160a01b03908116911614610ebc576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000600f54821115610f215760405162461bcd60e51b815260040180806020018281038252602a8152602001806130ee602a913960400191505060405180910390fd5b6000610f2b61243f565b9050610f378382612462565b9150505b919050565b600e5460ff1681565b600990565b610f56611fce565b6000546001600160a01b03908116911614610fa6576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600c602052604090205460ff16611013576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600d5481101561110b57816001600160a01b0316600d828154811061103757fe5b6000918252602090912001546001600160a01b0316141561110357600d8054600019810190811061106457fe5b600091825260209091200154600d80546001600160a01b03909216918390811061108a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600c90925220805460ff19169055600d8054806110dc57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561110b565b600101611016565b5050565b6000610ce161111c611fce565b84610e5585600a600061112d611fce565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906124ab565b6006546001600160a01b031681565b60125481565b600061117c611fce565b6001600160a01b0381166000908152600c602052604090205490915060ff16156111d75760405162461bcd60e51b815260040180806020018281038252602c8152602001806132f6602c913960400191505060405180910390fd5b60006111e283612505565b505050506001600160a01b03841660009081526008602052604090205491925061120e91905082612554565b6001600160a01b038316600090815260086020526040902055600f546112349082612554565b600f5560105461124490846124ab565b601055505050565b611254611fce565b6000546001600160a01b039081169116146112a4576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b600066038d7ea4c68000831115611326576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161134557600061133684612505565b50939550610ce5945050505050565b600061135084612505565b50929550610ce5945050505050565b6004546001600160a01b031681565b6019546001600160a01b031681565b601954600160a81b900460ff1681565b611395611fce565b6000546001600160a01b039081169116146113e5576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600c602052604090205460ff1615611453576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260086020526040902054156114ad576001600160a01b03811660009081526008602052604090205461149390610ede565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6001600160a01b03166000908152600b602052604090205460ff1690565b4290565b60035490565b611543611fce565b6000546001600160a01b03908116911614611593576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6018546001600160a01b03828116911614156115e4576040805162461bcd60e51b815260206004820152600b60248201526a29b0b6b2903937baba32b960a91b604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b03838116918217928390556040519216917f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a350565b60145481565b6001600160a01b0381166000908152600c602052604081205460ff161561167957506001600160a01b038116600090815260096020526040902054610f3b565b6001600160a01b038216600090815260086020526040902054610ce590610ede565b6116a3611fce565b6000546001600160a01b039081169116146116f3576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b611745611fce565b6000546001600160a01b03908116911614611795576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b66038d7ea4c68000601155565b60165481565b6001600160a01b03166000908152600c602052604090205460ff1690565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117fc573d6000803e3d6000fd5b505050565b6000546001600160a01b031690565b611818611fce565b6000546001600160a01b03908116911614611868576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600a81106118b9576040805162461bcd60e51b8152602060048201526019602482015278546178206665652063616e6e6f74206578636565642031302560381b604482015290519081900360640190fd5b601455565b6118c6611fce565b6000546001600160a01b03908116911614611916576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600a81526909199b1bdada59dbdb1960b21b602082015290565b611964611fce565b6000546001600160a01b039081169116146119b4576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b601155565b60175490565b6000610ce16119cc611fce565b84610e558560405180606001604052806025815260200161332260259139600a60006119f6611fce565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906123a8565b6005546001600160a01b031681565b611a3e611fce565b6000546001600160a01b03908116911614611a8e576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600e805460ff19166001179055565b6000610ce1611aaa611fce565b84846120be565b611ab9611fce565b6000546001600160a01b03908116911614611b09576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60115481565b611b39611fce565b6001546001600160a01b03908116911614611b855760405162461bcd60e51b815260040180806020018281038252602281526020018061328b6022913960400191505060405180910390fd5b60008111611bc45760405162461bcd60e51b81526004018080602001828103825260298152602001806132246029913960400191505060405180910390fd5b611bcc610bec565b6001600160a01b03166108fc829081150290604051600060405180830381858888f1935050505015801561110b573d6000803e3d6000fd5b611c0c611fce565b6000546001600160a01b03908116911614611c5c576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b60198054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b611cb7611fce565b6000546001600160a01b03908116911614611d07576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b611d5c611fce565b6000546001600160a01b03908116911614611dac576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b611dd5611fce565b6000546001600160a01b03908116911614611e25576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b611e3766038d7ea4c680006064612462565b8111611e745760405162461bcd60e51b81526004018080602001828103825260338152602001806131606033913960400191505060405180910390fd5b601655565b611e81611fce565b6000546001600160a01b03908116911614611ed1576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b601755565b611ede611fce565b6000546001600160a01b03908116911614611f2e576040805162461bcd60e51b81526020600482018190526024820152600080516020613204833981519152604482015290519081900360640190fd5b6001600160a01b038116611f735760405162461bcd60e51b81526004018080602001828103825260268152602001806131186026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166120175760405162461bcd60e51b81526004018080602001828103825260248152602001806132d26024913960400191505060405180910390fd5b6001600160a01b03821661205c5760405162461bcd60e51b815260040180806020018281038252602281526020018061313e6022913960400191505060405180910390fd5b6001600160a01b038084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166121035760405162461bcd60e51b81526004018080602001828103825260258152602001806132ad6025913960400191505060405180910390fd5b6001600160a01b0382166121485760405162461bcd60e51b81526004018080602001828103825260238152602001806130cb6023913960400191505060405180910390fd5b600081116121875760405162461bcd60e51b81526004018080602001828103825260298152602001806132246029913960400191505060405180910390fd5b61218f611801565b6001600160a01b0316836001600160a01b0316141580156121c957506121b3611801565b6001600160a01b0316826001600160a01b031614155b1561220f5760165481111561220f5760405162461bcd60e51b81526004018080602001828103825260288152602001806131936028913960400191505060405180910390fd5b600061221a30611639565b6017549091508110801590819061223b5750601954600160a01b900460ff16155b801561225557506019546001600160a01b03868116911614155b801561226a5750601954600160a81b900460ff165b156122785761227882612596565b6001600160a01b0385166000908152600b602052604090205460019060ff16806122ba57506001600160a01b0385166000908152600b602052604090205460ff165b156122c3575060005b6004546001600160a01b038681169116148015906122ef57506019546001600160a01b03868116911614155b801561230957506005546001600160a01b03868116911614155b801561232357506006546001600160a01b03868116911614155b801561233d57506018546001600160a01b03868116911614155b1561239457600061234d86611639565b905060115485820111156123925760405162461bcd60e51b815260040180806020018281038252603e81526020018061324d603e913960400191505060405180910390fd5b505b6123a08686868461263c565b505050505050565b600081848411156124375760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123fc5781810151838201526020016123e4565b50505050905090810190601f1680156124295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061244c6127f7565b909250905061245b8282612462565b9250505090565b60006124a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061296e565b9392505050565b6000828201838110156124a4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600080600080600061251c8a6129d3565b925092509250600080600061253a8d868661253561243f565b612a15565b919f909e50909c50959a5093985091965092945050505050565b60006124a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a8565b6019805460ff60a01b1916600160a01b17905560006125b6826003612462565b905060006125c48383612554565b9050476125d082612a65565b60006125dc4783612554565b6005549091506125ff906001600160a01b03166125fa836002612462565b6117c6565b600654479061261a906001600160a01b0316600283046117c6565b6126278560028304612c0b565b50506019805460ff60a01b1916905550505050565b600e5460ff166126835761264e611801565b6001600160a01b0316846001600160a01b0316148061267a57506007546001600160a01b038581169116145b61268357600080fd5b8061269057612690612cc3565b6001600160a01b0384166000908152600c602052604090205460ff1680156126d157506001600160a01b0383166000908152600c602052604090205460ff16155b156126e6576126e1848484612cf5565b6127e4565b6001600160a01b0384166000908152600c602052604090205460ff1615801561272757506001600160a01b0383166000908152600c602052604090205460ff165b15612737576126e1848484612e19565b6001600160a01b0384166000908152600c602052604090205460ff1615801561277957506001600160a01b0383166000908152600c602052604090205460ff16155b15612789576126e1848484612ec2565b6001600160a01b0384166000908152600c602052604090205460ff1680156127c957506001600160a01b0383166000908152600c602052604090205460ff165b156127d9576126e1848484612f06565b6127e4848484612ec2565b806127f1576127f1612f79565b50505050565b600f54600090819066038d7ea4c68000825b600d54811015612932578260086000600d848154811061282557fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061288a57508160096000600d848154811061286357fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128a657600f5466038d7ea4c680009450945050505061296a565b6128e660086000600d84815481106128ba57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612554565b925061292860096000600d84815481106128fc57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612554565b9150600101612809565b50600f546129479066038d7ea4c68000612462565b82101561296457600f5466038d7ea4c6800093509350505061296a565b90925090505b9091565b600081836129bd5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156123fc5781810151838201526020016123e4565b5060008385816129c957fe5b0495945050505050565b6000806000806129e285612f87565b905060006129ef86612fa9565b90506000612a0782612a018986612554565b90612554565b979296509094509092505050565b6000808080612a248886612fc5565b90506000612a328887612fc5565b90506000612a408888612fc5565b90506000612a5282612a018686612554565b939b939a50919850919650505050505050565b60408051600280825260608083018452926020830190803683370190505090503081600081518110612a9357fe5b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612ae757600080fd5b505afa158015612afb573d6000803e3d6000fd5b505050506040513d6020811015612b1157600080fd5b5051815182906001908110612b2257fe5b6001600160a01b039283166020918202929092010152601854612b489130911684611fd2565b60185460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b83811015612bce578181015183820152602001612bb6565b505050509050019650505050505050600060405180830381600087803b158015612bf757600080fd5b505af11580156123a0573d6000803e3d6000fd5b601854612c239030906001600160a01b031684611fd2565b6018546006546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b158015612c9857600080fd5b505af1158015612cac573d6000803e3d6000fd5b50505050506040513d60608110156127f157600080fd5b601254158015612cd35750601454155b15612cdd57612cf3565b6012805460135560148054601555600091829055555b565b600080600080600080612d0787612505565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150612d399088612554565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054612d689087612554565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054612d9790866124ab565b6001600160a01b038916600090815260086020526040902055612db98161301e565b612dc384836130a6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080612e2b87612505565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612e5d9087612554565b6001600160a01b03808b16600090815260086020908152604080832094909455918b16815260099091522054612e9390846124ab565b6001600160a01b038916600090815260096020908152604080832093909355600890522054612d9790866124ab565b600080600080600080612ed487612505565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150612d689087612554565b600080600080600080612f1887612505565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150612f4a9088612554565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054612e5d9087612554565b601354601255601554601455565b6000610ce56064612fa360125485612fc590919063ffffffff16565b90612462565b6000610ce56064612fa360145485612fc590919063ffffffff16565b600082612fd457506000610ce5565b82820282848281612fe157fe5b04146124a45760405162461bcd60e51b81526004018080602001828103825260218152602001806131bb6021913960400191505060405180910390fd5b600061302861243f565b905060006130368383612fc5565b3060009081526008602052604090205490915061305390826124ab565b30600090815260086020908152604080832093909355600c9052205460ff16156117fc573060009081526009602052604090205461309190846124ab565b30600090815260096020526040902055505050565b600f546130b39083612554565b600f556010546130c390826124ab565b601055505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573734d617820545820616d6f756e74206d757374206265207375706572696f7220746f203125206f662074686520737570706c792e5472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682e4f776e61626c653a2063616c6c6572206973206e6f74207468652063726561746f7245524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dca72b5233c7c3367987df56e2749b2cbb064e317f57c7d04591416babedab7764736f6c634300060c0033

Deployed Bytecode Sourcemap

15235:20487:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6434:83;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;6434:83:0;;;;;;;;;;;;;;33396:158;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33396:158:0;;:::i;:::-;;17840:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18771:163;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18771:163:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20392:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16767:41;;;;;;;;;;;;;:::i;18126:97::-;;;;;;;;;;;;;:::i;19039:704::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19039:704:0;;;;;;;;;;;;;;;;;:::i;34080:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34080:120:0;-1:-1:-1;;;;;34080:120:0;;:::i;21575:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21575:253:0;;:::i;16025:28::-;;;;;;;;;;;;;:::i;18032:85::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22181:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22181:479:0;-1:-1:-1;;;;;22181:479:0;;:::i;19752:220::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19752:220:0;;;;;;;;:::i;15579:46::-;;;;;;;;;;;;;:::i;16468:26::-;;;;;;;;;;;;;:::i;20737:379::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20737:379:0;;:::i;33153:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33153:113:0;-1:-1:-1;;;;;33153:113:0;;:::i;21128:438::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21128:438:0;;;;;;;;;:::i;15354:82::-;;;;;;;;;;;;;:::i;16815:28::-;;;;;;;;;;;;;:::i;16881:40::-;;;;;;;;;;;;;:::i;21837:335::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21837:335:0;-1:-1:-1;;;;;21837:335:0;;:::i;33019:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33019:125:0;-1:-1:-1;;;;;33019:125:0;;:::i;7297:78::-;;;;;;;;;;;;;:::i;7198:90::-;;;;;;;;;;;;;:::i;34808:292::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34808:292:0;-1:-1:-1;;;;;34808:292:0;;:::i;16552:32::-;;;;;;;;;;;;;:::i;18232:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18232:198:0;-1:-1:-1;;;;;18232:198:0;;:::i;6788:148::-;;;;;;;;;;;;;:::i;18942:88::-;;;;;;;;;;;;;:::i;16654:43::-;;;;;;;;;;;;;:::i;20261:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20261:122:0;-1:-1:-1;;;;;20261:122:0;;:::i;35496:128::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35496:128:0;;;;;;;;:::i;6346:79::-;;;;;;;;;;;;;:::i;33563:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33563:196:0;;:::i;34384:140::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34384:140:0;-1:-1:-1;;;;;34384:140:0;;:::i;17934:89::-;;;;;;;;;;;;;:::i;20620:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20620:108:0;;:::i;20490:122::-;;;;;;;;;;;;;:::i;19981:271::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19981:271:0;;;;;;;;:::i;15459:84::-;;;;;;;;;;;;;:::i;33993:78::-;;;;;;;;;;;;;:::i;18439:169::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18439:169:0;;;;;;;;:::i;34536:132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34536:132:0;-1:-1:-1;;;;;34536:132:0;;:::i;16410:48::-;;;;;;;;;;;;;:::i;35288:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35288:199:0;;:::i;35106:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35106:173:0;;;;:::i;34680:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34680:116:0;-1:-1:-1;;;;;34680:116:0;;:::i;18617:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18617:145:0;;;;;;;;;;:::i;33275:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33275:112:0;-1:-1:-1;;;;;33275:112:0;;:::i;33768:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33768:216:0;;:::i;34209:166::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34209:166:0;;:::i;6945:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6945:244:0;-1:-1:-1;;;;;6945:244:0;;:::i;6434:83::-;6501:8;;-1:-1:-1;;;;;6501:8:0;6434:83;:::o;33396:158::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;33487:2:::1;33478:6;:11;33470:49;;;::::0;;-1:-1:-1;;;33470:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33470:49:0;;;;;;;;;;;;;::::1;;33530:7;:16:::0;33396:158::o;17840:85::-;17912:5;;;;;;;;;;;;-1:-1:-1;;;17912:5:0;;;;17840:85;:::o;18771:163::-;18848:4;18865:39;18874:12;:10;:12::i;:::-;18888:7;18897:6;18865:8;:39::i;:::-;-1:-1:-1;18922:4:0;18771:163;;;;;:::o;20392:89::-;20463:10;;20392:89;:::o;16767:41::-;;;-1:-1:-1;;;;;16767:41:0;;:::o;18126:97::-;16147:15;18126:97;:::o;19039:704::-;19179:14;;19139:4;;-1:-1:-1;;;;;19166:27:0;;;19179:14;;19166:27;;;;:57;;-1:-1:-1;19210:13:0;;-1:-1:-1;;;;;19197:26:0;;;19210:13;;19197:26;;19166:57;:90;;;;-1:-1:-1;19240:16:0;;-1:-1:-1;;;;;19227:29:0;;;19240:16;;19227:29;;19166:90;:117;;;;-1:-1:-1;19273:10:0;;-1:-1:-1;;;;;19260:23:0;;;19273:10;;19260:23;;19166:117;:159;;;;-1:-1:-1;19309:15:0;;-1:-1:-1;;;;;19288:37:0;;;19309:15;;19288:37;;19166:159;19162:369;;;19341:18;19362:20;19372:9;19362;:20::i;:::-;19341:41;;19430:17;;19419:6;19406:10;:19;19405:42;;19397:116;;;;-1:-1:-1;;;19397:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19162:369;;19545:36;19555:6;19563:9;19574:6;19545:9;:36::i;:::-;19592:121;19601:6;19609:12;:10;:12::i;:::-;19623:89;19661:6;19623:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19623:19:0;;;;;;:11;:19;;;;;;19643:12;:10;:12::i;:::-;-1:-1:-1;;;;;19623:33:0;;;;;;;;;;;;-1:-1:-1;19623:33:0;;;:89;:37;:89::i;:::-;19592:8;:121::i;:::-;-1:-1:-1;19731:4:0;19039:704;;;;;:::o;34080:120::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;34161:15:::1;:31:::0;;-1:-1:-1;;;;;;34161:31:0::1;-1:-1:-1::0;;;;;34161:31:0;;;::::1;::::0;;;::::1;::::0;;34080:120::o;21575:253::-;21641:7;21680;;21669;:18;;21661:73;;;;-1:-1:-1;;;21661:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21745:19;21768:10;:8;:10::i;:::-;21745:33;-1:-1:-1;21796:24:0;:7;21745:33;21796:11;:24::i;:::-;21789:31;;;21575:253;;;;:::o;16025:28::-;;;;;;:::o;18032:85::-;16400:1;18032:85;:::o;22181:479::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22263:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22255:60;;;::::0;;-1:-1:-1;;;22255:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22331:9;22326:327;22350:9;:16:::0;22346:20;::::1;22326:327;;;22408:7;-1:-1:-1::0;;;;;22392:23:0::1;:9;22402:1;22392:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22392:12:0::1;:23;22388:254;;;22451:9;22461:16:::0;;-1:-1:-1;;22461:20:0;;;22451:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22436:9:::1;:12:::0;;-1:-1:-1;;;;;22451:31:0;;::::1;::::0;22446:1;;22436:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22436:46:0::1;-1:-1:-1::0;;;;;22436:46:0;;::::1;;::::0;;22501:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22540:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22540:28:0::1;::::0;;22587:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22587:15:0;;;;;-1:-1:-1;;;;;;22587:15:0::1;::::0;;;;;22621:5:::1;;22388:254;22368:3;;22326:327;;;;22181:479:::0;:::o;19752:220::-;19842:4;19859:83;19868:12;:10;:12::i;:::-;19882:7;19891:50;19930:10;19891:11;:25;19903:12;:10;:12::i;:::-;-1:-1:-1;;;;;19891:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;19891:25:0;;;:34;;;;;;;;;;;:38;:50::i;15579:46::-;;;-1:-1:-1;;;;;15579:46:0;;:::o;16468:26::-;;;;:::o;20737:379::-;20791:14;20808:12;:10;:12::i;:::-;-1:-1:-1;;;;;20840:19:0;;;;;;:11;:19;;;;;;20791:29;;-1:-1:-1;20840:19:0;;20839:20;20831:77;;;;-1:-1:-1;;;20831:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20920:15;20944:19;20955:7;20944:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20992:15:0;;;;;;:7;:15;;;;;;20919:44;;-1:-1:-1;20992:28:0;;:15;-1:-1:-1;20919:44:0;20992:19;:28::i;:::-;-1:-1:-1;;;;;20974:15:0;;;;;;:7;:15;;;;;:46;21041:7;;:20;;21053:7;21041:11;:20::i;:::-;21031:7;:30;21085:10;;:23;;21100:7;21085:14;:23::i;:::-;21072:10;:36;-1:-1:-1;;;20737:379:0:o;33153:113::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33224:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33224:34:0::1;33254:4;33224:34;::::0;;33153:113::o;21128:438::-;21220:7;16147:15;21248:7;:18;;21240:62;;;;;-1:-1:-1;;;21240:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21318:17;21313:246;;21353:15;21377:19;21388:7;21377:10;:19::i;:::-;-1:-1:-1;21352:44:0;;-1:-1:-1;21411:14:0;;-1:-1:-1;;;;;21411:14:0;21313:246;21460:23;21491:19;21502:7;21491:10;:19::i;:::-;-1:-1:-1;21458:52:0;;-1:-1:-1;21525:22:0;;-1:-1:-1;;;;;21525:22:0;15354:82;;;-1:-1:-1;;;;;15354:82:0;;:::o;16815:28::-;;;-1:-1:-1;;;;;16815:28:0;;:::o;16881:40::-;;;-1:-1:-1;;;16881:40:0;;;;;:::o;21837:335::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21922:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21921:21;21913:61;;;::::0;;-1:-1:-1;;;21913:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;21988:16:0;::::1;22007:1;21988:16:::0;;;:7:::1;:16;::::0;;;;;:20;21985:108:::1;;-1:-1:-1::0;;;;;22064:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22044:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22025:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21985:108:::1;-1:-1:-1::0;;;;;22103:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22103:27:0::1;22126:4;22103:27:::0;;::::1;::::0;;;22141:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22141:23:0::1;::::0;;::::1;::::0;;21837:335::o;33019:125::-;-1:-1:-1;;;;;33109:27:0;33085:4;33109:27;;;:18;:27;;;;;;;;;33019:125::o;7297:78::-;7364:3;7297:78;:::o;7198:90::-;7271:9;;7198:90;:::o;34808:292::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;34917:15:::1;::::0;-1:-1:-1;;;;;34895:38:0;;::::1;34917:15:::0;::::1;34895:38;;34887:62;;;::::0;;-1:-1:-1;;;34887:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34887:62:0;;;;;;;;;;;;;::::1;;34969:15;:48:::0;;-1:-1:-1;;;;;;34969:48:0::1;-1:-1:-1::0;;;;;34969:48:0;;::::1;::::0;;::::1;::::0;;;;35033:59:::1;::::0;35075:15;::::1;::::0;35033:59:::1;::::0;-1:-1:-1;;35033:59:0::1;34808:292:::0;:::o;16552:32::-;;;;:::o;18232:198::-;-1:-1:-1;;;;;18322:20:0;;18298:7;18322:20;;;:11;:20;;;;;;;;18318:49;;;-1:-1:-1;;;;;;18351:16:0;;;;;;:7;:16;;;;;;18344:23;;18318:49;-1:-1:-1;;;;;18405:16:0;;;;;;:7;:16;;;;;;18385:37;;:19;:37::i;6788:148::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;6895:1:::1;6879:6:::0;;6858:40:::1;::::0;-1:-1:-1;;;;;6879:6:0;;::::1;::::0;6858:40:::1;::::0;6895:1;;6858:40:::1;6926:1;6909:19:::0;;-1:-1:-1;;;;;;6909:19:0::1;::::0;;6788:148::o;18942:88::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;16147:15:::1;18995:17;:27:::0;18942:88::o;16654:43::-;;;;:::o;20261:122::-;-1:-1:-1;;;;;20355:20:0;20331:4;20355:20;;;:11;:20;;;;;;;;;20261:122::o;35496:128::-;35590:26;;-1:-1:-1;;;;;35590:18:0;;;:26;;;;;35609:6;;35590:26;;;;35609:6;35590:18;:26;;;;;;;;;;;;;;;;;;;;;35496:128;;:::o;6346:79::-;6384:7;6411:6;-1:-1:-1;;;;;6411:6:0;6346:79;:::o;33563:196::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;33680:2:::1;33665:12;:17;33657:55;;;::::0;;-1:-1:-1;;;33657:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33657:55:0;;;;;;;;;;;;;::::1;;33723:13;:28:::0;33563:196::o;34384:140::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;34480:16:::1;:36:::0;;-1:-1:-1;;;;;;34480:36:0::1;-1:-1:-1::0;;;;;34480:36:0;;;::::1;::::0;;;::::1;::::0;;34384:140::o;17934:89::-;18008:7;;;;;;;;;;;;-1:-1:-1;;;18008:7:0;;;;17934:89;:::o;20620:108::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;20694:17:::1;:26:::0;20620:108::o;20490:122::-;20581:23;;20490:122;:::o;19981:271::-;20076:4;20093:129;20102:12;:10;:12::i;:::-;20116:7;20125:96;20164:15;20125:96;;;;;;;;;;;;;;;;;:11;:25;20137:12;:10;:12::i;:::-;-1:-1:-1;;;;;20125:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20125:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;15459:84::-;;;-1:-1:-1;;;;;15459:84:0;;:::o;33993:78::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;34048:8:::1;:15:::0;;-1:-1:-1;;34048:15:0::1;34059:4;34048:15;::::0;;33993:78::o;18439:169::-;18519:4;18536:42;18546:12;:10;:12::i;:::-;18560:9;18571:6;18536:9;:42::i;34536:132::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;34628:14:::1;:32:::0;;-1:-1:-1;;;;;;34628:32:0::1;-1:-1:-1::0;;;;;34628:32:0;;;::::1;::::0;;;::::1;::::0;;34536:132::o;16410:48::-;;;;:::o;35288:199::-;6708:12;:10;:12::i;:::-;6696:8;;-1:-1:-1;;;;;6696:8:0;;;:24;;;6688:71;;;;-1:-1:-1;;;6688:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35386:1:::1;35377:6;:10;35369:64;;;;-1:-1:-1::0;;;35369:64:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35452:9;:7;:9::i;:::-;-1:-1:-1::0;;;;;35444:27:0::1;:35;35472:6;35444:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;35106:173:::0;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;35185:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;35185:32:0;::::1;-1:-1:-1::0;;;;35185:32:0;;::::1;::::0;;;::::1;::::0;;;35233:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;35106:173:::0;:::o;34680:116::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;34764:10:::1;:24:::0;;-1:-1:-1;;;;;;34764:24:0::1;-1:-1:-1::0;;;;;34764:24:0;;;::::1;::::0;;;::::1;::::0;;34680:116::o;18617:145::-;-1:-1:-1;;;;;18727:18:0;;;18700:7;18727:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18617:145::o;33275:112::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33344:27:0::1;33374:5;33344:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33344:35:0::1;::::0;;33275:112::o;33768:216::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;33867:16:::1;16147:15;33879:3;33867:11;:16::i;:::-;33853:11;:30;33845:94;;;;-1:-1:-1::0;;;33845:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33950:12;:26:::0;33768:216::o;34209:166::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;34317:23:::1;:50:::0;34209:166::o;6945:244::-;6576:12;:10;:12::i;:::-;6566:6;;-1:-1:-1;;;;;6566:6:0;;;:22;;;6558:67;;;;;-1:-1:-1;;;6558:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6558:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7034:22:0;::::1;7026:73;;;;-1:-1:-1::0;;;7026:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7136:6;::::0;;7115:38:::1;::::0;-1:-1:-1;;;;;7115:38:0;;::::1;::::0;7136:6;::::1;::::0;7115:38:::1;::::0;::::1;7164:6;:17:::0;;-1:-1:-1;;;;;;7164:17:0::1;-1:-1:-1::0;;;;;7164:17:0;;;::::1;::::0;;;::::1;::::0;;6945:244::o;464:106::-;552:10;464:106;:::o;22669:338::-;-1:-1:-1;;;;;22762:19:0;;22754:68;;;;-1:-1:-1;;;22754:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22841:21:0;;22833:68;;;;-1:-1:-1;;;22833:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22915:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22967:32;;;;;;;;;;;;;;;;;22669:338;;;:::o;23016:1499::-;-1:-1:-1;;;;;23138:18:0;;23130:68;;;;-1:-1:-1;;;23130:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23217:16:0;;23209:64;;;;-1:-1:-1;;;23209:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23301:1;23292:6;:10;23284:64;;;;-1:-1:-1;;;23284:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23370:7;:5;:7::i;:::-;-1:-1:-1;;;;;23362:15:0;:4;-1:-1:-1;;;;;23362:15:0;;;:32;;;;;23387:7;:5;:7::i;:::-;-1:-1:-1;;;;;23381:13:0;:2;-1:-1:-1;;;;;23381:13:0;;;23362:32;23359:125;;;23427:12;;23417:6;:22;;23409:75;;;;-1:-1:-1;;;23409:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23501:28;23532:24;23550:4;23532:9;:24::i;:::-;23622:23;;23501:55;;-1:-1:-1;23598:47:0;;;;;;;23674:57;;-1:-1:-1;23715:16:0;;-1:-1:-1;;;23715:16:0;;;;23714:17;23674:57;:95;;;;-1:-1:-1;23756:13:0;;-1:-1:-1;;;;;23748:21:0;;;23756:13;;23748:21;;23674:95;:133;;;;-1:-1:-1;23786:21:0;;-1:-1:-1;;;23786:21:0;;;;23674:133;23656:229;;;23837:36;23852:20;23837:14;:36::i;:::-;-1:-1:-1;;;;;24021:24:0;;23901:12;24021:24;;;:18;:24;;;;;;23916:4;;24021:24;;;:50;;-1:-1:-1;;;;;;24049:22:0;;;;;;:18;:22;;;;;;;;24021:50;24018:96;;;-1:-1:-1;24097:5:0;24018:96;24139:14;;-1:-1:-1;;;;;24133:20:0;;;24139:14;;24133:20;;;;:43;;-1:-1:-1;24163:13:0;;-1:-1:-1;;;;;24157:19:0;;;24163:13;;24157:19;;24133:43;:69;;;;-1:-1:-1;24186:16:0;;-1:-1:-1;;;;;24180:22:0;;;24186:16;;24180:22;;24133:69;:89;;;;-1:-1:-1;24212:10:0;;-1:-1:-1;;;;;24206:16:0;;;24212:10;;24206:16;;24133:89;:124;;;;-1:-1:-1;24241:15:0;;-1:-1:-1;;;;;24227:30:0;;;24241:15;;24227:30;;24133:124;24129:327;;;24273:18;24294:13;24304:2;24294:9;:13::i;:::-;24273:34;;24355:17;;24344:6;24331:10;:19;24330:42;;24322:116;;;;-1:-1:-1;;;24322:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24129:327;;24469:38;24484:4;24489:2;24492:6;24499:7;24469:14;:38::i;:::-;23016:1499;;;;;;:::o;1873:193::-;1959:7;1995:12;1987:6;;;;1979:29;;;;-1:-1:-1;;;1979:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2031:5:0;;;1873:193::o;31196:163::-;31237:7;31258:15;31275;31294:19;:17;:19::i;:::-;31257:56;;-1:-1:-1;31257:56:0;-1:-1:-1;31331:20:0;31257:56;;31331:11;:20::i;:::-;31324:27;;;;31196:163;:::o;2339:132::-;2397:7;2424:39;2428:1;2431;2424:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2417:46;2339:132;-1:-1:-1;;;2339:132:0:o;1537:182::-;1595:7;1627:5;;;1651:6;;;;1643:46;;;;;-1:-1:-1;;;1643:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;29991:419;30050:7;30059;30068;30077;30086;30095;30116:23;30141:12;30155:18;30177:20;30189:7;30177:11;:20::i;:::-;30115:82;;;;;;30209:15;30226:23;30251:12;30267:50;30279:7;30288:4;30294:10;30306;:8;:10::i;:::-;30267:11;:50::i;:::-;30208:109;;;;-1:-1:-1;30208:109:0;;-1:-1:-1;30368:15:0;;-1:-1:-1;30385:4:0;;-1:-1:-1;30391:10:0;;-1:-1:-1;29991:419:0;;-1:-1:-1;;;;;29991:419:0:o;1728:136::-;1786:7;1813:43;1817:1;1820;1813:43;;;;;;;;;;;;;;;;;:3;:43::i;24524:831::-;17212:16;:23;;-1:-1:-1;;;;17212:23:0;-1:-1:-1;;;17212:23:0;;;;24637:27:::1;:20:::0;24662:1:::1;24637:24;:27::i;:::-;24612:52:::0;-1:-1:-1;24683:20:0::1;24706:40;:20:::0;24612:52;24706:24:::1;:40::i;:::-;24683:63:::0;-1:-1:-1;24788:21:0::1;24853:30;24683:63:::0;24853:16:::1;:30::i;:::-;24929:26;24958:41;:21;24984:14:::0;24958:25:::1;:41::i;:::-;25037:16;::::0;24929:70;;-1:-1:-1;25013:68:0::1;::::0;-1:-1:-1;;;;;25037:16:0::1;25055:25;24929:70:::0;25078:1:::1;25055:22;:25::i;:::-;25013:23;:68::i;:::-;25233:10;::::0;25131:21:::1;::::0;25209:66:::1;::::0;-1:-1:-1;;;;;25233:10:0::1;25273:1;25131:21:::0;25245:29:::1;25209:23;:66::i;:::-;25286:58;25299:14:::0;25342:1:::1;25315:25:::0;:28:::1;25286:12;:58::i;:::-;-1:-1:-1::0;;17258:16:0;:24;;-1:-1:-1;;;;17258:24:0;;;-1:-1:-1;;;;24524:831:0:o;26515:979::-;26629:8;;;;26625:143;;26671:7;:5;:7::i;:::-;-1:-1:-1;;;;;26661:17:0;:6;-1:-1:-1;;;;;26661:17:0;;:46;;;-1:-1:-1;26692:15:0;;-1:-1:-1;;;;;26682:25:0;;;26692:15;;26682:25;26661:46;26653:55;;;;;;26785:7;26781:40;;26807:14;:12;:14::i;:::-;-1:-1:-1;;;;;26839:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;26863:22:0;;;;;;:11;:22;;;;;;;;26862:23;26839:46;26835:597;;;26902:48;26924:6;26932:9;26943:6;26902:21;:48::i;:::-;26835:597;;;-1:-1:-1;;;;;26973:19:0;;;;;;:11;:19;;;;;;;;26972:20;:46;;;;-1:-1:-1;;;;;;26996:22:0;;;;;;:11;:22;;;;;;;;26972:46;26968:464;;;27035:46;27055:6;27063:9;27074:6;27035:19;:46::i;26968:464::-;-1:-1:-1;;;;;27104:19:0;;;;;;:11;:19;;;;;;;;27103:20;:47;;;;-1:-1:-1;;;;;;27128:22:0;;;;;;:11;:22;;;;;;;;27127:23;27103:47;27099:333;;;27167:44;27185:6;27193:9;27204:6;27167:17;:44::i;27099:333::-;-1:-1:-1;;;;;27233:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27256:22:0;;;;;;:11;:22;;;;;;;;27233:45;27229:203;;;27295:48;27317:6;27325:9;27336:6;27295:21;:48::i;27229:203::-;27376:44;27394:6;27402:9;27413:6;27376:17;:44::i;:::-;27449:7;27445:41;;27471:15;:13;:15::i;:::-;26515:979;;;;:::o;31368:561::-;31465:7;;31418;;;;16147:15;31418:7;31525:289;31549:9;:16;31545:20;;31525:289;;;31615:7;31591;:21;31599:9;31609:1;31599:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31599:12:0;31591:21;;;;;;;;;;;;;:31;;:66;;;31650:7;31626;:21;31634:9;31644:1;31634:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31634:12:0;31626:21;;;;;;;;;;;;;:31;31591:66;31587:97;;;31667:7;;16147:15;31659:25;;;;;;;;;31587:97;31709:34;31721:7;:21;31729:9;31739:1;31729:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31729:12:0;31721:21;;;;;;;;;;;;;31709:7;;:11;:34::i;:::-;31699:44;;31768:34;31780:7;:21;31788:9;31798:1;31788:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31788:12:0;31780:21;;;;;;;;;;;;;31768:7;;:11;:34::i;:::-;31758:44;-1:-1:-1;31567:3:0;;31525:289;;;-1:-1:-1;31838:7:0;;:20;;16147:15;31838:11;:20::i;:::-;31828:7;:30;31824:61;;;31868:7;;16147:15;31860:25;;;;;;;;31824:61;31904:7;;-1:-1:-1;31913:7:0;-1:-1:-1;31368:561:0;;;:::o;2480:279::-;2566:7;2601:12;2594:5;2586:28;;;;-1:-1:-1;;;2586:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2625:9;2641:1;2637;:5;;;;;;;2480:279;-1:-1:-1;;;;;2480:279:0:o;30419:330::-;30479:7;30488;30497;30517:12;30532:24;30548:7;30532:15;:24::i;:::-;30517:39;;30567:18;30588:30;30610:7;30588:21;:30::i;:::-;30567:51;-1:-1:-1;30629:23:0;30655:33;30567:51;30655:17;:7;30667:4;30655:11;:17::i;:::-;:21;;:33::i;:::-;30629:59;30724:4;;-1:-1:-1;30730:10:0;;-1:-1:-1;30419:330:0;;-1:-1:-1;;;30419:330:0:o;30758:429::-;30873:7;;;;30929:24;:7;30941:11;30929;:24::i;:::-;30911:42;-1:-1:-1;30964:12:0;30979:21;:4;30988:11;30979:8;:21::i;:::-;30964:36;-1:-1:-1;31011:18:0;31032:27;:10;31047:11;31032:14;:27::i;:::-;31011:48;-1:-1:-1;31070:23:0;31096:33;31011:48;31096:17;:7;31108:4;31096:11;:17::i;:33::-;31148:7;;;;-1:-1:-1;31174:4:0;;-1:-1:-1;30758:429:0;;-1:-1:-1;;;;;;;30758:429:0:o;25896:607::-;26046:16;;;26060:1;26046:16;;;26022:21;26046:16;;;;;26022:21;26046:16;;;;;;;;;;-1:-1:-1;26046:16:0;26022:40;;26091:4;26073;26078:1;26073:7;;;;;;;;-1:-1:-1;;;;;26073:23:0;;;:7;;;;;;;;;;:23;;;;26117:15;;:22;;;-1:-1:-1;;;26117:22:0;;;;:15;;;;;:20;;:22;;;;;26073:7;;26117:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26117:22:0;26107:7;;:4;;26112:1;;26107:7;;;;;;-1:-1:-1;;;;;26107:32:0;;;:7;;;;;;;;;:32;26185:15;;26153:62;;26170:4;;26185:15;26203:11;26153:8;:62::i;:::-;26255:15;;:240;;-1:-1:-1;;;26255:240:0;;;;;;;;:15;:240;;;;;;26433:4;26255:240;;;;;;26469:15;26255:240;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26255:15:0;;;;:66;;26336:11;;26406:4;;26433;26469:15;26255:240;;;;;;;;;;;;;;;;:15;:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25364:523;25547:15;;25515:62;;25532:4;;-1:-1:-1;;;;;25547:15:0;25565:11;25515:8;:62::i;:::-;25621:15;;25825:10;;25621:255;;;-1:-1:-1;;;25621:255:0;;25693:4;25621:255;;;;;;;;;;:15;:255;;;;;;;;;;-1:-1:-1;;;;;25825:10:0;;;25621:255;;;;25850:15;25621:255;;;;;;:15;;;;;:31;;25660:9;;25621:255;;;;;;;;;;;;;;;25660:9;25621:15;:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32640:236;32686:7;;:12;:34;;;;-1:-1:-1;32702:13:0;;:18;32686:34;32683:46;;;32722:7;;32683:46;32760:7;;;32742:15;:25;32802:13;;;32778:21;:37;-1:-1:-1;32829:11:0;;;;32851:17;32640:236;:::o;28609:566::-;28712:15;28729:23;28754:12;28768:23;28793:12;28807:18;28829:19;28840:7;28829:10;:19::i;:::-;-1:-1:-1;;;;;28877:15:0;;;;;;:7;:15;;;;;;28711:137;;-1:-1:-1;28711:137:0;;-1:-1:-1;28711:137:0;;-1:-1:-1;28711:137:0;-1:-1:-1;28711:137:0;-1:-1:-1;28711:137:0;-1:-1:-1;28877:28:0;;28897:7;28877:19;:28::i;:::-;-1:-1:-1;;;;;28859:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28934:7;:15;;;;:28;;28954:7;28934:19;:28::i;:::-;-1:-1:-1;;;;;28916:15:0;;;;;;;:7;:15;;;;;;:46;;;;28994:18;;;;;;;:39;;29017:15;28994:22;:39::i;:::-;-1:-1:-1;;;;;28973:18:0;;;;;;:7;:18;;;;;:60;29047:26;29062:10;29047:14;:26::i;:::-;29084:23;29096:4;29102;29084:11;:23::i;:::-;29140:9;-1:-1:-1;;;;;29123:44:0;29132:6;-1:-1:-1;;;;;29123:44:0;;29151:15;29123:44;;;;;;;;;;;;;;;;;;28609:566;;;;;;;;;:::o;28014:586::-;28115:15;28132:23;28157:12;28171:23;28196:12;28210:18;28232:19;28243:7;28232:10;:19::i;:::-;-1:-1:-1;;;;;28280:15:0;;;;;;:7;:15;;;;;;28114:137;;-1:-1:-1;28114:137:0;;-1:-1:-1;28114:137:0;;-1:-1:-1;28114:137:0;-1:-1:-1;28114:137:0;-1:-1:-1;28114:137:0;-1:-1:-1;28280:28:0;;28114:137;28280:19;:28::i;:::-;-1:-1:-1;;;;;28262:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;28340:18;;;;;:7;:18;;;;;:39;;28363:15;28340:22;:39::i;:::-;-1:-1:-1;;;;;28319:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28411:7;:18;;;;:39;;28434:15;28411:22;:39::i;27503:502::-;27602:15;27619:23;27644:12;27658:23;27683:12;27697:18;27719:19;27730:7;27719:10;:19::i;:::-;-1:-1:-1;;;;;27767:15:0;;;;;;:7;:15;;;;;;27601:137;;-1:-1:-1;27601:137:0;;-1:-1:-1;27601:137:0;;-1:-1:-1;27601:137:0;-1:-1:-1;27601:137:0;-1:-1:-1;27601:137:0;-1:-1:-1;27767:28:0;;27601:137;27767:19;:28::i;29184:642::-;29287:15;29304:23;29329:12;29343:23;29368:12;29382:18;29404:19;29415:7;29404:10;:19::i;:::-;-1:-1:-1;;;;;29452:15:0;;;;;;:7;:15;;;;;;29286:137;;-1:-1:-1;29286:137:0;;-1:-1:-1;29286:137:0;;-1:-1:-1;29286:137:0;-1:-1:-1;29286:137:0;-1:-1:-1;29286:137:0;-1:-1:-1;29452:28:0;;29472:7;29452:19;:28::i;:::-;-1:-1:-1;;;;;29434:15:0;;;;;;:7;:15;;;;;;;;:46;;;;29509:7;:15;;;;:28;;29529:7;29509:19;:28::i;32885:125::-;32939:15;;32929:7;:25;32981:21;;32965:13;:37;32885:125::o;32302:154::-;32366:7;32393:55;32432:5;32393:20;32405:7;;32393;:11;;:20;;;;:::i;:::-;:24;;:55::i;32465:166::-;32535:7;32562:61;32607:5;32562:26;32574:13;;32562:7;:11;;:26;;;;:::i;2075:252::-;2133:7;2157:6;2153:47;;-1:-1:-1;2187:1:0;2180:8;;2153:47;2225:5;;;2229:1;2225;:5;:1;2249:5;;;;;:10;2241:56;;;;-1:-1:-1;;;2241:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31938:355;32001:19;32024:10;:8;:10::i;:::-;32001:33;-1:-1:-1;32045:18:0;32066:27;:10;32001:33;32066:14;:27::i;:::-;32145:4;32129:22;;;;:7;:22;;;;;;32045:48;;-1:-1:-1;32129:38:0;;32045:48;32129:26;:38::i;:::-;32120:4;32104:22;;;;:7;:22;;;;;;;;:63;;;;32181:11;:26;;;;;;32178:107;;;32263:4;32247:22;;;;:7;:22;;;;;;:38;;32274:10;32247:26;:38::i;:::-;32238:4;32222:22;;;;:7;:22;;;;;:63;31938:355;;;:::o;29835:147::-;29913:7;;:17;;29925:4;29913:11;:17::i;:::-;29903:7;:27;29954:10;;:20;;29969:4;29954:14;:20::i;:::-;29941:10;:33;-1:-1:-1;;29835:147:0:o

Swarm Source

ipfs://dca72b5233c7c3367987df56e2749b2cbb064e317f57c7d04591416babedab77
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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