ETH Price: $3,484.76 (+3.36%)
Gas: 3 Gwei

Token

Magic Bag (Felix)
 

Overview

Max Total Supply

92,125,347.292572124191780912 Felix

Holders

572

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: Felix 14
Balance
0.000000000003498755 Felix

Value
$0.00
0x90b01c7ca17b4392a13477fd58e3c3e4ca24ee37
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:
MagicBag

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-17
*/

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

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

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor() {
        _transferOwnership(_msgSender());
    }
    
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event 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 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 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 MagicBag is Ownable, IERC20{
    using SafeMath for uint256;

    string  private _name;
    string  private _symbol;
    uint256 private _decimals;
    uint256 private _totalSupply;

    uint256 public  maxTxLimit;
    uint256 public  maxWalletLimit;
    address payable public developmentWallet;
    uint256 public  swapableRefection;
    uint256 public  swapableDevTax;
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 public sellTax;
    uint256 public buyTax;
    uint256 public taxDivisionPercentage;
    uint256 public totalBurned;
    uint256 public totalReflected;
    uint256 public totalLP;

    IUniswapV2Router02 public dexRouter;
    address public  lpPair;
    bool    public  tradingActive;
    uint256 public  ethReflectionBasis;

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

    mapping(address => bool)    private _reflectionExcluded;
    mapping(address => uint256) public  lastReflectionBasis;
    mapping(address => uint256) public  totalClaimedReflection;
    mapping(address => bool)    public  lpPairs;
    mapping(address => bool)    private _isExcludedFromTax;
    mapping(address => bool)    private _bots;

    event functionType (uint Type, address sender, uint256 amount);

    constructor(string memory name_, 
                string memory symbol_, 
                uint256 decimals_, 
                uint256 totalSupply_,
                address payable devWallet_,
                uint256 taxDivisionPercentage_, 
                uint256 maxTxLimit_, 
                uint256 maxWalletLimit_){
        _name              = name_;
        _symbol            = symbol_;
        _decimals          = decimals_;
        _totalSupply       = totalSupply_.mul(10 ** _decimals);
        _balances[owner()] = _balances[owner()].add(_totalSupply);

        developmentWallet  = payable(devWallet_);
        sellTax            = 60;
        buyTax             = 15;
        maxTxLimit         = maxTxLimit_;
        maxWalletLimit     = maxWalletLimit_;
        taxDivisionPercentage   = taxDivisionPercentage_;

        dexRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        lpPair    = IUniswapV2Factory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        lpPairs[lpPair] = true;

        _approve(owner(), address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromTax[owner()]       = true;
        _isExcludedFromTax[address(this)] = true;
        _isExcludedFromTax[lpPair]        = true;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable {}

    //@notice All ERC20 functions implementation
    function name() public view returns (string memory) {
        return _name;
    }

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

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

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender  != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Zero Address");
        require(recipient != address(0), "ERC20: Zero Address");
        require(recipient != DEAD, "ERC20: Dead Address");
        require(_balances[msg.sender] >= amount, "ERC20: Amount exceeds account balance");

        _transfer(msg.sender, recipient, amount);

        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Zero Address");
        require(recipient != address(0), "ERC20: Zero Address");
        require(recipient != DEAD, "ERC20: Dead Address");
        require(_allowances[sender][msg.sender] >= amount, "ERC20: Insufficient allowance.");
        require(_balances[sender] >= amount, "ERC20: Amount exceeds sender's account balance");

        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender]  = _allowances[sender][msg.sender].sub(amount);
        }
        _transfer(sender, recipient, amount);

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(_bots[sender] == false && _bots[recipient] == false, "ERC20: Bots can't trade");

        if (sender == owner() && lpPairs[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        }
        else if (lpPairs[sender] || lpPairs[recipient]){
            require(tradingActive == true, "ERC20: Trading is not active.");
            
            if (_isExcludedFromTax[sender] && !_isExcludedFromTax[recipient]){
                if (_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)) {
                    _transferFromExcluded(sender, recipient, amount);//buy
                } 
            }   
            else if (!_isExcludedFromTax[sender] && _isExcludedFromTax[recipient]){
                if (_checkTxLimit(amount)) {
                    _transferToExcluded(sender, recipient, amount);//sell
                }
            }
            else if (_isExcludedFromTax[sender] && _isExcludedFromTax[recipient]) {
                if (sender == owner() || recipient == owner() || sender == address(this) || recipient == address(this)) {
                    _transferBothExcluded(sender, recipient, amount);
                } else if (lpPairs[recipient]) {
                    if (_checkTxLimit(amount)) {
                        _transferBothExcluded(sender, recipient, amount);
                    }
                } else if (_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)){
                    _transferBothExcluded(sender, recipient, amount);
                }
            } 
        } else {
            if (sender == owner() || recipient == owner() || sender == address(this) || recipient == address(this)) {
                    _transferBothExcluded(sender, recipient, amount);
            } else if(_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)){
                    _transferBothExcluded(sender, recipient, amount);
            }
        }
    }

    function _transferFromExcluded(address sender, address recipient, uint256 amount) private { //buy
        uint256 randomNumber  = _generateRandomNumber();
        uint256 taxAmount     = amount.mul(buyTax).div(100);
        uint256 receiveAmount = amount.sub(taxAmount);
        (
        uint256 devAmount,
        uint256 burnAmount,
        uint256 lpAmount,
        uint256 reflectionAmount
        ) = _getTaxAmount(taxAmount);

        _balances[sender]        = _balances[sender].sub(amount);
        _balances[recipient]     = _balances[recipient].add(receiveAmount);
        _balances[address(this)] = _balances[address(this)].add(devAmount);
        swapableDevTax           = swapableDevTax.add(devAmount);

        if (randomNumber == 1) {
            _burn(sender, burnAmount);
            emit functionType(randomNumber, sender, burnAmount);
        } else if (randomNumber == 2) {
            _takeLP(sender, lpAmount);
            emit functionType(randomNumber, sender, lpAmount);
        } else if (randomNumber == 3) {
            _balances[address(this)] = _balances[address(this)].add(reflectionAmount);
            swapableRefection        = swapableRefection.add(reflectionAmount);
            totalReflected           = totalReflected.add(reflectionAmount);
            emit functionType(randomNumber, sender, reflectionAmount);
        }
        emit Transfer(sender, recipient, amount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 amount) private { //sell
        uint256 randomNumber = _generateRandomNumber();
        uint256 taxAmount    = amount.mul(sellTax).div(100);
        uint256 sentAmount   = amount.sub(taxAmount);
        (
        uint256 devAmount,  
        uint256 burnAmount,
        uint256 lpAmount,
        uint256 reflectionAmount
        ) = _getTaxAmount(taxAmount);

        _balances[sender]        = _balances[sender].sub(amount);
        _balances[recipient]     = _balances[recipient].add(sentAmount);
        _balances[address(this)] = _balances[address(this)].add(devAmount);
        swapableDevTax           = swapableDevTax.add(devAmount);

        if (randomNumber == 1) {
            _burn(sender, burnAmount);
            emit functionType(randomNumber, sender, burnAmount);
        } else if (randomNumber == 2) {
            _takeLP(sender, lpAmount);
            emit functionType(randomNumber, sender, lpAmount);
        } else if (randomNumber == 3) {
            _balances[address(this)] = _balances[address(this)].add(reflectionAmount);
            swapableRefection        = swapableRefection.add(reflectionAmount);
            totalReflected           = totalReflected.add(reflectionAmount);
            emit functionType(randomNumber, sender, reflectionAmount);
        }
        emit Transfer(sender, recipient, amount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 amount) private {
        _balances[sender]    = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);

        emit Transfer(sender, recipient, amount);
    }

    //@notice Burn function for public use, anyone can burn their tokens
    function burn(uint256 amountTokens) public {
        address sender = msg.sender;
        require(_balances[sender] >= amountTokens, "ERC20: Burn Amount exceeds account balance");
        require(amountTokens > 0, "ERC20: Enter some amount to burn");

        if (amountTokens > 0) {
            _balances[sender] = _balances[sender].sub(amountTokens);
            _burn(sender, amountTokens);
        }
    }

    function _burn(address from, uint256 amount) private {
        _totalSupply = _totalSupply.sub(amount);
        totalBurned  = totalBurned.add(amount);

        emit Transfer(from, address(0), amount);
    }

    //@notice Adding tax to the LP address
    function _takeLP(address from, uint256 tax) private {
        if (tax > 0) {
            (, , uint256 lp, ) = _getTaxAmount(tax);
            _balances[lpPair]  = _balances[lpPair].add(lp);
            totalLP = totalLP.add(lp);

            emit Transfer(from, lpPair, lp);
        }
    }

    //@notice Reflections related functionalities
    function addReflection() external payable {
        ethReflectionBasis = ethReflectionBasis.add(msg.value);
    }

    function isReflectionExcluded(address account) public view returns (bool) {
        return _reflectionExcluded[account];
    }

    function removeReflectionExcluded(address account) external onlyOwner {
        require(isReflectionExcluded(account), "ERC20: Account must be excluded");

        _reflectionExcluded[account] = false;
    }

    function addReflectionExcluded(address account) external onlyOwner {
        _addReflectionExcluded(account);
    }

    function _addReflectionExcluded(address account) internal {
        require(!isReflectionExcluded(account), "ERC20: Account must not be excluded");
        _reflectionExcluded[account] = true;
    }

    function unclaimedReflection(address addr) public view returns (uint256) {
        if (addr == lpPair || addr == address(dexRouter)) return 0;

        uint256 basisDifference = ethReflectionBasis - lastReflectionBasis[addr];
        return (basisDifference * balanceOf(addr)) / _totalSupply;
    }

    function _claimReflection(address payable addr) internal {
        uint256 unclaimed         = unclaimedReflection(addr);
        require(unclaimed > 0, "ERC20: Claim amount should be more then 0");
        require(isReflectionExcluded(addr) == false, "ERC20: Address is excluded to claim reflection");
        
        lastReflectionBasis[addr] = ethReflectionBasis;
        if (unclaimed > 0) {
            addr.transfer(unclaimed);
        }
        totalClaimedReflection[addr] = totalClaimedReflection[addr].add(unclaimed);
    }

    function claimReflection() external {
        _claimReflection(payable(msg.sender));
    }

    function swapReflection() public onlyOwner {
        require(swapableRefection > 0, "ERC20: Insufficient token to swap");

        uint256 currentBalance = address(this).balance;
        _swap(address(this), swapableRefection);
        swapableRefection = 0;

        uint256 ethTransfer = (address(this).balance).sub(currentBalance);
        ethReflectionBasis  = ethReflectionBasis.add(ethTransfer);
    }

    function swapDevTax() public onlyOwner {
        require(swapableDevTax > 0, "ERC20: Insufficient token to swap");
        _swap(developmentWallet, swapableDevTax);
        swapableDevTax = 0;
    }

    //@notice Other functions
    function setmaxTxLimit(uint256 amount) public onlyOwner {
        maxTxLimit = amount;
    }

    function setMaxWalletLimit(uint256 amount) public onlyOwner {
        maxWalletLimit = amount;
    }

    function setDevWallet(address payable newDevWallet) public onlyOwner {
        require(newDevWallet != address(0), "ERC20: Can't set development wallet as null address.");
        developmentWallet = newDevWallet;
    }

    //@notice Sell tax can not go above 15 percent
    function setsellTax(uint256 tax) public onlyOwner {
        require(tax <= 15, "ERC20: The percentage can't more 100.");
        sellTax = tax;
    }

    //@notice Sell tax can not go above 15 percent
    function setbuyTax(uint256 tax) public onlyOwner {
        require(tax <= 15, "ERC20: The percentage can't more 100.");
        buyTax = tax;
    }

    function setTaxDivPercentage(uint256 percentage) public onlyOwner {
        require(percentage <= 100, "ERC20: The percentage can't more then 100");
        taxDivisionPercentage = percentage;
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
    }

    function disableTrading() external onlyOwner {
        tradingActive = false;
    }

    function addBot(address[] memory _bot) public onlyOwner {
        for (uint i = 0; i < _bot.length; i++) {
            _bots[_bot[i]] = true;
        }
    }

    function removeBot(address _bot) public onlyOwner {
        require(_bots[_bot] == true, "ERC20: Bot is not in the list");
        _bots[_bot] = false;
    }

    function addLpPair(address pair, bool status) public onlyOwner{
        lpPairs[pair] = status;
        _isExcludedFromTax[pair] = status;
    }

    function removeAllTax() public onlyOwner {
        sellTax = 0;
        buyTax  = 0;
        taxDivisionPercentage = 0;
    }

    function excludeFromTax(address account) public onlyOwner {
        require(!_isExcludedFromTax[account], "ERC20: Account is already excluded.");
        _isExcludedFromTax[account] = true;
    }

    function includeInTax(address _account) public onlyOwner {
        require(_isExcludedFromTax[_account], "ERC20: Account is already included.");
        _isExcludedFromTax[_account] = false;
    }
    
    function recoverAllEth() public onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function recoverErc20token(address token, uint256 amount) public onlyOwner {
        IERC20(token).transfer(owner(), amount);
    }

    //@dev View functions
    function checkExludedFromTax(address _account) public view returns (bool) {
        return _isExcludedFromTax[_account];
    }

    function isBot(address _account) public view returns(bool) {
        return _bots[_account];
    }

    //@dev Private functions
    function _generateRandomNumber() private view returns (uint256) {
        return (uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.gaslimit, tx.origin, block.number, tx.gasprice))) % 3) + 1;
    }

    function _getTaxAmount(uint256 _tax) private view returns (uint256 _devAmount, uint256 Burn, uint256 LP, uint256 Reflection) {
        uint256 devAmount;
        uint256 burnAmount;
        uint256 lpAmount;
        uint256 reflectionAmount;

        if (_tax > 0) {
            devAmount = _tax.mul((100 - taxDivisionPercentage)).div(100);
            burnAmount = _tax.mul(taxDivisionPercentage).div(100);
            lpAmount = _tax.mul(taxDivisionPercentage).div(100);
            reflectionAmount = _tax.mul(taxDivisionPercentage).div(100);
        }
        return (devAmount, burnAmount, lpAmount, reflectionAmount);
    }

    function _checkWalletLimit(address recipient, uint256 amount) private view returns(bool){
        require(maxWalletLimit >= balanceOf(recipient).add(amount), "ERC20: Wallet limit exceeds");
        return true;
    }

    function _checkTxLimit(uint256 amount) private view returns(bool){
        require(amount <= maxTxLimit, "ERC20: Transaction limit exceeds");
        return true;
    }

    function _swap(address recipient, uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETH(
            amount,
            0,
            path,
            recipient,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"decimals_","type":"uint256"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"address payable","name":"devWallet_","type":"address"},{"internalType":"uint256","name":"taxDivisionPercentage_","type":"uint256"},{"internalType":"uint256","name":"maxTxLimit_","type":"uint256"},{"internalType":"uint256","name":"maxWalletLimit_","type":"uint256"}],"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":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":false,"internalType":"uint256","name":"Type","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"functionType","type":"event"},{"inputs":[{"internalType":"address[]","name":"_bot","type":"address[]"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addReflection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"checkExludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"includeInTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReflectionExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":[],"name":"recoverAllEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverErc20token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAllTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bot","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setTaxDivPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setbuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setsellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapDevTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapableDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapableRefection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxDivisionPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalClaimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"unclaimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5060405162006e8638038062006e86833981810160405281019062000037919062000d28565b620000576200004b6200074360201b60201c565b6200074b60201b60201c565b87600190805190602001906200006f92919062000a3b565b5086600290805190602001906200008892919062000a3b565b5085600381905550620000ba600354600a620000a5919062000fb2565b866200080f60201b620024821790919060201c565b6004819055506200012a60045460136000620000db6200082760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200085060201b620024981790919060201c565b601360006200013e6200082760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603c600a81905550600f600b81905550816005819055508060068190555082600c81905550737a250d5630b4cf539739df2c5dacb4c659f2488d601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a057600080fd5b505afa158015620002b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002db919062001048565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b919062001048565b6040518363ffffffff1660e01b8152600401620003ba9291906200108b565b602060405180830381600087803b158015620003d557600080fd5b505af1158015620003ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000410919062001048565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200052e620004de6200082760201b60201c565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200086860201b60201c565b6200058330601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200086860201b60201c565b600160196000620005996200082760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006cc6200082760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200072d9190620010c9565b60405180910390a350505050505050506200128c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836200081f9190620010e6565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000818362000860919062001147565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d29062001205565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200094e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009459062001205565b60405180910390fd5b80601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000a2e9190620010c9565b60405180910390a3505050565b82805462000a499062001256565b90600052602060002090601f01602090048101928262000a6d576000855562000ab9565b82601f1062000a8857805160ff191683800117855562000ab9565b8280016001018555821562000ab9579182015b8281111562000ab857825182559160200191906001019062000a9b565b5b50905062000ac8919062000acc565b5090565b5b8082111562000ae757600081600090555060010162000acd565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000b548262000b09565b810181811067ffffffffffffffff8211171562000b765762000b7562000b1a565b5b80604052505050565b600062000b8b62000aeb565b905062000b99828262000b49565b919050565b600067ffffffffffffffff82111562000bbc5762000bbb62000b1a565b5b62000bc78262000b09565b9050602081019050919050565b60005b8381101562000bf457808201518184015260208101905062000bd7565b8381111562000c04576000848401525b50505050565b600062000c2162000c1b8462000b9e565b62000b7f565b90508281526020810184848401111562000c405762000c3f62000b04565b5b62000c4d84828562000bd4565b509392505050565b600082601f83011262000c6d5762000c6c62000aff565b5b815162000c7f84826020860162000c0a565b91505092915050565b6000819050919050565b62000c9d8162000c88565b811462000ca957600080fd5b50565b60008151905062000cbd8162000c92565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cf08262000cc3565b9050919050565b62000d028162000ce3565b811462000d0e57600080fd5b50565b60008151905062000d228162000cf7565b92915050565b600080600080600080600080610100898b03121562000d4c5762000d4b62000af5565b5b600089015167ffffffffffffffff81111562000d6d5762000d6c62000afa565b5b62000d7b8b828c0162000c55565b985050602089015167ffffffffffffffff81111562000d9f5762000d9e62000afa565b5b62000dad8b828c0162000c55565b975050604062000dc08b828c0162000cac565b965050606062000dd38b828c0162000cac565b955050608062000de68b828c0162000d11565b94505060a062000df98b828c0162000cac565b93505060c062000e0c8b828c0162000cac565b92505060e062000e1f8b828c0162000cac565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ebd5780860481111562000e955762000e9462000e2f565b5b600185161562000ea55780820291505b808102905062000eb58562000e5e565b945062000e75565b94509492505050565b60008262000ed8576001905062000fab565b8162000ee8576000905062000fab565b816001811462000f01576002811462000f0c5762000f42565b600191505062000fab565b60ff84111562000f215762000f2062000e2f565b5b8360020a91508482111562000f3b5762000f3a62000e2f565b5b5062000fab565b5060208310610133831016604e8410600b841016171562000f7c5782820a90508381111562000f765762000f7562000e2f565b5b62000fab565b62000f8b848484600162000e6b565b9250905081840481111562000fa55762000fa462000e2f565b5b81810290505b9392505050565b600062000fbf8262000c88565b915062000fcc8362000c88565b925062000ffb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ec6565b905092915050565b6000620010108262000cc3565b9050919050565b620010228162001003565b81146200102e57600080fd5b50565b600081519050620010428162001017565b92915050565b60006020828403121562001061576200106062000af5565b5b6000620010718482850162001031565b91505092915050565b620010858162001003565b82525050565b6000604082019050620010a260008301856200107a565b620010b160208301846200107a565b9392505050565b620010c38162000c88565b82525050565b6000602082019050620010e06000830184620010b8565b92915050565b6000620010f38262000c88565b9150620011008362000c88565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200113c576200113b62000e2f565b5b828202905092915050565b6000620011548262000c88565b9150620011618362000c88565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001199576200119862000e2f565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b6000620011ed601383620011a4565b9150620011fa82620011b5565b602082019050919050565b600060208201905081810360008301526200122081620011de565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200126f57607f821691505b6020821081141562001286576200128562001227565b5b50919050565b615bea806200129c6000396000f3fe60806040526004361061037a5760003560e01c8063633a0b94116101d15780639cc1af6311610102578063bfc62f38116100a0578063dd62ed3e1161006f578063dd62ed3e14610c58578063e17c4c7414610c95578063f2fde38b14610cbe578063f98be8ad14610ce757610381565b8063bfc62f3814610bac578063c04a541414610bd7578063cc1776d314610c02578063d89135cd14610c2d57610381565b8063a9059cbb116100dc578063a9059cbb14610b02578063b33a444c14610b3f578063b4fe8f6a14610b6a578063bbc0c74214610b8157610381565b80639cc1af6314610a715780639daa30e314610aae578063a5332f2d14610ad757610381565b806385057fff1161016f5780638da5cb5b116101495780638da5cb5b146109a15780639045be58146109cc5780639579d51414610a0957806395d89b4114610a4657610381565b806385057fff146109385780638a516513146109615780638a8c523c1461098a57610381565b8063715018a6116101ab578063715018a6146108a4578063728d41c9146108bb5780638036d590146108e457806384ff58bd1461090f57610381565b8063633a0b941461082557806366a88d961461083c57806370a082311461086757610381565b80633bbac579116102ab5780634f7041a5116102495780635facf12e116102235780635facf12e1461076b5780635fecd926146107a857806360d1259e146107d157806361db2446146107fa57610381565b80634f7041a5146106da5780635196aadb14610705578063588d51891461072e57610381565b806343cc8c2a1161028557806343cc8c2a1461063f578063452ed4f11461067c5780634d5b15d4146106a75780634e6be544146106d057610381565b80633bbac579146105b057806342966c68146105ed57806342ce267e1461061657610381565b80631f53ac021161031857806325e7e3cf116102f257806325e7e3cf1461052c578063313ce567146105435780633732e2141461056e578063375632931461059957610381565b80631f53ac021461049d57806321bbcbb1146104c657806323b872dd146104ef57610381565b8063132c4feb11610354578063132c4feb14610419578063138abfd31461044457806317700f011461045b57806318160ddd1461047257610381565b806306fdde03146103865780630758d924146103b1578063095ea7b3146103dc57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d10565b6040516103a8919061436b565b60405180910390f35b3480156103bd57600080fd5b506103c6610da2565b6040516103d3919061440c565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe91906144af565b610dc8565b604051610410919061450a565b60405180910390f35b34801561042557600080fd5b5061042e610ddf565b60405161043b9190614534565b60405180910390f35b34801561045057600080fd5b50610459610de5565b005b34801561046757600080fd5b50610470610e81565b005b34801561047e57600080fd5b50610487610ea6565b6040516104949190614534565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf919061458d565b610eb0565b005b3480156104d257600080fd5b506104ed60048036038101906104e89190614702565b610f6c565b005b3480156104fb57600080fd5b506105166004803603810190610511919061474b565b611009565b604051610523919061450a565b60405180910390f35b34801561053857600080fd5b5061054161146c565b005b34801561054f57600080fd5b506105586114c4565b6040516105659190614534565b60405180910390f35b34801561057a57600080fd5b506105836114ce565b6040516105909190614534565b60405180910390f35b3480156105a557600080fd5b506105ae6114d4565b005b3480156105bc57600080fd5b506105d760048036038101906105d2919061479e565b6114df565b6040516105e4919061450a565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f91906147cb565b611535565b005b34801561062257600080fd5b5061063d600480360381019061063891906147cb565b6116ac565b005b34801561064b57600080fd5b506106666004803603810190610661919061479e565b6116be565b604051610673919061450a565b60405180910390f35b34801561068857600080fd5b506106916116de565b60405161069e9190614807565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906147cb565b611704565b005b6106d861175a565b005b3480156106e657600080fd5b506106ef611777565b6040516106fc9190614534565b60405180910390f35b34801561071157600080fd5b5061072c6004803603810190610727919061479e565b61177d565b005b34801561073a57600080fd5b506107556004803603810190610750919061479e565b611791565b6040516107629190614534565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d919061479e565b6117a9565b60405161079f9190614534565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca919061479e565b6118dd565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061479e565b6119d3565b005b34801561080657600080fd5b5061080f611ac3565b60405161081c9190614534565b60405180910390f35b34801561083157600080fd5b5061083a611ac9565b005b34801561084857600080fd5b50610851611b4e565b60405161085e9190614534565b60405180910390f35b34801561087357600080fd5b5061088e6004803603810190610889919061479e565b611b54565b60405161089b9190614534565b60405180910390f35b3480156108b057600080fd5b506108b9611b9d565b005b3480156108c757600080fd5b506108e260048036038101906108dd91906147cb565b611bb1565b005b3480156108f057600080fd5b506108f9611bc3565b6040516109069190614534565b60405180910390f35b34801561091b57600080fd5b506109366004803603810190610931919061484e565b611bc9565b005b34801561094457600080fd5b5061095f600480360381019061095a91906147cb565b611c83565b005b34801561096d57600080fd5b50610988600480360381019061098391906144af565b611cd9565b005b34801561099657600080fd5b5061099f611d7a565b005b3480156109ad57600080fd5b506109b6611d9f565b6040516109c39190614807565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee919061479e565b611dc8565b604051610a00919061450a565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b919061479e565b611e1e565b604051610a3d9190614534565b60405180910390f35b348015610a5257600080fd5b50610a5b611e36565b604051610a68919061436b565b60405180910390f35b348015610a7d57600080fd5b50610a986004803603810190610a93919061479e565b611ec8565b604051610aa5919061450a565b60405180910390f35b348015610aba57600080fd5b50610ad56004803603810190610ad0919061479e565b611f1e565b005b348015610ae357600080fd5b50610aec611fc9565b604051610af99190614534565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b2491906144af565b611fcf565b604051610b36919061450a565b60405180910390f35b348015610b4b57600080fd5b50610b546121bf565b604051610b619190614534565b60405180910390f35b348015610b7657600080fd5b50610b7f6121c5565b005b348015610b8d57600080fd5b50610b966121e7565b604051610ba3919061450a565b60405180910390f35b348015610bb857600080fd5b50610bc16121fa565b604051610bce9190614534565b60405180910390f35b348015610be357600080fd5b50610bec612200565b604051610bf9919061489d565b60405180910390f35b348015610c0e57600080fd5b50610c17612226565b604051610c249190614534565b60405180910390f35b348015610c3957600080fd5b50610c4261222c565b604051610c4f9190614534565b60405180910390f35b348015610c6457600080fd5b50610c7f6004803603810190610c7a91906148b8565b612232565b604051610c8c9190614534565b60405180910390f35b348015610ca157600080fd5b50610cbc6004803603810190610cb7919061479e565b6122b9565b005b348015610cca57600080fd5b50610ce56004803603810190610ce0919061479e565b6123a8565b005b348015610cf357600080fd5b50610d0e6004803603810190610d0991906147cb565b61242c565b005b606060018054610d1f90614927565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4b90614927565b8015610d985780601f10610d6d57610100808354040283529160200191610d98565b820191906000526020600020905b815481529060010190602001808311610d7b57829003601f168201915b5050505050905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610dd53384846124ae565b6001905092915050565b600f5481565b610ded612679565b600060085411610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906149cb565b60405180910390fd5b6000479050610e43306008546126f7565b60006008819055506000610e60824761294390919063ffffffff16565b9050610e778160125461249890919063ffffffff16565b6012819055505050565b610e89612679565b6000601160146101000a81548160ff021916908315150217905550565b6000600454905090565b610eb8612679565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90614a5d565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f74612679565b60005b8151811015611005576001601a6000848481518110610f9957610f98614a7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ffd90614adb565b915050610f77565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff1661102a612959565b73ffffffffffffffffffffffffffffffffffffffff161415611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890614b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890614b70565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990614bdc565b60405180910390fd5b81601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614c48565b60405180910390fd5b81601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90614cda565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611456576113d582601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611461848484612961565b600190509392505050565b611474612679565b61147c611d9f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156114c1573d6000803e3d6000fd5b50565b6000600354905090565b600e5481565b6114dd336130f6565b565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905081601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390614d6c565b60405180910390fd5b600082116115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690614dd8565b60405180910390fd5b60008211156116a85761165a82601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116a781836132c5565b5b5050565b6116b4612679565b8060058190555050565b60186020528060005260406000206000915054906101000a900460ff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61170c612679565b600f811115611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614e6a565b60405180910390fd5b80600b8190555050565b61176f3460125461249890919063ffffffff16565b601281905550565b600b5481565b611785612679565b61178e81613365565b50565b60176020528060005260406000206000915090505481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806118545750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561186257600090506118d8565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012546118b19190614e8a565b90506004546118bf84611b54565b826118ca9190614ebe565b6118d49190614f47565b9150505b919050565b6118e5612679565b60011515601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614fc4565b60405180910390fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119db612679565b601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90615056565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b611ad1612679565b600060095411611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d906149cb565b60405180910390fd5b611b44600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009546126f7565b6000600981905550565b60065481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ba5612679565b611baf6000613409565b565b611bb9612679565b8060068190555050565b60055481565b611bd1612679565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c8b612679565b6064811115611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906150e8565b60405180910390fd5b80600c8190555050565b611ce1612679565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d05611d9f565b836040518363ffffffff1660e01b8152600401611d23929190615108565b602060405180830381600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d759190615146565b505050565b611d82612679565b6001601160146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60166020528060005260406000206000915090505481565b606060028054611e4590614927565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7190614927565b8015611ebe5780601f10611e9357610100808354040283529160200191611ebe565b820191906000526020600020905b815481529060010190602001808311611ea157829003601f168201915b5050505050905090565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611f26612679565b611f2f81611dc8565b611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f65906151bf565b60405180910390fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff16611ff0612959565b73ffffffffffffffffffffffffffffffffffffffff161415612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90614b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90614b70565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f90614bdc565b60405180910390fd5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190615251565b60405180910390fd5b6121b5338484612961565b6001905092915050565b600c5481565b6121cd612679565b6000600a819055506000600b819055506000600c81905550565b601160149054906101000a900460ff1681565b60095481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600d5481565b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122c1612679565b601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661234d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612344906152e3565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123b0612679565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241790615375565b60405180910390fd5b61242981613409565b50565b612434612679565b600f811115612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f90614e6a565b60405180910390fd5b80600a8190555050565b600081836124909190614ebe565b905092915050565b600081836124a69190615395565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258590614b70565b60405180910390fd5b80601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266c9190614534565b60405180910390a3505050565b612681612959565b73ffffffffffffffffffffffffffffffffffffffff1661269f611d9f565b73ffffffffffffffffffffffffffffffffffffffff16146126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90615437565b60405180910390fd5b565b6000600267ffffffffffffffff811115612714576127136145bf565b5b6040519080825280602002602001820160405280156127425781602001602082028036833780820191505090505b509050308160008151811061275a57612759614a7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127fc57600080fd5b505afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612834919061546c565b8160018151811061284857612847614a7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008487426040518663ffffffff1660e01b81526004016128e6959493929190615592565b600060405180830381600087803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061293d91906156c4565b50505050565b600081836129519190614e8a565b905092915050565b600033905090565b60001515601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015612a11575060001515601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4790615759565b60405180910390fd5b612a58611d9f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612adb5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612af057612aeb8383836134cd565b6130f1565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b915750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fce5760011515601160149054906101000a900460ff16151514612bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be3906157c5565b60405180910390fd5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8f5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc557612c9e8282613661565b8015612caf5750612cae816136cc565b5b15612cc057612cbf83838361371c565b5b612fc9565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d685750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d8c57612d76816136cc565b15612d8757612d86838383613b85565b5b612fc8565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fc757612e3b611d9f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612ea65750612e77611d9f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612edc57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612f1257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612f2757612f228383836134cd565b612fc6565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f9857612f82816136cc565b15612f9357612f928383836134cd565b5b612fc5565b612fa28282613661565b8015612fb35750612fb2816136cc565b5b15612fc457612fc38383836134cd565b5b5b5b5b5b5b6130f0565b612fd6611d9f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806130415750613012611d9f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061307757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806130ad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156130c2576130bd8383836134cd565b6130ef565b6130cc8282613661565b80156130dd57506130dc816136cc565b5b156130ee576130ed8383836134cd565b5b5b5b5b505050565b6000613101826117a9565b905060008111613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d90615857565b60405180910390fd5b6000151561315383611dc8565b151514613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c906158e9565b60405180910390fd5b601254601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600081111561322c578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561322a573d6000803e3d6000fd5b505b61327e81601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6132da8160045461294390919063ffffffff16565b6004819055506132f581600d5461249890919063ffffffff16565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133599190614534565b60405180910390a35050565b61336e81611dc8565b156133ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a59061597b565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61351f81601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135b481601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136549190614534565b60405180910390a3505050565b600061367e8261367085611b54565b61249890919063ffffffff16565b60065410156136c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b9906159e7565b60405180910390fd5b6001905092915050565b6000600554821115613713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370a90615a53565b60405180910390fd5b60019050919050565b6000613726613fee565b905060006137526064613744600b548661248290919063ffffffff16565b61404190919063ffffffff16565b90506000613769828561294390919063ffffffff16565b905060008060008061377a86614057565b93509350935093506137d488601360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061386985601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138fe84601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139568460095461249890919063ffffffff16565b60098190555060018714156139af5761396f8a846132c5565b7f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b856040516139a293929190615a73565b60405180910390a1613b14565b6002871415613a02576139c28a83614138565b7f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b846040516139f593929190615a73565b60405180910390a1613b13565b6003871415613b1257613a5d81601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ab58160085461249890919063ffffffff16565b600881905550613ad081600e5461249890919063ffffffff16565b600e819055507f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b83604051613b0993929190615a73565b60405180910390a15b5b5b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051613b719190614534565b60405180910390a350505050505050505050565b6000613b8f613fee565b90506000613bbb6064613bad600a548661248290919063ffffffff16565b61404190919063ffffffff16565b90506000613bd2828561294390919063ffffffff16565b9050600080600080613be386614057565b9350935093509350613c3d88601360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cd285601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d6784601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dbf8460095461249890919063ffffffff16565b6009819055506001871415613e1857613dd88a846132c5565b7f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b85604051613e0b93929190615a73565b60405180910390a1613f7d565b6002871415613e6b57613e2b8a83614138565b7f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b84604051613e5e93929190615a73565b60405180910390a1613f7c565b6003871415613f7b57613ec681601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f1e8160085461249890919063ffffffff16565b600881905550613f3981600e5461249890919063ffffffff16565b600e819055507f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b83604051613f7293929190615a73565b60405180910390a15b5b5b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051613fda9190614534565b60405180910390a350505050505050505050565b60006001600342444532433a60405160200161400f96959493929190615b13565b6040516020818303038152906040528051906020012060001c6140329190615b83565b61403c9190615395565b905090565b6000818361404f9190614f47565b905092915050565b6000806000806000806000806000891115614121576140a06064614092600c5460646140839190614e8a565b8c61248290919063ffffffff16565b61404190919063ffffffff16565b93506140ca60646140bc600c548c61248290919063ffffffff16565b61404190919063ffffffff16565b92506140f460646140e6600c548c61248290919063ffffffff16565b61404190919063ffffffff16565b915061411e6064614110600c548c61248290919063ffffffff16565b61404190919063ffffffff16565b90505b838383839750975097509750505050509193509193565b60008111156142ce57600061414c82614057565b50925050506141c58160136000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b60136000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423f81600f5461249890919063ffffffff16565b600f81905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142c49190614534565b60405180910390a3505b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561430c5780820151818401526020810190506142f1565b8381111561431b576000848401525b50505050565b6000601f19601f8301169050919050565b600061433d826142d2565b61434781856142dd565b93506143578185602086016142ee565b61436081614321565b840191505092915050565b600060208201905081810360008301526143858184614332565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006143d26143cd6143c88461438d565b6143ad565b61438d565b9050919050565b60006143e4826143b7565b9050919050565b60006143f6826143d9565b9050919050565b614406816143eb565b82525050565b600060208201905061442160008301846143fd565b92915050565b6000604051905090565b600080fd5b600080fd5b60006144468261438d565b9050919050565b6144568161443b565b811461446157600080fd5b50565b6000813590506144738161444d565b92915050565b6000819050919050565b61448c81614479565b811461449757600080fd5b50565b6000813590506144a981614483565b92915050565b600080604083850312156144c6576144c5614431565b5b60006144d485828601614464565b92505060206144e58582860161449a565b9150509250929050565b60008115159050919050565b614504816144ef565b82525050565b600060208201905061451f60008301846144fb565b92915050565b61452e81614479565b82525050565b60006020820190506145496000830184614525565b92915050565b600061455a8261438d565b9050919050565b61456a8161454f565b811461457557600080fd5b50565b60008135905061458781614561565b92915050565b6000602082840312156145a3576145a2614431565b5b60006145b184828501614578565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6145f782614321565b810181811067ffffffffffffffff82111715614616576146156145bf565b5b80604052505050565b6000614629614427565b905061463582826145ee565b919050565b600067ffffffffffffffff821115614655576146546145bf565b5b602082029050602081019050919050565b600080fd5b600061467e6146798461463a565b61461f565b905080838252602082019050602084028301858111156146a1576146a0614666565b5b835b818110156146ca57806146b68882614464565b8452602084019350506020810190506146a3565b5050509392505050565b600082601f8301126146e9576146e86145ba565b5b81356146f984826020860161466b565b91505092915050565b60006020828403121561471857614717614431565b5b600082013567ffffffffffffffff81111561473657614735614436565b5b614742848285016146d4565b91505092915050565b60008060006060848603121561476457614763614431565b5b600061477286828701614464565b935050602061478386828701614464565b92505060406147948682870161449a565b9150509250925092565b6000602082840312156147b4576147b3614431565b5b60006147c284828501614464565b91505092915050565b6000602082840312156147e1576147e0614431565b5b60006147ef8482850161449a565b91505092915050565b6148018161443b565b82525050565b600060208201905061481c60008301846147f8565b92915050565b61482b816144ef565b811461483657600080fd5b50565b60008135905061484881614822565b92915050565b6000806040838503121561486557614864614431565b5b600061487385828601614464565b925050602061488485828601614839565b9150509250929050565b6148978161454f565b82525050565b60006020820190506148b2600083018461488e565b92915050565b600080604083850312156148cf576148ce614431565b5b60006148dd85828601614464565b92505060206148ee85828601614464565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061493f57607f821691505b60208210811415614953576149526148f8565b5b50919050565b7f45524332303a20496e73756666696369656e7420746f6b656e20746f2073776160008201527f7000000000000000000000000000000000000000000000000000000000000000602082015250565b60006149b56021836142dd565b91506149c082614959565b604082019050919050565b600060208201905081810360008301526149e4816149a8565b9050919050565b7f45524332303a2043616e27742073657420646576656c6f706d656e742077616c60008201527f6c6574206173206e756c6c20616464726573732e000000000000000000000000602082015250565b6000614a476034836142dd565b9150614a52826149eb565b604082019050919050565b60006020820190508181036000830152614a7681614a3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ae682614479565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b1957614b18614aac565b5b600182019050919050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b6000614b5a6013836142dd565b9150614b6582614b24565b602082019050919050565b60006020820190508181036000830152614b8981614b4d565b9050919050565b7f45524332303a2044656164204164647265737300000000000000000000000000600082015250565b6000614bc66013836142dd565b9150614bd182614b90565b602082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b7f45524332303a20496e73756666696369656e7420616c6c6f77616e63652e0000600082015250565b6000614c32601e836142dd565b9150614c3d82614bfc565b602082019050919050565b60006020820190508181036000830152614c6181614c25565b9050919050565b7f45524332303a20416d6f756e7420657863656564732073656e6465722773206160008201527f63636f756e742062616c616e6365000000000000000000000000000000000000602082015250565b6000614cc4602e836142dd565b9150614ccf82614c68565b604082019050919050565b60006020820190508181036000830152614cf381614cb7565b9050919050565b7f45524332303a204275726e20416d6f756e742065786365656473206163636f7560008201527f6e742062616c616e636500000000000000000000000000000000000000000000602082015250565b6000614d56602a836142dd565b9150614d6182614cfa565b604082019050919050565b60006020820190508181036000830152614d8581614d49565b9050919050565b7f45524332303a20456e74657220736f6d6520616d6f756e7420746f206275726e600082015250565b6000614dc26020836142dd565b9150614dcd82614d8c565b602082019050919050565b60006020820190508181036000830152614df181614db5565b9050919050565b7f45524332303a205468652070657263656e746167652063616e2774206d6f726560008201527f203130302e000000000000000000000000000000000000000000000000000000602082015250565b6000614e546025836142dd565b9150614e5f82614df8565b604082019050919050565b60006020820190508181036000830152614e8381614e47565b9050919050565b6000614e9582614479565b9150614ea083614479565b925082821015614eb357614eb2614aac565b5b828203905092915050565b6000614ec982614479565b9150614ed483614479565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0d57614f0c614aac565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f5282614479565b9150614f5d83614479565b925082614f6d57614f6c614f18565b5b828204905092915050565b7f45524332303a20426f74206973206e6f7420696e20746865206c697374000000600082015250565b6000614fae601d836142dd565b9150614fb982614f78565b602082019050919050565b60006020820190508181036000830152614fdd81614fa1565b9050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b60006150406023836142dd565b915061504b82614fe4565b604082019050919050565b6000602082019050818103600083015261506f81615033565b9050919050565b7f45524332303a205468652070657263656e746167652063616e2774206d6f726560008201527f207468656e203130300000000000000000000000000000000000000000000000602082015250565b60006150d26029836142dd565b91506150dd82615076565b604082019050919050565b60006020820190508181036000830152615101816150c5565b9050919050565b600060408201905061511d60008301856147f8565b61512a6020830184614525565b9392505050565b60008151905061514081614822565b92915050565b60006020828403121561515c5761515b614431565b5b600061516a84828501615131565b91505092915050565b7f45524332303a204163636f756e74206d757374206265206578636c7564656400600082015250565b60006151a9601f836142dd565b91506151b482615173565b602082019050919050565b600060208201905081810360008301526151d88161519c565b9050919050565b7f45524332303a20416d6f756e742065786365656473206163636f756e7420626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b600061523b6025836142dd565b9150615246826151df565b604082019050919050565b6000602082019050818103600083015261526a8161522e565b9050919050565b7f45524332303a204163636f756e7420697320616c726561647920696e636c756460008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b60006152cd6023836142dd565b91506152d882615271565b604082019050919050565b600060208201905081810360008301526152fc816152c0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061535f6026836142dd565b915061536a82615303565b604082019050919050565b6000602082019050818103600083015261538e81615352565b9050919050565b60006153a082614479565b91506153ab83614479565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153e0576153df614aac565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006154216020836142dd565b915061542c826153eb565b602082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b6000815190506154668161444d565b92915050565b60006020828403121561548257615481614431565b5b600061549084828501615457565b91505092915050565b6000819050919050565b60006154be6154b96154b484615499565b6143ad565b614479565b9050919050565b6154ce816154a3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155098161443b565b82525050565b600061551b8383615500565b60208301905092915050565b6000602082019050919050565b600061553f826154d4565b61554981856154df565b9350615554836154f0565b8060005b8381101561558557815161556c888261550f565b975061557783615527565b925050600181019050615558565b5085935050505092915050565b600060a0820190506155a76000830188614525565b6155b460208301876154c5565b81810360408301526155c68186615534565b90506155d560608301856147f8565b6155e26080830184614525565b9695505050505050565b600067ffffffffffffffff821115615607576156066145bf565b5b602082029050602081019050919050565b60008151905061562781614483565b92915050565b600061564061563b846155ec565b61461f565b9050808382526020820190506020840283018581111561566357615662614666565b5b835b8181101561568c57806156788882615618565b845260208401935050602081019050615665565b5050509392505050565b600082601f8301126156ab576156aa6145ba565b5b81516156bb84826020860161562d565b91505092915050565b6000602082840312156156da576156d9614431565b5b600082015167ffffffffffffffff8111156156f8576156f7614436565b5b61570484828501615696565b91505092915050565b7f45524332303a20426f74732063616e2774207472616465000000000000000000600082015250565b60006157436017836142dd565b915061574e8261570d565b602082019050919050565b6000602082019050818103600083015261577281615736565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e000000600082015250565b60006157af601d836142dd565b91506157ba82615779565b602082019050919050565b600060208201905081810360008301526157de816157a2565b9050919050565b7f45524332303a20436c61696d20616d6f756e742073686f756c64206265206d6f60008201527f7265207468656e20300000000000000000000000000000000000000000000000602082015250565b60006158416029836142dd565b915061584c826157e5565b604082019050919050565b6000602082019050818103600083015261587081615834565b9050919050565b7f45524332303a2041646472657373206973206578636c7564656420746f20636c60008201527f61696d207265666c656374696f6e000000000000000000000000000000000000602082015250565b60006158d3602e836142dd565b91506158de82615877565b604082019050919050565b60006020820190508181036000830152615902816158c6565b9050919050565b7f45524332303a204163636f756e74206d757374206e6f74206265206578636c7560008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b60006159656023836142dd565b915061597082615909565b604082019050919050565b6000602082019050818103600083015261599481615958565b9050919050565b7f45524332303a2057616c6c6574206c696d697420657863656564730000000000600082015250565b60006159d1601b836142dd565b91506159dc8261599b565b602082019050919050565b60006020820190508181036000830152615a00816159c4565b9050919050565b7f45524332303a205472616e73616374696f6e206c696d69742065786365656473600082015250565b6000615a3d6020836142dd565b9150615a4882615a07565b602082019050919050565b60006020820190508181036000830152615a6c81615a30565b9050919050565b6000606082019050615a886000830186614525565b615a9560208301856147f8565b615aa26040830184614525565b949350505050565b6000819050919050565b615ac5615ac082614479565b615aaa565b82525050565b60008160601b9050919050565b6000615ae382615acb565b9050919050565b6000615af582615ad8565b9050919050565b615b0d615b088261443b565b615aea565b82525050565b6000615b1f8289615ab4565b602082019150615b2f8288615ab4565b602082019150615b3f8287615ab4565b602082019150615b4f8286615afc565b601482019150615b5f8285615ab4565b602082019150615b6f8284615ab4565b602082019150819050979650505050505050565b6000615b8e82614479565b9150615b9983614479565b925082615ba957615ba8614f18565b5b82820690509291505056fea2646970667358221220c30eaa374c0dfcd70ad4ff33ea2b9523ea9bde1b6bbe54a95620a4e4f227ea9564736f6c634300080900330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000377bc5e63ef75b266a199a8172fd111f5c5e42c0000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000000000000000000000000094d61676963204261670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546656c6978000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061037a5760003560e01c8063633a0b94116101d15780639cc1af6311610102578063bfc62f38116100a0578063dd62ed3e1161006f578063dd62ed3e14610c58578063e17c4c7414610c95578063f2fde38b14610cbe578063f98be8ad14610ce757610381565b8063bfc62f3814610bac578063c04a541414610bd7578063cc1776d314610c02578063d89135cd14610c2d57610381565b8063a9059cbb116100dc578063a9059cbb14610b02578063b33a444c14610b3f578063b4fe8f6a14610b6a578063bbc0c74214610b8157610381565b80639cc1af6314610a715780639daa30e314610aae578063a5332f2d14610ad757610381565b806385057fff1161016f5780638da5cb5b116101495780638da5cb5b146109a15780639045be58146109cc5780639579d51414610a0957806395d89b4114610a4657610381565b806385057fff146109385780638a516513146109615780638a8c523c1461098a57610381565b8063715018a6116101ab578063715018a6146108a4578063728d41c9146108bb5780638036d590146108e457806384ff58bd1461090f57610381565b8063633a0b941461082557806366a88d961461083c57806370a082311461086757610381565b80633bbac579116102ab5780634f7041a5116102495780635facf12e116102235780635facf12e1461076b5780635fecd926146107a857806360d1259e146107d157806361db2446146107fa57610381565b80634f7041a5146106da5780635196aadb14610705578063588d51891461072e57610381565b806343cc8c2a1161028557806343cc8c2a1461063f578063452ed4f11461067c5780634d5b15d4146106a75780634e6be544146106d057610381565b80633bbac579146105b057806342966c68146105ed57806342ce267e1461061657610381565b80631f53ac021161031857806325e7e3cf116102f257806325e7e3cf1461052c578063313ce567146105435780633732e2141461056e578063375632931461059957610381565b80631f53ac021461049d57806321bbcbb1146104c657806323b872dd146104ef57610381565b8063132c4feb11610354578063132c4feb14610419578063138abfd31461044457806317700f011461045b57806318160ddd1461047257610381565b806306fdde03146103865780630758d924146103b1578063095ea7b3146103dc57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d10565b6040516103a8919061436b565b60405180910390f35b3480156103bd57600080fd5b506103c6610da2565b6040516103d3919061440c565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe91906144af565b610dc8565b604051610410919061450a565b60405180910390f35b34801561042557600080fd5b5061042e610ddf565b60405161043b9190614534565b60405180910390f35b34801561045057600080fd5b50610459610de5565b005b34801561046757600080fd5b50610470610e81565b005b34801561047e57600080fd5b50610487610ea6565b6040516104949190614534565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf919061458d565b610eb0565b005b3480156104d257600080fd5b506104ed60048036038101906104e89190614702565b610f6c565b005b3480156104fb57600080fd5b506105166004803603810190610511919061474b565b611009565b604051610523919061450a565b60405180910390f35b34801561053857600080fd5b5061054161146c565b005b34801561054f57600080fd5b506105586114c4565b6040516105659190614534565b60405180910390f35b34801561057a57600080fd5b506105836114ce565b6040516105909190614534565b60405180910390f35b3480156105a557600080fd5b506105ae6114d4565b005b3480156105bc57600080fd5b506105d760048036038101906105d2919061479e565b6114df565b6040516105e4919061450a565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f91906147cb565b611535565b005b34801561062257600080fd5b5061063d600480360381019061063891906147cb565b6116ac565b005b34801561064b57600080fd5b506106666004803603810190610661919061479e565b6116be565b604051610673919061450a565b60405180910390f35b34801561068857600080fd5b506106916116de565b60405161069e9190614807565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906147cb565b611704565b005b6106d861175a565b005b3480156106e657600080fd5b506106ef611777565b6040516106fc9190614534565b60405180910390f35b34801561071157600080fd5b5061072c6004803603810190610727919061479e565b61177d565b005b34801561073a57600080fd5b506107556004803603810190610750919061479e565b611791565b6040516107629190614534565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d919061479e565b6117a9565b60405161079f9190614534565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca919061479e565b6118dd565b005b3480156107dd57600080fd5b506107f860048036038101906107f3919061479e565b6119d3565b005b34801561080657600080fd5b5061080f611ac3565b60405161081c9190614534565b60405180910390f35b34801561083157600080fd5b5061083a611ac9565b005b34801561084857600080fd5b50610851611b4e565b60405161085e9190614534565b60405180910390f35b34801561087357600080fd5b5061088e6004803603810190610889919061479e565b611b54565b60405161089b9190614534565b60405180910390f35b3480156108b057600080fd5b506108b9611b9d565b005b3480156108c757600080fd5b506108e260048036038101906108dd91906147cb565b611bb1565b005b3480156108f057600080fd5b506108f9611bc3565b6040516109069190614534565b60405180910390f35b34801561091b57600080fd5b506109366004803603810190610931919061484e565b611bc9565b005b34801561094457600080fd5b5061095f600480360381019061095a91906147cb565b611c83565b005b34801561096d57600080fd5b50610988600480360381019061098391906144af565b611cd9565b005b34801561099657600080fd5b5061099f611d7a565b005b3480156109ad57600080fd5b506109b6611d9f565b6040516109c39190614807565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee919061479e565b611dc8565b604051610a00919061450a565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b919061479e565b611e1e565b604051610a3d9190614534565b60405180910390f35b348015610a5257600080fd5b50610a5b611e36565b604051610a68919061436b565b60405180910390f35b348015610a7d57600080fd5b50610a986004803603810190610a93919061479e565b611ec8565b604051610aa5919061450a565b60405180910390f35b348015610aba57600080fd5b50610ad56004803603810190610ad0919061479e565b611f1e565b005b348015610ae357600080fd5b50610aec611fc9565b604051610af99190614534565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b2491906144af565b611fcf565b604051610b36919061450a565b60405180910390f35b348015610b4b57600080fd5b50610b546121bf565b604051610b619190614534565b60405180910390f35b348015610b7657600080fd5b50610b7f6121c5565b005b348015610b8d57600080fd5b50610b966121e7565b604051610ba3919061450a565b60405180910390f35b348015610bb857600080fd5b50610bc16121fa565b604051610bce9190614534565b60405180910390f35b348015610be357600080fd5b50610bec612200565b604051610bf9919061489d565b60405180910390f35b348015610c0e57600080fd5b50610c17612226565b604051610c249190614534565b60405180910390f35b348015610c3957600080fd5b50610c4261222c565b604051610c4f9190614534565b60405180910390f35b348015610c6457600080fd5b50610c7f6004803603810190610c7a91906148b8565b612232565b604051610c8c9190614534565b60405180910390f35b348015610ca157600080fd5b50610cbc6004803603810190610cb7919061479e565b6122b9565b005b348015610cca57600080fd5b50610ce56004803603810190610ce0919061479e565b6123a8565b005b348015610cf357600080fd5b50610d0e6004803603810190610d0991906147cb565b61242c565b005b606060018054610d1f90614927565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4b90614927565b8015610d985780601f10610d6d57610100808354040283529160200191610d98565b820191906000526020600020905b815481529060010190602001808311610d7b57829003601f168201915b5050505050905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610dd53384846124ae565b6001905092915050565b600f5481565b610ded612679565b600060085411610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e29906149cb565b60405180910390fd5b6000479050610e43306008546126f7565b60006008819055506000610e60824761294390919063ffffffff16565b9050610e778160125461249890919063ffffffff16565b6012819055505050565b610e89612679565b6000601160146101000a81548160ff021916908315150217905550565b6000600454905090565b610eb8612679565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90614a5d565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f74612679565b60005b8151811015611005576001601a6000848481518110610f9957610f98614a7d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ffd90614adb565b915050610f77565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff1661102a612959565b73ffffffffffffffffffffffffffffffffffffffff161415611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890614b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890614b70565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990614bdc565b60405180910390fd5b81601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614c48565b60405180910390fd5b81601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90614cda565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611456576113d582601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611461848484612961565b600190509392505050565b611474612679565b61147c611d9f565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156114c1573d6000803e3d6000fd5b50565b6000600354905090565b600e5481565b6114dd336130f6565b565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905081601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390614d6c565b60405180910390fd5b600082116115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690614dd8565b60405180910390fd5b60008211156116a85761165a82601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116a781836132c5565b5b5050565b6116b4612679565b8060058190555050565b60186020528060005260406000206000915054906101000a900460ff1681565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61170c612679565b600f811115611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790614e6a565b60405180910390fd5b80600b8190555050565b61176f3460125461249890919063ffffffff16565b601281905550565b600b5481565b611785612679565b61178e81613365565b50565b60176020528060005260406000206000915090505481565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806118545750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561186257600090506118d8565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012546118b19190614e8a565b90506004546118bf84611b54565b826118ca9190614ebe565b6118d49190614f47565b9150505b919050565b6118e5612679565b60011515601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f90614fc4565b60405180910390fd5b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119db612679565b601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90615056565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60125481565b611ad1612679565b600060095411611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d906149cb565b60405180910390fd5b611b44600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009546126f7565b6000600981905550565b60065481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ba5612679565b611baf6000613409565b565b611bb9612679565b8060068190555050565b60055481565b611bd1612679565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c8b612679565b6064811115611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc6906150e8565b60405180910390fd5b80600c8190555050565b611ce1612679565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d05611d9f565b836040518363ffffffff1660e01b8152600401611d23929190615108565b602060405180830381600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d759190615146565b505050565b611d82612679565b6001601160146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60166020528060005260406000206000915090505481565b606060028054611e4590614927565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7190614927565b8015611ebe5780601f10611e9357610100808354040283529160200191611ebe565b820191906000526020600020905b815481529060010190602001808311611ea157829003601f168201915b5050505050905090565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611f26612679565b611f2f81611dc8565b611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f65906151bf565b60405180910390fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b60008073ffffffffffffffffffffffffffffffffffffffff16611ff0612959565b73ffffffffffffffffffffffffffffffffffffffff161415612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e90614b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90614b70565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f90614bdc565b60405180910390fd5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190615251565b60405180910390fd5b6121b5338484612961565b6001905092915050565b600c5481565b6121cd612679565b6000600a819055506000600b819055506000600c81905550565b601160149054906101000a900460ff1681565b60095481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600d5481565b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6122c1612679565b601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661234d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612344906152e3565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123b0612679565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241790615375565b60405180910390fd5b61242981613409565b50565b612434612679565b600f811115612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f90614e6a565b60405180910390fd5b80600a8190555050565b600081836124909190614ebe565b905092915050565b600081836124a69190615395565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561251e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251590614b70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561258e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258590614b70565b60405180910390fd5b80601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161266c9190614534565b60405180910390a3505050565b612681612959565b73ffffffffffffffffffffffffffffffffffffffff1661269f611d9f565b73ffffffffffffffffffffffffffffffffffffffff16146126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90615437565b60405180910390fd5b565b6000600267ffffffffffffffff811115612714576127136145bf565b5b6040519080825280602002602001820160405280156127425781602001602082028036833780820191505090505b509050308160008151811061275a57612759614a7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156127fc57600080fd5b505afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612834919061546c565b8160018151811061284857612847614a7d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008487426040518663ffffffff1660e01b81526004016128e6959493929190615592565b600060405180830381600087803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061293d91906156c4565b50505050565b600081836129519190614e8a565b905092915050565b600033905090565b60001515601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015612a11575060001515601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4790615759565b60405180910390fd5b612a58611d9f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612adb5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612af057612aeb8383836134cd565b6130f1565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b915750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fce5760011515601160149054906101000a900460ff16151514612bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be3906157c5565b60405180910390fd5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8f5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc557612c9e8282613661565b8015612caf5750612cae816136cc565b5b15612cc057612cbf83838361371c565b5b612fc9565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d685750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d8c57612d76816136cc565b15612d8757612d86838383613b85565b5b612fc8565b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e2e5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fc757612e3b611d9f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612ea65750612e77611d9f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612edc57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612f1257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612f2757612f228383836134cd565b612fc6565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f9857612f82816136cc565b15612f9357612f928383836134cd565b5b612fc5565b612fa28282613661565b8015612fb35750612fb2816136cc565b5b15612fc457612fc38383836134cd565b5b5b5b5b5b5b6130f0565b612fd6611d9f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806130415750613012611d9f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061307757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806130ad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156130c2576130bd8383836134cd565b6130ef565b6130cc8282613661565b80156130dd57506130dc816136cc565b5b156130ee576130ed8383836134cd565b5b5b5b5b505050565b6000613101826117a9565b905060008111613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d90615857565b60405180910390fd5b6000151561315383611dc8565b151514613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c906158e9565b60405180910390fd5b601254601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600081111561322c578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561322a573d6000803e3d6000fd5b505b61327e81601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6132da8160045461294390919063ffffffff16565b6004819055506132f581600d5461249890919063ffffffff16565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133599190614534565b60405180910390a35050565b61336e81611dc8565b156133ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a59061597b565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61351f81601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135b481601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136549190614534565b60405180910390a3505050565b600061367e8261367085611b54565b61249890919063ffffffff16565b60065410156136c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b9906159e7565b60405180910390fd5b6001905092915050565b6000600554821115613713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370a90615a53565b60405180910390fd5b60019050919050565b6000613726613fee565b905060006137526064613744600b548661248290919063ffffffff16565b61404190919063ffffffff16565b90506000613769828561294390919063ffffffff16565b905060008060008061377a86614057565b93509350935093506137d488601360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061386985601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138fe84601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139568460095461249890919063ffffffff16565b60098190555060018714156139af5761396f8a846132c5565b7f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b856040516139a293929190615a73565b60405180910390a1613b14565b6002871415613a02576139c28a83614138565b7f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b846040516139f593929190615a73565b60405180910390a1613b13565b6003871415613b1257613a5d81601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ab58160085461249890919063ffffffff16565b600881905550613ad081600e5461249890919063ffffffff16565b600e819055507f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b83604051613b0993929190615a73565b60405180910390a15b5b5b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051613b719190614534565b60405180910390a350505050505050505050565b6000613b8f613fee565b90506000613bbb6064613bad600a548661248290919063ffffffff16565b61404190919063ffffffff16565b90506000613bd2828561294390919063ffffffff16565b9050600080600080613be386614057565b9350935093509350613c3d88601360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461294390919063ffffffff16565b601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cd285601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d6784601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dbf8460095461249890919063ffffffff16565b6009819055506001871415613e1857613dd88a846132c5565b7f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b85604051613e0b93929190615a73565b60405180910390a1613f7d565b6002871415613e6b57613e2b8a83614138565b7f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b84604051613e5e93929190615a73565b60405180910390a1613f7c565b6003871415613f7b57613ec681601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f1e8160085461249890919063ffffffff16565b600881905550613f3981600e5461249890919063ffffffff16565b600e819055507f43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58878b83604051613f7293929190615a73565b60405180910390a15b5b5b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051613fda9190614534565b60405180910390a350505050505050505050565b60006001600342444532433a60405160200161400f96959493929190615b13565b6040516020818303038152906040528051906020012060001c6140329190615b83565b61403c9190615395565b905090565b6000818361404f9190614f47565b905092915050565b6000806000806000806000806000891115614121576140a06064614092600c5460646140839190614e8a565b8c61248290919063ffffffff16565b61404190919063ffffffff16565b93506140ca60646140bc600c548c61248290919063ffffffff16565b61404190919063ffffffff16565b92506140f460646140e6600c548c61248290919063ffffffff16565b61404190919063ffffffff16565b915061411e6064614110600c548c61248290919063ffffffff16565b61404190919063ffffffff16565b90505b838383839750975097509750505050509193509193565b60008111156142ce57600061414c82614057565b50925050506141c58160136000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249890919063ffffffff16565b60136000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061423f81600f5461249890919063ffffffff16565b600f81905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142c49190614534565b60405180910390a3505b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561430c5780820151818401526020810190506142f1565b8381111561431b576000848401525b50505050565b6000601f19601f8301169050919050565b600061433d826142d2565b61434781856142dd565b93506143578185602086016142ee565b61436081614321565b840191505092915050565b600060208201905081810360008301526143858184614332565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006143d26143cd6143c88461438d565b6143ad565b61438d565b9050919050565b60006143e4826143b7565b9050919050565b60006143f6826143d9565b9050919050565b614406816143eb565b82525050565b600060208201905061442160008301846143fd565b92915050565b6000604051905090565b600080fd5b600080fd5b60006144468261438d565b9050919050565b6144568161443b565b811461446157600080fd5b50565b6000813590506144738161444d565b92915050565b6000819050919050565b61448c81614479565b811461449757600080fd5b50565b6000813590506144a981614483565b92915050565b600080604083850312156144c6576144c5614431565b5b60006144d485828601614464565b92505060206144e58582860161449a565b9150509250929050565b60008115159050919050565b614504816144ef565b82525050565b600060208201905061451f60008301846144fb565b92915050565b61452e81614479565b82525050565b60006020820190506145496000830184614525565b92915050565b600061455a8261438d565b9050919050565b61456a8161454f565b811461457557600080fd5b50565b60008135905061458781614561565b92915050565b6000602082840312156145a3576145a2614431565b5b60006145b184828501614578565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6145f782614321565b810181811067ffffffffffffffff82111715614616576146156145bf565b5b80604052505050565b6000614629614427565b905061463582826145ee565b919050565b600067ffffffffffffffff821115614655576146546145bf565b5b602082029050602081019050919050565b600080fd5b600061467e6146798461463a565b61461f565b905080838252602082019050602084028301858111156146a1576146a0614666565b5b835b818110156146ca57806146b68882614464565b8452602084019350506020810190506146a3565b5050509392505050565b600082601f8301126146e9576146e86145ba565b5b81356146f984826020860161466b565b91505092915050565b60006020828403121561471857614717614431565b5b600082013567ffffffffffffffff81111561473657614735614436565b5b614742848285016146d4565b91505092915050565b60008060006060848603121561476457614763614431565b5b600061477286828701614464565b935050602061478386828701614464565b92505060406147948682870161449a565b9150509250925092565b6000602082840312156147b4576147b3614431565b5b60006147c284828501614464565b91505092915050565b6000602082840312156147e1576147e0614431565b5b60006147ef8482850161449a565b91505092915050565b6148018161443b565b82525050565b600060208201905061481c60008301846147f8565b92915050565b61482b816144ef565b811461483657600080fd5b50565b60008135905061484881614822565b92915050565b6000806040838503121561486557614864614431565b5b600061487385828601614464565b925050602061488485828601614839565b9150509250929050565b6148978161454f565b82525050565b60006020820190506148b2600083018461488e565b92915050565b600080604083850312156148cf576148ce614431565b5b60006148dd85828601614464565b92505060206148ee85828601614464565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061493f57607f821691505b60208210811415614953576149526148f8565b5b50919050565b7f45524332303a20496e73756666696369656e7420746f6b656e20746f2073776160008201527f7000000000000000000000000000000000000000000000000000000000000000602082015250565b60006149b56021836142dd565b91506149c082614959565b604082019050919050565b600060208201905081810360008301526149e4816149a8565b9050919050565b7f45524332303a2043616e27742073657420646576656c6f706d656e742077616c60008201527f6c6574206173206e756c6c20616464726573732e000000000000000000000000602082015250565b6000614a476034836142dd565b9150614a52826149eb565b604082019050919050565b60006020820190508181036000830152614a7681614a3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ae682614479565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b1957614b18614aac565b5b600182019050919050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b6000614b5a6013836142dd565b9150614b6582614b24565b602082019050919050565b60006020820190508181036000830152614b8981614b4d565b9050919050565b7f45524332303a2044656164204164647265737300000000000000000000000000600082015250565b6000614bc66013836142dd565b9150614bd182614b90565b602082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b7f45524332303a20496e73756666696369656e7420616c6c6f77616e63652e0000600082015250565b6000614c32601e836142dd565b9150614c3d82614bfc565b602082019050919050565b60006020820190508181036000830152614c6181614c25565b9050919050565b7f45524332303a20416d6f756e7420657863656564732073656e6465722773206160008201527f63636f756e742062616c616e6365000000000000000000000000000000000000602082015250565b6000614cc4602e836142dd565b9150614ccf82614c68565b604082019050919050565b60006020820190508181036000830152614cf381614cb7565b9050919050565b7f45524332303a204275726e20416d6f756e742065786365656473206163636f7560008201527f6e742062616c616e636500000000000000000000000000000000000000000000602082015250565b6000614d56602a836142dd565b9150614d6182614cfa565b604082019050919050565b60006020820190508181036000830152614d8581614d49565b9050919050565b7f45524332303a20456e74657220736f6d6520616d6f756e7420746f206275726e600082015250565b6000614dc26020836142dd565b9150614dcd82614d8c565b602082019050919050565b60006020820190508181036000830152614df181614db5565b9050919050565b7f45524332303a205468652070657263656e746167652063616e2774206d6f726560008201527f203130302e000000000000000000000000000000000000000000000000000000602082015250565b6000614e546025836142dd565b9150614e5f82614df8565b604082019050919050565b60006020820190508181036000830152614e8381614e47565b9050919050565b6000614e9582614479565b9150614ea083614479565b925082821015614eb357614eb2614aac565b5b828203905092915050565b6000614ec982614479565b9150614ed483614479565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0d57614f0c614aac565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f5282614479565b9150614f5d83614479565b925082614f6d57614f6c614f18565b5b828204905092915050565b7f45524332303a20426f74206973206e6f7420696e20746865206c697374000000600082015250565b6000614fae601d836142dd565b9150614fb982614f78565b602082019050919050565b60006020820190508181036000830152614fdd81614fa1565b9050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b60006150406023836142dd565b915061504b82614fe4565b604082019050919050565b6000602082019050818103600083015261506f81615033565b9050919050565b7f45524332303a205468652070657263656e746167652063616e2774206d6f726560008201527f207468656e203130300000000000000000000000000000000000000000000000602082015250565b60006150d26029836142dd565b91506150dd82615076565b604082019050919050565b60006020820190508181036000830152615101816150c5565b9050919050565b600060408201905061511d60008301856147f8565b61512a6020830184614525565b9392505050565b60008151905061514081614822565b92915050565b60006020828403121561515c5761515b614431565b5b600061516a84828501615131565b91505092915050565b7f45524332303a204163636f756e74206d757374206265206578636c7564656400600082015250565b60006151a9601f836142dd565b91506151b482615173565b602082019050919050565b600060208201905081810360008301526151d88161519c565b9050919050565b7f45524332303a20416d6f756e742065786365656473206163636f756e7420626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b600061523b6025836142dd565b9150615246826151df565b604082019050919050565b6000602082019050818103600083015261526a8161522e565b9050919050565b7f45524332303a204163636f756e7420697320616c726561647920696e636c756460008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b60006152cd6023836142dd565b91506152d882615271565b604082019050919050565b600060208201905081810360008301526152fc816152c0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061535f6026836142dd565b915061536a82615303565b604082019050919050565b6000602082019050818103600083015261538e81615352565b9050919050565b60006153a082614479565b91506153ab83614479565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153e0576153df614aac565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006154216020836142dd565b915061542c826153eb565b602082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b6000815190506154668161444d565b92915050565b60006020828403121561548257615481614431565b5b600061549084828501615457565b91505092915050565b6000819050919050565b60006154be6154b96154b484615499565b6143ad565b614479565b9050919050565b6154ce816154a3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155098161443b565b82525050565b600061551b8383615500565b60208301905092915050565b6000602082019050919050565b600061553f826154d4565b61554981856154df565b9350615554836154f0565b8060005b8381101561558557815161556c888261550f565b975061557783615527565b925050600181019050615558565b5085935050505092915050565b600060a0820190506155a76000830188614525565b6155b460208301876154c5565b81810360408301526155c68186615534565b90506155d560608301856147f8565b6155e26080830184614525565b9695505050505050565b600067ffffffffffffffff821115615607576156066145bf565b5b602082029050602081019050919050565b60008151905061562781614483565b92915050565b600061564061563b846155ec565b61461f565b9050808382526020820190506020840283018581111561566357615662614666565b5b835b8181101561568c57806156788882615618565b845260208401935050602081019050615665565b5050509392505050565b600082601f8301126156ab576156aa6145ba565b5b81516156bb84826020860161562d565b91505092915050565b6000602082840312156156da576156d9614431565b5b600082015167ffffffffffffffff8111156156f8576156f7614436565b5b61570484828501615696565b91505092915050565b7f45524332303a20426f74732063616e2774207472616465000000000000000000600082015250565b60006157436017836142dd565b915061574e8261570d565b602082019050919050565b6000602082019050818103600083015261577281615736565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e000000600082015250565b60006157af601d836142dd565b91506157ba82615779565b602082019050919050565b600060208201905081810360008301526157de816157a2565b9050919050565b7f45524332303a20436c61696d20616d6f756e742073686f756c64206265206d6f60008201527f7265207468656e20300000000000000000000000000000000000000000000000602082015250565b60006158416029836142dd565b915061584c826157e5565b604082019050919050565b6000602082019050818103600083015261587081615834565b9050919050565b7f45524332303a2041646472657373206973206578636c7564656420746f20636c60008201527f61696d207265666c656374696f6e000000000000000000000000000000000000602082015250565b60006158d3602e836142dd565b91506158de82615877565b604082019050919050565b60006020820190508181036000830152615902816158c6565b9050919050565b7f45524332303a204163636f756e74206d757374206e6f74206265206578636c7560008201527f6465640000000000000000000000000000000000000000000000000000000000602082015250565b60006159656023836142dd565b915061597082615909565b604082019050919050565b6000602082019050818103600083015261599481615958565b9050919050565b7f45524332303a2057616c6c6574206c696d697420657863656564730000000000600082015250565b60006159d1601b836142dd565b91506159dc8261599b565b602082019050919050565b60006020820190508181036000830152615a00816159c4565b9050919050565b7f45524332303a205472616e73616374696f6e206c696d69742065786365656473600082015250565b6000615a3d6020836142dd565b9150615a4882615a07565b602082019050919050565b60006020820190508181036000830152615a6c81615a30565b9050919050565b6000606082019050615a886000830186614525565b615a9560208301856147f8565b615aa26040830184614525565b949350505050565b6000819050919050565b615ac5615ac082614479565b615aaa565b82525050565b60008160601b9050919050565b6000615ae382615acb565b9050919050565b6000615af582615ad8565b9050919050565b615b0d615b088261443b565b615aea565b82525050565b6000615b1f8289615ab4565b602082019150615b2f8288615ab4565b602082019150615b3f8287615ab4565b602082019150615b4f8286615afc565b601482019150615b5f8285615ab4565b602082019150615b6f8284615ab4565b602082019150819050979650505050505050565b6000615b8e82614479565b9150615b9983614479565b925082615ba957615ba8614f18565b5b82820690509291505056fea2646970667358221220c30eaa374c0dfcd70ad4ff33ea2b9523ea9bde1b6bbe54a95620a4e4f227ea9564736f6c63430008090033

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

0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000377bc5e63ef75b266a199a8172fd111f5c5e42c0000000000000000000000000000000000000000000000000000000000000004600000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000001a784379d99db4200000000000000000000000000000000000000000000000000000000000000000000094d61676963204261670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000546656c6978000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Magic Bag
Arg [1] : symbol_ (string): Felix
Arg [2] : decimals_ (uint256): 18
Arg [3] : totalSupply_ (uint256): 100000000
Arg [4] : devWallet_ (address): 0x377BC5E63eF75b266a199A8172fD111f5C5e42C0
Arg [5] : taxDivisionPercentage_ (uint256): 70
Arg [6] : maxTxLimit_ (uint256): 2000000000000000000000000
Arg [7] : maxWalletLimit_ (uint256): 2000000000000000000000000

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000005f5e100
Arg [4] : 000000000000000000000000377bc5e63ef75b266a199a8172fd111f5c5e42c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [6] : 00000000000000000000000000000000000000000001a784379d99db42000000
Arg [7] : 00000000000000000000000000000000000000000001a784379d99db42000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [9] : 4d61676963204261670000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [11] : 46656c6978000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

12124:18605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15037:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12806:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15704:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12775:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25557:416;;;;;;;;;;;;;:::i;:::-;;27386:85;;;;;;;;;;;;;:::i;:::-;;15316:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26434:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27479:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16653:745;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28525:109;;;;;;;;;;;;;:::i;:::-;;15223:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12739:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25457:92;;;;;;;;;;;;;:::i;:::-;;28946:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22735:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26222:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13273:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12848:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26928:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23782:115;;;:::i;:::-;;12635:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24260:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13208:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24594:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27648:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28108:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12913:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25981:202;;;;;;;;;;;;;:::i;:::-;;12362:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15424:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3839:103;;;;;;;;;;;;;:::i;:::-;;26324:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12329:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27816:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27086:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28642:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27295:83;;;;;;;;;;;;;:::i;:::-;;3604:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23905:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13146:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28810:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24041:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12446:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16189:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12663:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27971:129;;;;;;;;;;;;;:::i;:::-;;12877:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12486:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12399:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12606:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12706:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15551:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28314:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3950:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26716:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15037:83;15074:13;15107:5;15100:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15037:83;:::o;12806:35::-;;;;;;;;;;;;;:::o;15704:159::-;15779:4;15796:37;15805:10;15817:7;15826:6;15796:8;:37::i;:::-;15851:4;15844:11;;15704:159;;;;:::o;12775:22::-;;;;:::o;25557:416::-;3563:13;:11;:13::i;:::-;25639:1:::1;25619:17;;:21;25611:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25691:22;25716:21;25691:46;;25748:39;25762:4;25769:17;;25748:5;:39::i;:::-;25818:1;25798:17;:21;;;;25832:19;25854:43;25882:14;25855:21;25854:27;;:43;;;;:::i;:::-;25832:65;;25930:35;25953:11;25930:18;;:22;;:35;;;;:::i;:::-;25908:18;:57;;;;25600:373;;25557:416::o:0;27386:85::-;3563:13;:11;:13::i;:::-;27458:5:::1;27442:13;;:21;;;;;;;;;;;;;;;;;;27386:85::o:0;15316:100::-;15369:7;15396:12;;15389:19;;15316:100;:::o;26434:222::-;3563:13;:11;:13::i;:::-;26546:1:::1;26522:26;;:12;:26;;;;26514:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26636:12;26616:17;;:32;;;;;;;;;;;;;;;;;;26434:222:::0;:::o;27479:161::-;3563:13;:11;:13::i;:::-;27551:6:::1;27546:87;27567:4;:11;27563:1;:15;27546:87;;;27617:4;27600:5;:14;27606:4;27611:1;27606:7;;;;;;;;:::i;:::-;;;;;;;;27600:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27580:3;;;;;:::i;:::-;;;;27546:87;;;;27479:161:::0;:::o;16653:745::-;16751:4;16800:1;16776:26;;:12;:10;:12::i;:::-;:26;;;;16768:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16866:1;16845:23;;:9;:23;;;;16837:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12555:42;16911:17;;:9;:17;;;;16903:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17006:6;16971:11;:19;16983:6;16971:19;;;;;;;;;;;;;;;:31;16991:10;16971:31;;;;;;;;;;;;;;;;:41;;16963:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;17087:6;17066:9;:17;17076:6;17066:17;;;;;;;;;;;;;;;;:27;;17058:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;17196:17;17161:11;:19;17173:6;17161:19;;;;;;;;;;;;;;;:31;17181:10;17161:31;;;;;;;;;;;;;;;;:52;17157:163;;17265:43;17301:6;17265:11;:19;17277:6;17265:19;;;;;;;;;;;;;;;:31;17285:10;17265:31;;;;;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;17230:11;:19;17242:6;17230:19;;;;;;;;;;;;;;;:31;17250:10;17230:31;;;;;;;;;;;;;;;:78;;;;17157:163;17330:36;17340:6;17348:9;17359:6;17330:9;:36::i;:::-;17386:4;17379:11;;16653:745;;;;;:::o;28525:109::-;3563:13;:11;:13::i;:::-;28586:7:::1;:5;:7::i;:::-;28578:25;;:48;28604:21;28578:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28525:109::o:0;15223:85::-;15264:7;15291:9;;15284:16;;15223:85;:::o;12739:29::-;;;;:::o;25457:92::-;25504:37;25529:10;25504:16;:37::i;:::-;25457:92::o;28946:100::-;28999:4;29023:5;:15;29029:8;29023:15;;;;;;;;;;;;;;;;;;;;;;;;;29016:22;;28946:100;;;:::o;22735:418::-;22789:14;22806:10;22789:27;;22856:12;22835:9;:17;22845:6;22835:17;;;;;;;;;;;;;;;;:33;;22827:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;22949:1;22934:12;:16;22926:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23019:1;23004:12;:16;23000:146;;;23057:35;23079:12;23057:9;:17;23067:6;23057:17;;;;;;;;;;;;;;;;:21;;:35;;;;:::i;:::-;23037:9;:17;23047:6;23037:17;;;;;;;;;;;;;;;:55;;;;23107:27;23113:6;23121:12;23107:5;:27::i;:::-;23000:146;22778:375;22735:418;:::o;26222:94::-;3563:13;:11;:13::i;:::-;26302:6:::1;26289:10;:19;;;;26222:94:::0;:::o;13273:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;12848:22::-;;;;;;;;;;;;;:::o;26928:150::-;3563:13;:11;:13::i;:::-;27003:2:::1;26996:3;:9;;26988:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;27067:3;27058:6;:12;;;;26928:150:::0;:::o;23782:115::-;23856:33;23879:9;23856:18;;:22;;:33;;;;:::i;:::-;23835:18;:54;;;;23782:115::o;12635:21::-;;;;:::o;24260:117::-;3563:13;:11;:13::i;:::-;24338:31:::1;24361:7;24338:22;:31::i;:::-;24260:117:::0;:::o;13208:58::-;;;;;;;;;;;;;;;;;:::o;24594:303::-;24658:7;24690:6;;;;;;;;;;;24682:14;;:4;:14;;;:44;;;;24716:9;;;;;;;;;;;24700:26;;:4;:26;;;24682:44;24678:58;;;24735:1;24728:8;;;;24678:58;24749:23;24796:19;:25;24816:4;24796:25;;;;;;;;;;;;;;;;24775:18;;:46;;;;:::i;:::-;24749:72;;24877:12;;24858:15;24868:4;24858:9;:15::i;:::-;24840;:33;;;;:::i;:::-;24839:50;;;;:::i;:::-;24832:57;;;24594:303;;;;:::o;27648:160::-;3563:13;:11;:13::i;:::-;27732:4:::1;27717:19;;:5;:11;27723:4;27717:11;;;;;;;;;;;;;;;;;;;;;;;;;:19;;;27709:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27795:5;27781;:11;27787:4;27781:11;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;27648:160:::0;:::o;28108:198::-;3563:13;:11;:13::i;:::-;28186:18:::1;:27;28205:7;28186:27;;;;;;;;;;;;;;;;;;;;;;;;;28185:28;28177:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28294:4;28264:18;:27;28283:7;28264:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;28108:198:::0;:::o;12913:34::-;;;;:::o;25981:202::-;3563:13;:11;:13::i;:::-;26056:1:::1;26039:14;;:18;26031:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26106:40;26112:17;;;;;;;;;;;26131:14;;26106:5;:40::i;:::-;26174:1;26157:14;:18;;;;25981:202::o:0;12362:30::-;;;;:::o;15424:119::-;15490:7;15517:9;:18;15527:7;15517:18;;;;;;;;;;;;;;;;15510:25;;15424:119;;;:::o;3839:103::-;3563:13;:11;:13::i;:::-;3904:30:::1;3931:1;3904:18;:30::i;:::-;3839:103::o:0;26324:102::-;3563:13;:11;:13::i;:::-;26412:6:::1;26395:14;:23;;;;26324:102:::0;:::o;12329:26::-;;;;:::o;27816:147::-;3563:13;:11;:13::i;:::-;27905:6:::1;27889:7;:13;27897:4;27889:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;27949:6;27922:18;:24;27941:4;27922:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;27816:147:::0;;:::o;27086:201::-;3563:13;:11;:13::i;:::-;27185:3:::1;27171:10;:17;;27163:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27269:10;27245:21;:34;;;;27086:201:::0;:::o;28642:133::-;3563:13;:11;:13::i;:::-;28735:5:::1;28728:22;;;28751:7;:5;:7::i;:::-;28760:6;28728:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28642:133:::0;;:::o;27295:83::-;3563:13;:11;:13::i;:::-;27366:4:::1;27350:13;;:20;;;;;;;;;;;;;;;;;;27295:83::o:0;3604:87::-;3650:7;3677:6;;;;;;;;;;;3670:13;;3604:87;:::o;23905:128::-;23973:4;23997:19;:28;24017:7;23997:28;;;;;;;;;;;;;;;;;;;;;;;;;23990:35;;23905:128;;;:::o;13146:55::-;;;;;;;;;;;;;;;;;:::o;15128:87::-;15167:13;15200:7;15193:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15128:87;:::o;28810:128::-;28878:4;28902:18;:28;28921:8;28902:28;;;;;;;;;;;;;;;;;;;;;;;;;28895:35;;28810:128;;;:::o;24041:211::-;3563:13;:11;:13::i;:::-;24130:29:::1;24151:7;24130:20;:29::i;:::-;24122:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24239:5;24208:19;:28;24228:7;24208:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24041:211:::0;:::o;12446:33::-;;;;:::o;16189:456::-;16267:4;16316:1;16292:26;;:12;:10;:12::i;:::-;:26;;;;16284:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16382:1;16361:23;;:9;:23;;;;16353:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12555:42;16427:17;;:9;:17;;;;16419:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;16512:6;16487:9;:21;16497:10;16487:21;;;;;;;;;;;;;;;;:31;;16479:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;16573:40;16583:10;16595:9;16606:6;16573:9;:40::i;:::-;16633:4;16626:11;;16189:456;;;;:::o;12663:36::-;;;;:::o;27971:129::-;3563:13;:11;:13::i;:::-;28033:1:::1;28023:7;:11;;;;28055:1;28045:6;:11;;;;28091:1;28067:21;:25;;;;27971:129::o:0;12877:29::-;;;;;;;;;;;;;:::o;12486:30::-;;;;:::o;12399:40::-;;;;;;;;;;;;;:::o;12606:22::-;;;;:::o;12706:26::-;;;;:::o;15551:145::-;15633:7;15660:11;:19;15672:6;15660:19;;;;;;;;;;;;;;;:28;15680:7;15660:28;;;;;;;;;;;;;;;;15653:35;;15551:145;;;;:::o;28314:199::-;3563:13;:11;:13::i;:::-;28390:18:::1;:28;28409:8;28390:28;;;;;;;;;;;;;;;;;;;;;;;;;28382:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28500:5;28469:18;:28;28488:8;28469:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28314:199:::0;:::o;3950:201::-;3563:13;:11;:13::i;:::-;4059:1:::1;4039:22;;:8;:22;;;;4031:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4115:28;4134:8;4115:18;:28::i;:::-;3950:201:::0;:::o;26716:152::-;3563:13;:11;:13::i;:::-;26792:2:::1;26785:3;:9;;26777:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;26857:3;26847:7;:13;;;;26716:152:::0;:::o;2079:98::-;2137:7;2168:1;2164;:5;;;;:::i;:::-;2157:12;;2079:98;;;;:::o;1867:::-;1925:7;1956:1;1952;:5;;;;:::i;:::-;1945:12;;1867:98;;;;:::o;15871:310::-;15984:1;15965:21;;:6;:21;;;;15957:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;16048:1;16029:21;;:7;:21;;;;16021:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;16118:6;16087:11;:19;16099:6;16087:19;;;;;;;;;;;;;;;:28;16107:7;16087:28;;;;;;;;;;;;;;;:37;;;;16157:7;16140:33;;16149:6;16140:33;;;16166:6;16140:33;;;;;;:::i;:::-;;;;;;;;15871:310;;;:::o;3699:132::-;3774:12;:10;:12::i;:::-;3763:23;;:7;:5;:7::i;:::-;:23;;;3755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3699:132::o;30373:353::-;30442:21;30480:1;30466:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30442:40;;30511:4;30493;30498:1;30493:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30537:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30527:4;30532:1;30527:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;30566:9;;;;;;;;;;;:31;;;30612:6;30633:1;30649:4;30668:9;30692:15;30566:152;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30431:295;30373:353;;:::o;1973:98::-;2031:7;2062:1;2058;:5;;;;:::i;:::-;2051:12;;1973:98;;;;:::o;3069:::-;3122:7;3149:10;3142:17;;3069:98;:::o;17406:2053::-;17520:5;17503:22;;:5;:13;17509:6;17503:13;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;:51;;;;;17549:5;17529:25;;:5;:16;17535:9;17529:16;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;17503:51;17495:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;17609:7;:5;:7::i;:::-;17599:17;;:6;:17;;;:39;;;;;17620:7;:18;17628:9;17620:18;;;;;;;;;;;;;;;;;;;;;;;;;17599:39;17595:1857;;;17655:48;17677:6;17685:9;17696:6;17655:21;:48::i;:::-;17595:1857;;;17734:7;:15;17742:6;17734:15;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;17753:7;:18;17761:9;17753:18;;;;;;;;;;;;;;;;;;;;;;;;;17734:37;17730:1722;;;17812:4;17795:21;;:13;;;;;;;;;;;:21;;;17787:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;17883:18;:26;17902:6;17883:26;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;17914:18;:29;17933:9;17914:29;;;;;;;;;;;;;;;;;;;;;;;;;17913:30;17883:60;17879:1180;;;17967:36;17985:9;17996:6;17967:17;:36::i;:::-;:61;;;;;18007:21;18021:6;18007:13;:21::i;:::-;17967:61;17963:163;;;18053:48;18075:6;18083:9;18094:6;18053:21;:48::i;:::-;17963:163;17879:1180;;;18169:18;:26;18188:6;18169:26;;;;;;;;;;;;;;;;;;;;;;;;;18168:27;:60;;;;;18199:18;:29;18218:9;18199:29;;;;;;;;;;;;;;;;;;;;;;;;;18168:60;18164:895;;;18252:21;18266:6;18252:13;:21::i;:::-;18248:122;;;18298:46;18318:6;18326:9;18337:6;18298:19;:46::i;:::-;18248:122;18164:895;;;18408:18;:26;18427:6;18408:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;18438:18;:29;18457:9;18438:29;;;;;;;;;;;;;;;;;;;;;;;;;18408:59;18404:655;;;18502:7;:5;:7::i;:::-;18492:17;;:6;:17;;;:41;;;;18526:7;:5;:7::i;:::-;18513:20;;:9;:20;;;18492:41;:68;;;;18555:4;18537:23;;:6;:23;;;18492:68;:98;;;;18585:4;18564:26;;:9;:26;;;18492:98;18488:556;;;18615:48;18637:6;18645:9;18656:6;18615:21;:48::i;:::-;18488:556;;;18693:7;:18;18701:9;18693:18;;;;;;;;;;;;;;;;;;;;;;;;;18689:355;;;18740:21;18754:6;18740:13;:21::i;:::-;18736:126;;;18790:48;18812:6;18820:9;18831:6;18790:21;:48::i;:::-;18736:126;18689:355;;;18891:36;18909:9;18920:6;18891:17;:36::i;:::-;:61;;;;;18931:21;18945:6;18931:13;:21::i;:::-;18891:61;18887:157;;;18976:48;18998:6;19006:9;19017:6;18976:21;:48::i;:::-;18887:157;18689:355;18488:556;18404:655;18164:895;17879:1180;17730:1722;;;19106:7;:5;:7::i;:::-;19096:17;;:6;:17;;;:41;;;;19130:7;:5;:7::i;:::-;19117:20;;:9;:20;;;19096:41;:68;;;;19159:4;19141:23;;:6;:23;;;19096:68;:98;;;;19189:4;19168:26;;:9;:26;;;19096:98;19092:349;;;19219:48;19241:6;19249:9;19260:6;19219:21;:48::i;:::-;19092:349;;;19292:36;19310:9;19321:6;19292:17;:36::i;:::-;:61;;;;;19332:21;19346:6;19332:13;:21::i;:::-;19292:61;19289:152;;;19377:48;19399:6;19407:9;19418:6;19377:21;:48::i;:::-;19289:152;19092:349;17730:1722;17595:1857;17406:2053;;;:::o;24905:544::-;24973:17;25001:25;25021:4;25001:19;:25::i;:::-;24973:53;;25057:1;25045:9;:13;25037:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25153:5;25123:35;;:26;25144:4;25123:20;:26::i;:::-;:35;;;25115:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;25258:18;;25230:19;:25;25250:4;25230:25;;;;;;;;;;;;;;;:46;;;;25303:1;25291:9;:13;25287:70;;;25321:4;:13;;:24;25335:9;25321:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:70;25398:43;25431:9;25398:22;:28;25421:4;25398:28;;;;;;;;;;;;;;;;:32;;:43;;;;:::i;:::-;25367:22;:28;25390:4;25367:28;;;;;;;;;;;;;;;:74;;;;24962:487;24905:544;:::o;23161:212::-;23240:24;23257:6;23240:12;;:16;;:24;;;;:::i;:::-;23225:12;:39;;;;23290:23;23306:6;23290:11;;:15;;:23;;;;:::i;:::-;23275:11;:38;;;;23354:1;23331:34;;23340:4;23331:34;;;23358:6;23331:34;;;;;;:::i;:::-;;;;;;;;23161:212;;:::o;24385:201::-;24463:29;24484:7;24463:20;:29::i;:::-;24462:30;24454:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24574:4;24543:19;:28;24563:7;24543:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24385:201;:::o;4159:191::-;4233:16;4252:6;;;;;;;;;;;4233:25;;4278:8;4269:6;;:17;;;;;;;;;;;;;;;;;;4333:8;4302:40;;4323:8;4302:40;;;;;;;;;;;;4222:128;4159:191;:::o;22373:280::-;22497:29;22519:6;22497:9;:17;22507:6;22497:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;22474:9;:17;22484:6;22474:17;;;;;;;;;;;;;;;:52;;;;22560:32;22585:6;22560:9;:20;22570:9;22560:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22537:9;:20;22547:9;22537:20;;;;;;;;;;;;;;;:55;;;;22627:9;22610:35;;22619:6;22610:35;;;22638:6;22610:35;;;;;;:::i;:::-;;;;;;;;22373:280;;;:::o;29967:219::-;30050:4;30092:32;30117:6;30092:20;30102:9;30092;:20::i;:::-;:24;;:32;;;;:::i;:::-;30074:14;;:50;;30066:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;30174:4;30167:11;;29967:219;;;;:::o;30194:171::-;30254:4;30288:10;;30278:6;:20;;30270:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30353:4;30346:11;;30194:171;;;:::o;19467:1447::-;19574:20;19598:23;:21;:23::i;:::-;19574:47;;19632:17;19656:27;19679:3;19656:18;19667:6;;19656;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;19632:51;;19694:21;19718;19729:9;19718:6;:10;;:21;;;;:::i;:::-;19694:45;;19761:17;19789:18;19818:16;19845:24;19883;19897:9;19883:13;:24::i;:::-;19750:157;;;;;;;;19947:29;19969:6;19947:9;:17;19957:6;19947:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;19920:9;:17;19930:6;19920:17;;;;;;;;;;;;;;;:56;;;;20014:39;20039:13;20014:9;:20;20024:9;20014:20;;;;;;;;;;;;;;;;:24;;:39;;;;:::i;:::-;19987:9;:20;19997:9;19987:20;;;;;;;;;;;;;;;:66;;;;20091:39;20120:9;20091;:24;20109:4;20091:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;20064:9;:24;20082:4;20064:24;;;;;;;;;;;;;;;:66;;;;20168:29;20187:9;20168:14;;:18;;:29;;;;:::i;:::-;20141:14;:56;;;;20230:1;20214:12;:17;20210:646;;;20248:25;20254:6;20262:10;20248:5;:25::i;:::-;20293:46;20306:12;20320:6;20328:10;20293:46;;;;;;;;:::i;:::-;;;;;;;;20210:646;;;20377:1;20361:12;:17;20357:499;;;20395:25;20403:6;20411:8;20395:7;:25::i;:::-;20440:44;20453:12;20467:6;20475:8;20440:44;;;;;;;;:::i;:::-;;;;;;;;20357:499;;;20522:1;20506:12;:17;20502:354;;;20567:46;20596:16;20567:9;:24;20585:4;20567:24;;;;;;;;;;;;;;;;:28;;:46;;;;:::i;:::-;20540:9;:24;20558:4;20540:24;;;;;;;;;;;;;;;:73;;;;20655:39;20677:16;20655:17;;:21;;:39;;;;:::i;:::-;20628:17;:66;;;;20736:36;20755:16;20736:14;;:18;;:36;;;;:::i;:::-;20709:14;:63;;;;20792:52;20805:12;20819:6;20827:16;20792:52;;;;;;;;:::i;:::-;;;;;;;;20502:354;20357:499;20210:646;20888:9;20871:35;;20880:6;20871:35;;;20899:6;20871:35;;;;;;:::i;:::-;;;;;;;;19557:1357;;;;;;;19467:1447;;;:::o;20922:1443::-;21028:20;21051:23;:21;:23::i;:::-;21028:46;;21085:17;21108:28;21132:3;21108:19;21119:7;;21108:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;21085:51;;21147:18;21170:21;21181:9;21170:6;:10;;:21;;;;:::i;:::-;21147:44;;21213:17;21243:18;21272:16;21299:24;21337;21351:9;21337:13;:24::i;:::-;21202:159;;;;;;;;21401:29;21423:6;21401:9;:17;21411:6;21401:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;21374:9;:17;21384:6;21374:17;;;;;;;;;;;;;;;:56;;;;21468:36;21493:10;21468:9;:20;21478:9;21468:20;;;;;;;;;;;;;;;;:24;;:36;;;;:::i;:::-;21441:9;:20;21451:9;21441:20;;;;;;;;;;;;;;;:63;;;;21542:39;21571:9;21542;:24;21560:4;21542:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;21515:9;:24;21533:4;21515:24;;;;;;;;;;;;;;;:66;;;;21619:29;21638:9;21619:14;;:18;;:29;;;;:::i;:::-;21592:14;:56;;;;21681:1;21665:12;:17;21661:646;;;21699:25;21705:6;21713:10;21699:5;:25::i;:::-;21744:46;21757:12;21771:6;21779:10;21744:46;;;;;;;;:::i;:::-;;;;;;;;21661:646;;;21828:1;21812:12;:17;21808:499;;;21846:25;21854:6;21862:8;21846:7;:25::i;:::-;21891:44;21904:12;21918:6;21926:8;21891:44;;;;;;;;:::i;:::-;;;;;;;;21808:499;;;21973:1;21957:12;:17;21953:354;;;22018:46;22047:16;22018:9;:24;22036:4;22018:24;;;;;;;;;;;;;;;;:28;;:46;;;;:::i;:::-;21991:9;:24;22009:4;21991:24;;;;;;;;;;;;;;;:73;;;;22106:39;22128:16;22106:17;;:21;;:39;;;;:::i;:::-;22079:17;:66;;;;22187:36;22206:16;22187:14;;:18;;:36;;;;:::i;:::-;22160:14;:63;;;;22243:52;22256:12;22270:6;22278:16;22243:52;;;;;;;;:::i;:::-;;;;;;;;21953:354;21808:499;21661:646;22339:9;22322:35;;22331:6;22322:35;;;22350:6;22322:35;;;;;;:::i;:::-;;;;;;;;21010:1355;;;;;;;20922:1443;;;:::o;29084:225::-;29139:7;29300:1;29295;29202:15;29219:16;29237:14;29253:9;29264:12;29278:11;29185:105;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29175:116;;;;;;29167:125;;:129;;;;:::i;:::-;29166:135;;;;:::i;:::-;29159:142;;29084:225;:::o;2185:98::-;2243:7;2274:1;2270;:5;;;;:::i;:::-;2263:12;;2185:98;;;;:::o;29317:642::-;29376:18;29396:12;29410:10;29422:18;29453:17;29481:18;29510:16;29537:24;29585:1;29578:4;:8;29574:309;;;29615:48;29659:3;29615:39;29631:21;;29625:3;:27;;;;:::i;:::-;29615:4;:8;;:39;;;;:::i;:::-;:43;;:48;;;;:::i;:::-;29603:60;;29691:40;29727:3;29691:31;29700:21;;29691:4;:8;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;29678:53;;29757:40;29793:3;29757:31;29766:21;;29757:4;:8;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;29746:51;;29831:40;29867:3;29831:31;29840:21;;29831:4;:8;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;29812:59;;29574:309;29901:9;29912:10;29924:8;29934:16;29893:58;;;;;;;;;;;;29317:642;;;;;:::o;23425:298::-;23498:1;23492:3;:7;23488:228;;;23521:10;23537:18;23551:3;23537:13;:18::i;:::-;23516:39;;;;;23591:25;23613:2;23591:9;:17;23601:6;;;;;;;;;;;23591:17;;;;;;;;;;;;;;;;:21;;:25;;;;:::i;:::-;23570:9;:17;23580:6;;;;;;;;;;;23570:17;;;;;;;;;;;;;;;:46;;;;23641:15;23653:2;23641:7;;:11;;:15;;;;:::i;:::-;23631:7;:25;;;;23693:6;;;;;;;;;;;23678:26;;23687:4;23678:26;;;23701:2;23678:26;;;;;;:::i;:::-;;;;;;;;23501:215;23488:228;23425:298;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:126::-;1434:7;1474:42;1467:5;1463:54;1452:65;;1397:126;;;:::o;1529:60::-;1557:3;1578:5;1571:12;;1529:60;;;:::o;1595:142::-;1645:9;1678:53;1696:34;1705:24;1723:5;1705:24;:::i;:::-;1696:34;:::i;:::-;1678:53;:::i;:::-;1665:66;;1595:142;;;:::o;1743:126::-;1793:9;1826:37;1857:5;1826:37;:::i;:::-;1813:50;;1743:126;;;:::o;1875:153::-;1952:9;1985:37;2016:5;1985:37;:::i;:::-;1972:50;;1875:153;;;:::o;2034:185::-;2148:64;2206:5;2148:64;:::i;:::-;2143:3;2136:77;2034:185;;:::o;2225:276::-;2345:4;2383:2;2372:9;2368:18;2360:26;;2396:98;2491:1;2480:9;2476:17;2467:6;2396:98;:::i;:::-;2225:276;;;;:::o;2507:75::-;2540:6;2573:2;2567:9;2557:19;;2507:75;:::o;2588:117::-;2697:1;2694;2687:12;2711:117;2820:1;2817;2810:12;2834:96;2871:7;2900:24;2918:5;2900:24;:::i;:::-;2889:35;;2834:96;;;:::o;2936:122::-;3009:24;3027:5;3009:24;:::i;:::-;3002:5;2999:35;2989:63;;3048:1;3045;3038:12;2989:63;2936:122;:::o;3064:139::-;3110:5;3148:6;3135:20;3126:29;;3164:33;3191:5;3164:33;:::i;:::-;3064:139;;;;:::o;3209:77::-;3246:7;3275:5;3264:16;;3209:77;;;:::o;3292:122::-;3365:24;3383:5;3365:24;:::i;:::-;3358:5;3355:35;3345:63;;3404:1;3401;3394:12;3345:63;3292:122;:::o;3420:139::-;3466:5;3504:6;3491:20;3482:29;;3520:33;3547:5;3520:33;:::i;:::-;3420:139;;;;:::o;3565:474::-;3633:6;3641;3690:2;3678:9;3669:7;3665:23;3661:32;3658:119;;;3696:79;;:::i;:::-;3658:119;3816:1;3841:53;3886:7;3877:6;3866:9;3862:22;3841:53;:::i;:::-;3831:63;;3787:117;3943:2;3969:53;4014:7;4005:6;3994:9;3990:22;3969:53;:::i;:::-;3959:63;;3914:118;3565:474;;;;;:::o;4045:90::-;4079:7;4122:5;4115:13;4108:21;4097:32;;4045:90;;;:::o;4141:109::-;4222:21;4237:5;4222:21;:::i;:::-;4217:3;4210:34;4141:109;;:::o;4256:210::-;4343:4;4381:2;4370:9;4366:18;4358:26;;4394:65;4456:1;4445:9;4441:17;4432:6;4394:65;:::i;:::-;4256:210;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:104::-;4869:7;4898:24;4916:5;4898:24;:::i;:::-;4887:35;;4824:104;;;:::o;4934:138::-;5015:32;5041:5;5015:32;:::i;:::-;5008:5;5005:43;4995:71;;5062:1;5059;5052:12;4995:71;4934:138;:::o;5078:155::-;5132:5;5170:6;5157:20;5148:29;;5186:41;5221:5;5186:41;:::i;:::-;5078:155;;;;:::o;5239:345::-;5306:6;5355:2;5343:9;5334:7;5330:23;5326:32;5323:119;;;5361:79;;:::i;:::-;5323:119;5481:1;5506:61;5559:7;5550:6;5539:9;5535:22;5506:61;:::i;:::-;5496:71;;5452:125;5239:345;;;;:::o;5590:117::-;5699:1;5696;5689:12;5713:180;5761:77;5758:1;5751:88;5858:4;5855:1;5848:15;5882:4;5879:1;5872:15;5899:281;5982:27;6004:4;5982:27;:::i;:::-;5974:6;5970:40;6112:6;6100:10;6097:22;6076:18;6064:10;6061:34;6058:62;6055:88;;;6123:18;;:::i;:::-;6055:88;6163:10;6159:2;6152:22;5942:238;5899:281;;:::o;6186:129::-;6220:6;6247:20;;:::i;:::-;6237:30;;6276:33;6304:4;6296:6;6276:33;:::i;:::-;6186:129;;;:::o;6321:311::-;6398:4;6488:18;6480:6;6477:30;6474:56;;;6510:18;;:::i;:::-;6474:56;6560:4;6552:6;6548:17;6540:25;;6620:4;6614;6610:15;6602:23;;6321:311;;;:::o;6638:117::-;6747:1;6744;6737:12;6778:710;6874:5;6899:81;6915:64;6972:6;6915:64;:::i;:::-;6899:81;:::i;:::-;6890:90;;7000:5;7029:6;7022:5;7015:21;7063:4;7056:5;7052:16;7045:23;;7116:4;7108:6;7104:17;7096:6;7092:30;7145:3;7137:6;7134:15;7131:122;;;7164:79;;:::i;:::-;7131:122;7279:6;7262:220;7296:6;7291:3;7288:15;7262:220;;;7371:3;7400:37;7433:3;7421:10;7400:37;:::i;:::-;7395:3;7388:50;7467:4;7462:3;7458:14;7451:21;;7338:144;7322:4;7317:3;7313:14;7306:21;;7262:220;;;7266:21;6880:608;;6778:710;;;;;:::o;7511:370::-;7582:5;7631:3;7624:4;7616:6;7612:17;7608:27;7598:122;;7639:79;;:::i;:::-;7598:122;7756:6;7743:20;7781:94;7871:3;7863:6;7856:4;7848:6;7844:17;7781:94;:::i;:::-;7772:103;;7588:293;7511:370;;;;:::o;7887:539::-;7971:6;8020:2;8008:9;7999:7;7995:23;7991:32;7988:119;;;8026:79;;:::i;:::-;7988:119;8174:1;8163:9;8159:17;8146:31;8204:18;8196:6;8193:30;8190:117;;;8226:79;;:::i;:::-;8190:117;8331:78;8401:7;8392:6;8381:9;8377:22;8331:78;:::i;:::-;8321:88;;8117:302;7887:539;;;;:::o;8432:619::-;8509:6;8517;8525;8574:2;8562:9;8553:7;8549:23;8545:32;8542:119;;;8580:79;;:::i;:::-;8542:119;8700:1;8725:53;8770:7;8761:6;8750:9;8746:22;8725:53;:::i;:::-;8715:63;;8671:117;8827:2;8853:53;8898:7;8889:6;8878:9;8874:22;8853:53;:::i;:::-;8843:63;;8798:118;8955:2;8981:53;9026:7;9017:6;9006:9;9002:22;8981:53;:::i;:::-;8971:63;;8926:118;8432:619;;;;;:::o;9057:329::-;9116:6;9165:2;9153:9;9144:7;9140:23;9136:32;9133:119;;;9171:79;;:::i;:::-;9133:119;9291:1;9316:53;9361:7;9352:6;9341:9;9337:22;9316:53;:::i;:::-;9306:63;;9262:117;9057:329;;;;:::o;9392:::-;9451:6;9500:2;9488:9;9479:7;9475:23;9471:32;9468:119;;;9506:79;;:::i;:::-;9468:119;9626:1;9651:53;9696:7;9687:6;9676:9;9672:22;9651:53;:::i;:::-;9641:63;;9597:117;9392:329;;;;:::o;9727:118::-;9814:24;9832:5;9814:24;:::i;:::-;9809:3;9802:37;9727:118;;:::o;9851:222::-;9944:4;9982:2;9971:9;9967:18;9959:26;;9995:71;10063:1;10052:9;10048:17;10039:6;9995:71;:::i;:::-;9851:222;;;;:::o;10079:116::-;10149:21;10164:5;10149:21;:::i;:::-;10142:5;10139:32;10129:60;;10185:1;10182;10175:12;10129:60;10079:116;:::o;10201:133::-;10244:5;10282:6;10269:20;10260:29;;10298:30;10322:5;10298:30;:::i;:::-;10201:133;;;;:::o;10340:468::-;10405:6;10413;10462:2;10450:9;10441:7;10437:23;10433:32;10430:119;;;10468:79;;:::i;:::-;10430:119;10588:1;10613:53;10658:7;10649:6;10638:9;10634:22;10613:53;:::i;:::-;10603:63;;10559:117;10715:2;10741:50;10783:7;10774:6;10763:9;10759:22;10741:50;:::i;:::-;10731:60;;10686:115;10340:468;;;;;:::o;10814:142::-;10917:32;10943:5;10917:32;:::i;:::-;10912:3;10905:45;10814:142;;:::o;10962:254::-;11071:4;11109:2;11098:9;11094:18;11086:26;;11122:87;11206:1;11195:9;11191:17;11182:6;11122:87;:::i;:::-;10962:254;;;;:::o;11222:474::-;11290:6;11298;11347:2;11335:9;11326:7;11322:23;11318:32;11315:119;;;11353:79;;:::i;:::-;11315:119;11473:1;11498:53;11543:7;11534:6;11523:9;11519:22;11498:53;:::i;:::-;11488:63;;11444:117;11600:2;11626:53;11671:7;11662:6;11651:9;11647:22;11626:53;:::i;:::-;11616:63;;11571:118;11222:474;;;;;:::o;11702:180::-;11750:77;11747:1;11740:88;11847:4;11844:1;11837:15;11871:4;11868:1;11861:15;11888:320;11932:6;11969:1;11963:4;11959:12;11949:22;;12016:1;12010:4;12006:12;12037:18;12027:81;;12093:4;12085:6;12081:17;12071:27;;12027:81;12155:2;12147:6;12144:14;12124:18;12121:38;12118:84;;;12174:18;;:::i;:::-;12118:84;11939:269;11888:320;;;:::o;12214:220::-;12354:34;12350:1;12342:6;12338:14;12331:58;12423:3;12418:2;12410:6;12406:15;12399:28;12214:220;:::o;12440:366::-;12582:3;12603:67;12667:2;12662:3;12603:67;:::i;:::-;12596:74;;12679:93;12768:3;12679:93;:::i;:::-;12797:2;12792:3;12788:12;12781:19;;12440:366;;;:::o;12812:419::-;12978:4;13016:2;13005:9;13001:18;12993:26;;13065:9;13059:4;13055:20;13051:1;13040:9;13036:17;13029:47;13093:131;13219:4;13093:131;:::i;:::-;13085:139;;12812:419;;;:::o;13237:239::-;13377:34;13373:1;13365:6;13361:14;13354:58;13446:22;13441:2;13433:6;13429:15;13422:47;13237:239;:::o;13482:366::-;13624:3;13645:67;13709:2;13704:3;13645:67;:::i;:::-;13638:74;;13721:93;13810:3;13721:93;:::i;:::-;13839:2;13834:3;13830:12;13823:19;;13482:366;;;:::o;13854:419::-;14020:4;14058:2;14047:9;14043:18;14035:26;;14107:9;14101:4;14097:20;14093:1;14082:9;14078:17;14071:47;14135:131;14261:4;14135:131;:::i;:::-;14127:139;;13854:419;;;:::o;14279:180::-;14327:77;14324:1;14317:88;14424:4;14421:1;14414:15;14448:4;14445:1;14438:15;14465:180;14513:77;14510:1;14503:88;14610:4;14607:1;14600:15;14634:4;14631:1;14624:15;14651:233;14690:3;14713:24;14731:5;14713:24;:::i;:::-;14704:33;;14759:66;14752:5;14749:77;14746:103;;;14829:18;;:::i;:::-;14746:103;14876:1;14869:5;14865:13;14858:20;;14651:233;;;:::o;14890:169::-;15030:21;15026:1;15018:6;15014:14;15007:45;14890:169;:::o;15065:366::-;15207:3;15228:67;15292:2;15287:3;15228:67;:::i;:::-;15221:74;;15304:93;15393:3;15304:93;:::i;:::-;15422:2;15417:3;15413:12;15406:19;;15065:366;;;:::o;15437:419::-;15603:4;15641:2;15630:9;15626:18;15618:26;;15690:9;15684:4;15680:20;15676:1;15665:9;15661:17;15654:47;15718:131;15844:4;15718:131;:::i;:::-;15710:139;;15437:419;;;:::o;15862:169::-;16002:21;15998:1;15990:6;15986:14;15979:45;15862:169;:::o;16037:366::-;16179:3;16200:67;16264:2;16259:3;16200:67;:::i;:::-;16193:74;;16276:93;16365:3;16276:93;:::i;:::-;16394:2;16389:3;16385:12;16378:19;;16037:366;;;:::o;16409:419::-;16575:4;16613:2;16602:9;16598:18;16590:26;;16662:9;16656:4;16652:20;16648:1;16637:9;16633:17;16626:47;16690:131;16816:4;16690:131;:::i;:::-;16682:139;;16409:419;;;:::o;16834:180::-;16974:32;16970:1;16962:6;16958:14;16951:56;16834:180;:::o;17020:366::-;17162:3;17183:67;17247:2;17242:3;17183:67;:::i;:::-;17176:74;;17259:93;17348:3;17259:93;:::i;:::-;17377:2;17372:3;17368:12;17361:19;;17020:366;;;:::o;17392:419::-;17558:4;17596:2;17585:9;17581:18;17573:26;;17645:9;17639:4;17635:20;17631:1;17620:9;17616:17;17609:47;17673:131;17799:4;17673:131;:::i;:::-;17665:139;;17392:419;;;:::o;17817:233::-;17957:34;17953:1;17945:6;17941:14;17934:58;18026:16;18021:2;18013:6;18009:15;18002:41;17817:233;:::o;18056:366::-;18198:3;18219:67;18283:2;18278:3;18219:67;:::i;:::-;18212:74;;18295:93;18384:3;18295:93;:::i;:::-;18413:2;18408:3;18404:12;18397:19;;18056:366;;;:::o;18428:419::-;18594:4;18632:2;18621:9;18617:18;18609:26;;18681:9;18675:4;18671:20;18667:1;18656:9;18652:17;18645:47;18709:131;18835:4;18709:131;:::i;:::-;18701:139;;18428:419;;;:::o;18853:229::-;18993:34;18989:1;18981:6;18977:14;18970:58;19062:12;19057:2;19049:6;19045:15;19038:37;18853:229;:::o;19088:366::-;19230:3;19251:67;19315:2;19310:3;19251:67;:::i;:::-;19244:74;;19327:93;19416:3;19327:93;:::i;:::-;19445:2;19440:3;19436:12;19429:19;;19088:366;;;:::o;19460:419::-;19626:4;19664:2;19653:9;19649:18;19641:26;;19713:9;19707:4;19703:20;19699:1;19688:9;19684:17;19677:47;19741:131;19867:4;19741:131;:::i;:::-;19733:139;;19460:419;;;:::o;19885:182::-;20025:34;20021:1;20013:6;20009:14;20002:58;19885:182;:::o;20073:366::-;20215:3;20236:67;20300:2;20295:3;20236:67;:::i;:::-;20229:74;;20312:93;20401:3;20312:93;:::i;:::-;20430:2;20425:3;20421:12;20414:19;;20073:366;;;:::o;20445:419::-;20611:4;20649:2;20638:9;20634:18;20626:26;;20698:9;20692:4;20688:20;20684:1;20673:9;20669:17;20662:47;20726:131;20852:4;20726:131;:::i;:::-;20718:139;;20445:419;;;:::o;20870:224::-;21010:34;21006:1;20998:6;20994:14;20987:58;21079:7;21074:2;21066:6;21062:15;21055:32;20870:224;:::o;21100:366::-;21242:3;21263:67;21327:2;21322:3;21263:67;:::i;:::-;21256:74;;21339:93;21428:3;21339:93;:::i;:::-;21457:2;21452:3;21448:12;21441:19;;21100:366;;;:::o;21472:419::-;21638:4;21676:2;21665:9;21661:18;21653:26;;21725:9;21719:4;21715:20;21711:1;21700:9;21696:17;21689:47;21753:131;21879:4;21753:131;:::i;:::-;21745:139;;21472:419;;;:::o;21897:191::-;21937:4;21957:20;21975:1;21957:20;:::i;:::-;21952:25;;21991:20;22009:1;21991:20;:::i;:::-;21986:25;;22030:1;22027;22024:8;22021:34;;;22035:18;;:::i;:::-;22021:34;22080:1;22077;22073:9;22065:17;;21897:191;;;;:::o;22094:348::-;22134:7;22157:20;22175:1;22157:20;:::i;:::-;22152:25;;22191:20;22209:1;22191:20;:::i;:::-;22186:25;;22379:1;22311:66;22307:74;22304:1;22301:81;22296:1;22289:9;22282:17;22278:105;22275:131;;;22386:18;;:::i;:::-;22275:131;22434:1;22431;22427:9;22416:20;;22094:348;;;;:::o;22448:180::-;22496:77;22493:1;22486:88;22593:4;22590:1;22583:15;22617:4;22614:1;22607:15;22634:185;22674:1;22691:20;22709:1;22691:20;:::i;:::-;22686:25;;22725:20;22743:1;22725:20;:::i;:::-;22720:25;;22764:1;22754:35;;22769:18;;:::i;:::-;22754:35;22811:1;22808;22804:9;22799:14;;22634:185;;;;:::o;22825:179::-;22965:31;22961:1;22953:6;22949:14;22942:55;22825:179;:::o;23010:366::-;23152:3;23173:67;23237:2;23232:3;23173:67;:::i;:::-;23166:74;;23249:93;23338:3;23249:93;:::i;:::-;23367:2;23362:3;23358:12;23351:19;;23010:366;;;:::o;23382:419::-;23548:4;23586:2;23575:9;23571:18;23563:26;;23635:9;23629:4;23625:20;23621:1;23610:9;23606:17;23599:47;23663:131;23789:4;23663:131;:::i;:::-;23655:139;;23382:419;;;:::o;23807:222::-;23947:34;23943:1;23935:6;23931:14;23924:58;24016:5;24011:2;24003:6;23999:15;23992:30;23807:222;:::o;24035:366::-;24177:3;24198:67;24262:2;24257:3;24198:67;:::i;:::-;24191:74;;24274:93;24363:3;24274:93;:::i;:::-;24392:2;24387:3;24383:12;24376:19;;24035:366;;;:::o;24407:419::-;24573:4;24611:2;24600:9;24596:18;24588:26;;24660:9;24654:4;24650:20;24646:1;24635:9;24631:17;24624:47;24688:131;24814:4;24688:131;:::i;:::-;24680:139;;24407:419;;;:::o;24832:228::-;24972:34;24968:1;24960:6;24956:14;24949:58;25041:11;25036:2;25028:6;25024:15;25017:36;24832:228;:::o;25066:366::-;25208:3;25229:67;25293:2;25288:3;25229:67;:::i;:::-;25222:74;;25305:93;25394:3;25305:93;:::i;:::-;25423:2;25418:3;25414:12;25407:19;;25066:366;;;:::o;25438:419::-;25604:4;25642:2;25631:9;25627:18;25619:26;;25691:9;25685:4;25681:20;25677:1;25666:9;25662:17;25655:47;25719:131;25845:4;25719:131;:::i;:::-;25711:139;;25438:419;;;:::o;25863:332::-;25984:4;26022:2;26011:9;26007:18;25999:26;;26035:71;26103:1;26092:9;26088:17;26079:6;26035:71;:::i;:::-;26116:72;26184:2;26173:9;26169:18;26160:6;26116:72;:::i;:::-;25863:332;;;;;:::o;26201:137::-;26255:5;26286:6;26280:13;26271:22;;26302:30;26326:5;26302:30;:::i;:::-;26201:137;;;;:::o;26344:345::-;26411:6;26460:2;26448:9;26439:7;26435:23;26431:32;26428:119;;;26466:79;;:::i;:::-;26428:119;26586:1;26611:61;26664:7;26655:6;26644:9;26640:22;26611:61;:::i;:::-;26601:71;;26557:125;26344:345;;;;:::o;26695:181::-;26835:33;26831:1;26823:6;26819:14;26812:57;26695:181;:::o;26882:366::-;27024:3;27045:67;27109:2;27104:3;27045:67;:::i;:::-;27038:74;;27121:93;27210:3;27121:93;:::i;:::-;27239:2;27234:3;27230:12;27223:19;;26882:366;;;:::o;27254:419::-;27420:4;27458:2;27447:9;27443:18;27435:26;;27507:9;27501:4;27497:20;27493:1;27482:9;27478:17;27471:47;27535:131;27661:4;27535:131;:::i;:::-;27527:139;;27254:419;;;:::o;27679:224::-;27819:34;27815:1;27807:6;27803:14;27796:58;27888:7;27883:2;27875:6;27871:15;27864:32;27679:224;:::o;27909:366::-;28051:3;28072:67;28136:2;28131:3;28072:67;:::i;:::-;28065:74;;28148:93;28237:3;28148:93;:::i;:::-;28266:2;28261:3;28257:12;28250:19;;27909:366;;;:::o;28281:419::-;28447:4;28485:2;28474:9;28470:18;28462:26;;28534:9;28528:4;28524:20;28520:1;28509:9;28505:17;28498:47;28562:131;28688:4;28562:131;:::i;:::-;28554:139;;28281:419;;;:::o;28706:222::-;28846:34;28842:1;28834:6;28830:14;28823:58;28915:5;28910:2;28902:6;28898:15;28891:30;28706:222;:::o;28934:366::-;29076:3;29097:67;29161:2;29156:3;29097:67;:::i;:::-;29090:74;;29173:93;29262:3;29173:93;:::i;:::-;29291:2;29286:3;29282:12;29275:19;;28934:366;;;:::o;29306:419::-;29472:4;29510:2;29499:9;29495:18;29487:26;;29559:9;29553:4;29549:20;29545:1;29534:9;29530:17;29523:47;29587:131;29713:4;29587:131;:::i;:::-;29579:139;;29306:419;;;:::o;29731:225::-;29871:34;29867:1;29859:6;29855:14;29848:58;29940:8;29935:2;29927:6;29923:15;29916:33;29731:225;:::o;29962:366::-;30104:3;30125:67;30189:2;30184:3;30125:67;:::i;:::-;30118:74;;30201:93;30290:3;30201:93;:::i;:::-;30319:2;30314:3;30310:12;30303:19;;29962:366;;;:::o;30334:419::-;30500:4;30538:2;30527:9;30523:18;30515:26;;30587:9;30581:4;30577:20;30573:1;30562:9;30558:17;30551:47;30615:131;30741:4;30615:131;:::i;:::-;30607:139;;30334:419;;;:::o;30759:305::-;30799:3;30818:20;30836:1;30818:20;:::i;:::-;30813:25;;30852:20;30870:1;30852:20;:::i;:::-;30847:25;;31006:1;30938:66;30934:74;30931:1;30928:81;30925:107;;;31012:18;;:::i;:::-;30925:107;31056:1;31053;31049:9;31042:16;;30759:305;;;;:::o;31070:182::-;31210:34;31206:1;31198:6;31194:14;31187:58;31070:182;:::o;31258:366::-;31400:3;31421:67;31485:2;31480:3;31421:67;:::i;:::-;31414:74;;31497:93;31586:3;31497:93;:::i;:::-;31615:2;31610:3;31606:12;31599:19;;31258:366;;;:::o;31630:419::-;31796:4;31834:2;31823:9;31819:18;31811:26;;31883:9;31877:4;31873:20;31869:1;31858:9;31854:17;31847:47;31911:131;32037:4;31911:131;:::i;:::-;31903:139;;31630:419;;;:::o;32055:143::-;32112:5;32143:6;32137:13;32128:22;;32159:33;32186:5;32159:33;:::i;:::-;32055:143;;;;:::o;32204:351::-;32274:6;32323:2;32311:9;32302:7;32298:23;32294:32;32291:119;;;32329:79;;:::i;:::-;32291:119;32449:1;32474:64;32530:7;32521:6;32510:9;32506:22;32474:64;:::i;:::-;32464:74;;32420:128;32204:351;;;;:::o;32561:85::-;32606:7;32635:5;32624:16;;32561:85;;;:::o;32652:158::-;32710:9;32743:61;32761:42;32770:32;32796:5;32770:32;:::i;:::-;32761:42;:::i;:::-;32743:61;:::i;:::-;32730:74;;32652:158;;;:::o;32816:147::-;32911:45;32950:5;32911:45;:::i;:::-;32906:3;32899:58;32816:147;;:::o;32969:114::-;33036:6;33070:5;33064:12;33054:22;;32969:114;;;:::o;33089:184::-;33188:11;33222:6;33217:3;33210:19;33262:4;33257:3;33253:14;33238:29;;33089:184;;;;:::o;33279:132::-;33346:4;33369:3;33361:11;;33399:4;33394:3;33390:14;33382:22;;33279:132;;;:::o;33417:108::-;33494:24;33512:5;33494:24;:::i;:::-;33489:3;33482:37;33417:108;;:::o;33531:179::-;33600:10;33621:46;33663:3;33655:6;33621:46;:::i;:::-;33699:4;33694:3;33690:14;33676:28;;33531:179;;;;:::o;33716:113::-;33786:4;33818;33813:3;33809:14;33801:22;;33716:113;;;:::o;33865:732::-;33984:3;34013:54;34061:5;34013:54;:::i;:::-;34083:86;34162:6;34157:3;34083:86;:::i;:::-;34076:93;;34193:56;34243:5;34193:56;:::i;:::-;34272:7;34303:1;34288:284;34313:6;34310:1;34307:13;34288:284;;;34389:6;34383:13;34416:63;34475:3;34460:13;34416:63;:::i;:::-;34409:70;;34502:60;34555:6;34502:60;:::i;:::-;34492:70;;34348:224;34335:1;34332;34328:9;34323:14;;34288:284;;;34292:14;34588:3;34581:10;;33989:608;;;33865:732;;;;:::o;34603:831::-;34866:4;34904:3;34893:9;34889:19;34881:27;;34918:71;34986:1;34975:9;34971:17;34962:6;34918:71;:::i;:::-;34999:80;35075:2;35064:9;35060:18;35051:6;34999:80;:::i;:::-;35126:9;35120:4;35116:20;35111:2;35100:9;35096:18;35089:48;35154:108;35257:4;35248:6;35154:108;:::i;:::-;35146:116;;35272:72;35340:2;35329:9;35325:18;35316:6;35272:72;:::i;:::-;35354:73;35422:3;35411:9;35407:19;35398:6;35354:73;:::i;:::-;34603:831;;;;;;;;:::o;35440:311::-;35517:4;35607:18;35599:6;35596:30;35593:56;;;35629:18;;:::i;:::-;35593:56;35679:4;35671:6;35667:17;35659:25;;35739:4;35733;35729:15;35721:23;;35440:311;;;:::o;35757:143::-;35814:5;35845:6;35839:13;35830:22;;35861:33;35888:5;35861:33;:::i;:::-;35757:143;;;;:::o;35923:732::-;36030:5;36055:81;36071:64;36128:6;36071:64;:::i;:::-;36055:81;:::i;:::-;36046:90;;36156:5;36185:6;36178:5;36171:21;36219:4;36212:5;36208:16;36201:23;;36272:4;36264:6;36260:17;36252:6;36248:30;36301:3;36293:6;36290:15;36287:122;;;36320:79;;:::i;:::-;36287:122;36435:6;36418:231;36452:6;36447:3;36444:15;36418:231;;;36527:3;36556:48;36600:3;36588:10;36556:48;:::i;:::-;36551:3;36544:61;36634:4;36629:3;36625:14;36618:21;;36494:155;36478:4;36473:3;36469:14;36462:21;;36418:231;;;36422:21;36036:619;;35923:732;;;;;:::o;36678:385::-;36760:5;36809:3;36802:4;36794:6;36790:17;36786:27;36776:122;;36817:79;;:::i;:::-;36776:122;36927:6;36921:13;36952:105;37053:3;37045:6;37038:4;37030:6;37026:17;36952:105;:::i;:::-;36943:114;;36766:297;36678:385;;;;:::o;37069:554::-;37164:6;37213:2;37201:9;37192:7;37188:23;37184:32;37181:119;;;37219:79;;:::i;:::-;37181:119;37360:1;37349:9;37345:17;37339:24;37390:18;37382:6;37379:30;37376:117;;;37412:79;;:::i;:::-;37376:117;37517:89;37598:7;37589:6;37578:9;37574:22;37517:89;:::i;:::-;37507:99;;37310:306;37069:554;;;;:::o;37629:173::-;37769:25;37765:1;37757:6;37753:14;37746:49;37629:173;:::o;37808:366::-;37950:3;37971:67;38035:2;38030:3;37971:67;:::i;:::-;37964:74;;38047:93;38136:3;38047:93;:::i;:::-;38165:2;38160:3;38156:12;38149:19;;37808:366;;;:::o;38180:419::-;38346:4;38384:2;38373:9;38369:18;38361:26;;38433:9;38427:4;38423:20;38419:1;38408:9;38404:17;38397:47;38461:131;38587:4;38461:131;:::i;:::-;38453:139;;38180:419;;;:::o;38605:179::-;38745:31;38741:1;38733:6;38729:14;38722:55;38605:179;:::o;38790:366::-;38932:3;38953:67;39017:2;39012:3;38953:67;:::i;:::-;38946:74;;39029:93;39118:3;39029:93;:::i;:::-;39147:2;39142:3;39138:12;39131:19;;38790:366;;;:::o;39162:419::-;39328:4;39366:2;39355:9;39351:18;39343:26;;39415:9;39409:4;39405:20;39401:1;39390:9;39386:17;39379:47;39443:131;39569:4;39443:131;:::i;:::-;39435:139;;39162:419;;;:::o;39587:228::-;39727:34;39723:1;39715:6;39711:14;39704:58;39796:11;39791:2;39783:6;39779:15;39772:36;39587:228;:::o;39821:366::-;39963:3;39984:67;40048:2;40043:3;39984:67;:::i;:::-;39977:74;;40060:93;40149:3;40060:93;:::i;:::-;40178:2;40173:3;40169:12;40162:19;;39821:366;;;:::o;40193:419::-;40359:4;40397:2;40386:9;40382:18;40374:26;;40446:9;40440:4;40436:20;40432:1;40421:9;40417:17;40410:47;40474:131;40600:4;40474:131;:::i;:::-;40466:139;;40193:419;;;:::o;40618:233::-;40758:34;40754:1;40746:6;40742:14;40735:58;40827:16;40822:2;40814:6;40810:15;40803:41;40618:233;:::o;40857:366::-;40999:3;41020:67;41084:2;41079:3;41020:67;:::i;:::-;41013:74;;41096:93;41185:3;41096:93;:::i;:::-;41214:2;41209:3;41205:12;41198:19;;40857:366;;;:::o;41229:419::-;41395:4;41433:2;41422:9;41418:18;41410:26;;41482:9;41476:4;41472:20;41468:1;41457:9;41453:17;41446:47;41510:131;41636:4;41510:131;:::i;:::-;41502:139;;41229:419;;;:::o;41654:222::-;41794:34;41790:1;41782:6;41778:14;41771:58;41863:5;41858:2;41850:6;41846:15;41839:30;41654:222;:::o;41882:366::-;42024:3;42045:67;42109:2;42104:3;42045:67;:::i;:::-;42038:74;;42121:93;42210:3;42121:93;:::i;:::-;42239:2;42234:3;42230:12;42223:19;;41882:366;;;:::o;42254:419::-;42420:4;42458:2;42447:9;42443:18;42435:26;;42507:9;42501:4;42497:20;42493:1;42482:9;42478:17;42471:47;42535:131;42661:4;42535:131;:::i;:::-;42527:139;;42254:419;;;:::o;42679:177::-;42819:29;42815:1;42807:6;42803:14;42796:53;42679:177;:::o;42862:366::-;43004:3;43025:67;43089:2;43084:3;43025:67;:::i;:::-;43018:74;;43101:93;43190:3;43101:93;:::i;:::-;43219:2;43214:3;43210:12;43203:19;;42862:366;;;:::o;43234:419::-;43400:4;43438:2;43427:9;43423:18;43415:26;;43487:9;43481:4;43477:20;43473:1;43462:9;43458:17;43451:47;43515:131;43641:4;43515:131;:::i;:::-;43507:139;;43234:419;;;:::o;43659:182::-;43799:34;43795:1;43787:6;43783:14;43776:58;43659:182;:::o;43847:366::-;43989:3;44010:67;44074:2;44069:3;44010:67;:::i;:::-;44003:74;;44086:93;44175:3;44086:93;:::i;:::-;44204:2;44199:3;44195:12;44188:19;;43847:366;;;:::o;44219:419::-;44385:4;44423:2;44412:9;44408:18;44400:26;;44472:9;44466:4;44462:20;44458:1;44447:9;44443:17;44436:47;44500:131;44626:4;44500:131;:::i;:::-;44492:139;;44219:419;;;:::o;44644:442::-;44793:4;44831:2;44820:9;44816:18;44808:26;;44844:71;44912:1;44901:9;44897:17;44888:6;44844:71;:::i;:::-;44925:72;44993:2;44982:9;44978:18;44969:6;44925:72;:::i;:::-;45007;45075:2;45064:9;45060:18;45051:6;45007:72;:::i;:::-;44644:442;;;;;;:::o;45092:79::-;45131:7;45160:5;45149:16;;45092:79;;;:::o;45177:157::-;45282:45;45302:24;45320:5;45302:24;:::i;:::-;45282:45;:::i;:::-;45277:3;45270:58;45177:157;;:::o;45340:94::-;45373:8;45421:5;45417:2;45413:14;45392:35;;45340:94;;;:::o;45440:::-;45479:7;45508:20;45522:5;45508:20;:::i;:::-;45497:31;;45440:94;;;:::o;45540:100::-;45579:7;45608:26;45628:5;45608:26;:::i;:::-;45597:37;;45540:100;;;:::o;45646:157::-;45751:45;45771:24;45789:5;45771:24;:::i;:::-;45751:45;:::i;:::-;45746:3;45739:58;45646:157;;:::o;45809:961::-;46061:3;46076:75;46147:3;46138:6;46076:75;:::i;:::-;46176:2;46171:3;46167:12;46160:19;;46189:75;46260:3;46251:6;46189:75;:::i;:::-;46289:2;46284:3;46280:12;46273:19;;46302:75;46373:3;46364:6;46302:75;:::i;:::-;46402:2;46397:3;46393:12;46386:19;;46415:75;46486:3;46477:6;46415:75;:::i;:::-;46515:2;46510:3;46506:12;46499:19;;46528:75;46599:3;46590:6;46528:75;:::i;:::-;46628:2;46623:3;46619:12;46612:19;;46641:75;46712:3;46703:6;46641:75;:::i;:::-;46741:2;46736:3;46732:12;46725:19;;46761:3;46754:10;;45809:961;;;;;;;;;:::o;46776:176::-;46808:1;46825:20;46843:1;46825:20;:::i;:::-;46820:25;;46859:20;46877:1;46859:20;:::i;:::-;46854:25;;46898:1;46888:35;;46903:18;;:::i;:::-;46888:35;46944:1;46941;46937:9;46932:14;;46776:176;;;;:::o

Swarm Source

ipfs://c30eaa374c0dfcd70ad4ff33ea2b9523ea9bde1b6bbe54a95620a4e4f227ea95
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.