ETH Price: $3,257.10 (+4.56%)
Gas: 2 Gwei

Token

BedRockAI (BRAI)
 

Overview

Max Total Supply

100,000,000 BRAI

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
897,124.933290481567382813 BRAI

Value
$0.00
0xcF7691b503BA26f0548Ac1fA60F8ad2d618f8971
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:
BedRockAI

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-04-13
*/

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


interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns(uint256);

    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns(uint256);

    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns(bool);

    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns(uint256);

    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns(bool);

    /**
    * @dev Moves `amount` tokens from `sender` to `recipient` using the
    * allowance mechanism. `amount` is then deducted from the caller's
    * allowance.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns(bool);

        /**
        * @dev Emitted when `value` tokens are moved from one account (`from`) to
        * another (`to`).
        *
        * Note that `value` may be zero.
        */
        event Transfer(address indexed from, address indexed to, uint256 value);

        /**
        * @dev Emitted when the allowance of a `spender` for an `owner` is set by
        * a call to {approve}. `value` is the new allowance.
        */
        event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns(string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns(string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns(uint8);
}

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

}

 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns(string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns(string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns(uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns(uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns(uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns(bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns(uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns(bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    
}
 
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

  
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns(address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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 BedRockAI is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address private devWallet;
    address private marketingWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;


    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyDevFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellDevFee:0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
 
  
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("BedRockAI", "BRAI") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 1e8 * 1e18;

        maxBuyAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 2 / 100; // 2% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet

        _fees.buyMarketingFee = 5;
        _fees.buyLiquidityFee = 1;
        _fees.buyDevFee = 4;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = 5;
        _fees.sellLiquidityFee = 1;
        _fees.sellDevFee = 4;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;


        marketingWallet = address(0x9C3D05F0aF56742d2dC68312d2e6365c7dA18041);
        devWallet = address(0xB8855D8F51eAfDD4aC0D712D5E5844F30AaBe80A);

        // exclude from paying fees or having max transaction amount

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 2;
    }



    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _devFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _devFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less");   
        require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }


    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }

        }
 
        
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(devWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600d60008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055505050348015620001ad57600080fd5b506040518060400160405280600981526020017f426564526f636b414900000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f425241490000000000000000000000000000000000000000000000000000000081525081600390805190602001906200023292919062000f12565b5080600490805190602001906200024b92919062000f12565b50505060006200026062000bc760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003cb91906200102c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b91906200102c565b6040518363ffffffff1660e01b81526004016200048a9291906200106f565b602060405180830381600087803b158015620004a557600080fd5b505af1158015620004ba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e091906200102c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016013600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620005dd62000bcf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006200069c62000bcf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200075b62000bcf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008ec6080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000bf960201b60201c565b5060006a52b7d2dcc80cd2e400000090506064816200090c919062001104565b60088190555060648162000921919062001104565b60098190555060646002826200093891906200113c565b62000944919062001104565b600a819055506127106001826200095c91906200113c565b62000968919062001104565b600b819055506005600d60000160016101000a81548160ff021916908360ff1602179055506001600d60000160036101000a81548160ff021916908360ff1602179055506004600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff1662000a109190620011aa565b62000a1c9190620011aa565b600d60000160006101000a81548160ff021916908360ff1602179055506005600d60000160056101000a81548160ff021916908360ff1602179055506001600d60000160076101000a81548160ff021916908360ff1602179055506004600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff1662000adb9190620011aa565b62000ae79190620011aa565b600d60000160046101000a81548160ff021916908360ff160217905550739c3d05f0af56742d2dc68312d2e6365c7da18041600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b8855d8f51eafdd4ac0d712d5e5844f30aabe80a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000bc0338262000c2760201b60201c565b50620013cd565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000c1d62000c0f62000bc760201b60201c565b848462000dc260201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c919062001249565b60405180910390fd5b62000cb68160025462000eaf60201b6200204e1790919060201c565b60028190555062000d14816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000eaf60201b6200204e1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000db691906200127c565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ea291906200127c565b60405180910390a3505050565b600080828462000ec0919062001299565b90508381101562000f08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000eff9062001346565b60405180910390fd5b8091505092915050565b82805462000f209062001397565b90600052602060002090601f01602090048101928262000f44576000855562000f90565b82601f1062000f5f57805160ff191683800117855562000f90565b8280016001018555821562000f90579182015b8281111562000f8f57825182559160200191906001019062000f72565b5b50905062000f9f919062000fa3565b5090565b5b8082111562000fbe57600081600090555060010162000fa4565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ff48262000fc7565b9050919050565b620010068162000fe7565b81146200101257600080fd5b50565b600081519050620010268162000ffb565b92915050565b60006020828403121562001045576200104462000fc2565b5b6000620010558482850162001015565b91505092915050565b620010698162000fe7565b82525050565b60006040820190506200108660008301856200105e565b6200109560208301846200105e565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001111826200109c565b91506200111e836200109c565b925082620011315762001130620010a6565b5b828204905092915050565b600062001149826200109c565b915062001156836200109c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620011925762001191620010d5565b5b828202905092915050565b600060ff82169050919050565b6000620011b7826200119d565b9150620011c4836200119d565b92508260ff03821115620011dd57620011dc620010d5565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001231601f83620011e8565b91506200123e82620011f9565b602082019050919050565b60006020820190508181036000830152620012648162001222565b9050919050565b62001276816200109c565b82525050565b60006020820190506200129360008301846200126b565b92915050565b6000620012a6826200109c565b9150620012b3836200109c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012eb57620012ea620010d5565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200132e601b83620011e8565b91506200133b82620012f6565b602082019050919050565b6000602082019050818103600083015262001361816200131f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013b057607f821691505b60208210811415620013c757620013c662001368565b5b50919050565b60805160a0516147fd6200141d600039600081816110df01526118f201526000818161202c0152818161331f0152818161340f01528181613436015281816134d201526134f901526147fd6000f3fe60806040526004361061021e5760003560e01c80637571336a11610123578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e1461080d578063e16830a81461084a578063f2fde38b14610873578063f5b3c3bf1461089c578063f887ea40146108d957610225565b8063c024666814610737578063c16dd4a414610760578063c18bc19514610789578063d212a69a146107b2578063d3f6a157146107e457610225565b80639fccce32116100f25780639fccce3214610650578063a457c2d71461067b578063a9059cbb146106b8578063b8863115146106f5578063b9e418e71461072057610225565b80637571336a146105945780638da5cb5b146105bd57806395d89b41146105e857806396880b171461061357610225565b8063313ce567116101a65780634fbee193116101755780634fbee1931461049b578063555467a1146104d85780636ddd17131461051557806370a0823114610540578063715018a61461057d57610225565b8063313ce567146103df5780633265e8461461040a578063395093511461043357806349bd5a5e1461047057610225565b806318160ddd116101ed57806318160ddd146102f85780631a8145bb146103235780631c6e8a751461034e5780631f3fed8f1461037757806323b872dd146103a257610225565b806306fdde031461022a578063095ea7b31461025557806310d5de531461029257806311a582c3146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610904565b60405161024c91906136b1565b60405180910390f35b34801561026157600080fd5b5061027c6004803603810190610277919061376c565b610996565b60405161028991906137c7565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906137e2565b6109b4565b6040516102c691906137c7565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061380f565b6109d4565b005b34801561030457600080fd5b5061030d610ba5565b60405161031a919061385e565b60405180910390f35b34801561032f57600080fd5b50610338610baf565b604051610345919061385e565b60405180910390f35b34801561035a57600080fd5b50610375600480360381019061037091906138a5565b610bb5565b005b34801561038357600080fd5b5061038c610c69565b604051610399919061385e565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906138d2565b610c6f565b6040516103d691906137c7565b60405180910390f35b3480156103eb57600080fd5b506103f4610d48565b6040516104019190613941565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190613988565b610d51565b005b34801561043f57600080fd5b5061045a6004803603810190610455919061376c565b61102a565b60405161046791906137c7565b60405180910390f35b34801561047c57600080fd5b506104856110dd565b6040516104929190613a24565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906137e2565b611101565b6040516104cf91906137c7565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190613a3f565b611157565b60405161050c91906137c7565b60405180910390f35b34801561052157600080fd5b5061052a611200565b60405161053791906137c7565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906137e2565b611213565b604051610574919061385e565b60405180910390f35b34801561058957600080fd5b5061059261125b565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190613a6c565b6113b3565b005b3480156105c957600080fd5b506105d26114a5565b6040516105df9190613a24565b60405180910390f35b3480156105f457600080fd5b506105fd6114cf565b60405161060a91906136b1565b60405180910390f35b34801561061f57600080fd5b5061063a600480360381019061063591906137e2565b611561565b60405161064791906137c7565b60405180910390f35b34801561065c57600080fd5b50610665611581565b604051610672919061385e565b60405180910390f35b34801561068757600080fd5b506106a2600480360381019061069d919061376c565b611587565b6040516106af91906137c7565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da919061376c565b611654565b6040516106ec91906137c7565b60405180910390f35b34801561070157600080fd5b5061070a611672565b60405161071791906137c7565b60405180910390f35b34801561072c57600080fd5b50610735611685565b005b34801561074357600080fd5b5061075e60048036038101906107599190613a6c565b611767565b005b34801561076c57600080fd5b5061078760048036038101906107829190613a6c565b611859565b005b34801561079557600080fd5b506107b060048036038101906107ab9190613a3f565b6119da565b005b3480156107be57600080fd5b506107c7611b0f565b6040516107db989796959493929190613aac565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190613b2a565b611bad565b005b34801561081957600080fd5b50610834600480360381019061082f9190613b2a565b611cca565b604051610841919061385e565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c9190613a6c565b611d51565b005b34801561087f57600080fd5b5061089a600480360381019061089591906137e2565b611e43565b005b3480156108a857600080fd5b506108c360048036038101906108be91906137e2565b61200a565b6040516108d091906137c7565b60405180910390f35b3480156108e557600080fd5b506108ee61202a565b6040516108fb9190613bc9565b60405180910390f35b60606003805461091390613c13565b80601f016020809104026020016040519081016040528092919081815260200182805461093f90613c13565b801561098c5780601f106109615761010080835404028352916020019161098c565b820191906000526020600020905b81548152906001019060200180831161096f57829003601f168201915b5050505050905090565b60006109aa6109a36120ac565b84846120b4565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b6109dc6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290613c91565b60405180910390fd5b6064610a75610ba5565b610a7f9190613d0f565b6103e883610a8b610ba5565b610a959190613d40565b610a9f9190613d0f565b1015610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad790613e0c565b60405180910390fd5b6064610aea610ba5565b610af49190613d0f565b6103e882610b00610ba5565b610b0a9190613d40565b610b149190613d0f565b1015610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90613e9e565b60405180910390fd5b6103e882610b61610ba5565b610b6b9190613d40565b610b759190613d0f565b6008819055506103e881610b87610ba5565b610b919190613d40565b610b9b9190613d0f565b6009819055505050565b6000600254905090565b600f5481565b610bbd6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613c91565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b600e5481565b6000610c7c84848461219f565b610d3d84610c886120ac565b610d38856040518060600160405280602881526020016147a060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cee6120ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c759092919063ffffffff16565b6120b4565b600190509392505050565b60006012905090565b610d596120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90613c91565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e859190613ebe565b610e8f9190613ebe565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610f499190613ebe565b610f539190613ebe565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090613f41565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613f41565b60405180910390fd5b505050505050565b60006110d36110376120ac565b846110ce85600160006110486120ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204e90919063ffffffff16565b6120b4565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111616120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790613c91565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112636120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990613c91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113bb6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190613c91565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114de90613c13565b80601f016020809104026020016040519081016040528092919081815260200182805461150a90613c13565b80156115575780601f1061152c57610100808354040283529160200191611557565b820191906000526020600020905b81548152906001019060200180831161153a57829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b60105481565b600061164a6115946120ac565b846116458560405180606001604052806025815260200161475560259139600160006115be6120ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c759092919063ffffffff16565b6120b4565b6001905092915050565b60006116686116616120ac565b848461219f565b6001905092915050565b600c60029054906101000a900460ff1681565b61168d6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390613c91565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555060024361175f9190613f61565b601181905550565b61176f6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590613c91565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118616120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790613c91565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690614003565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6119e26120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890613c91565b60405180910390fd5b6064611a7b610ba5565b611a859190613d0f565b6103e882611a91610ba5565b611a9b9190613d40565b611aa59190613d0f565b1015611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90614095565b60405180910390fd5b6103e881611af2610ba5565b611afc9190613d40565b611b069190613d0f565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611bb56120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b90613c91565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d596120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90613c91565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e4b6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613c91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190614127565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080828461205d9190613f61565b9050838110156120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990614193565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612192919061385e565b60405180910390a3505050565b60008114156121b9576121b483836000612cd9565b612c70565b6121c16114a5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222f57506121ff6114a5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122485750600c60029054906101000a900460ff16155b156125ce57600c60009054906101000a900460ff1661234257601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123025750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612338906141ff565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123e55750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124345760085481111561242f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124269061426b565b60405180910390fd5b612523565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124d75750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561252257600954811115612521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612518906142d7565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125cd57600a5461258083611213565b8261258b9190613f61565b11156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390614343565b60405180910390fd5b5b5b60006125d930611213565b90506000600b5482101590508080156125fe5750600c60019054906101000a900460ff165b80156126175750600c60029054906101000a900460ff16155b801561266c5750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156126c25750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127185750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561275c576001600c60026101000a81548160ff021916908315150217905550612740612e83565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128125750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561281c57600090505b8015612c615760006011544310156128be57612855606461284760638861317190919063ffffffff16565b6131ec90919063ffffffff16565b90506063605e826128669190613d40565b6128709190613d0f565b600e60008282546128819190613f61565b9250508190555060636005826128979190613d40565b6128a19190613d0f565b601060008282546128b29190613f61565b92505081905550612c3c565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561292c57506000600d60000160049054906101000a900460ff1660ff16115b15612a7e5761296c606461295e600d60000160049054906101000a900460ff1660ff168861317190919063ffffffff16565b6131ec90919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff16826129a59190613d40565b6129af9190613d0f565b600f60008282546129c09190613f61565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff16826129fe9190613d40565b612a089190613d0f565b600e6000828254612a199190613f61565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612a579190613d40565b612a619190613d0f565b60106000828254612a729190613f61565b92505081905550612c3b565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aec57506000600d60000160009054906101000a900460ff1660ff16115b15612c3a57612b2c6064612b1e600d60000160009054906101000a900460ff1660ff168861317190919063ffffffff16565b6131ec90919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612b659190613d40565b612b6f9190613d0f565b600f6000828254612b809190613f61565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612bbe9190613d40565b612bc89190613d0f565b600e6000828254612bd99190613f61565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612c179190613d40565b612c219190613d0f565b60106000828254612c329190613f61565b925050819055505b5b5b6000811115612c5157612c50873083612cd9565b5b8085612c5d9190614363565b9450505b612c6c868686612cd9565b5050505b505050565b6000838311158290612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb491906136b1565b60405180910390fd5b5060008385612ccc9190614363565b9050809150509392505050565b612d448160405180606001604052806026815260200161477a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c759092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612dd7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e76919061385e565b60405180910390a3505050565b6000612e8e30611213565b90506000601054600e54600f54612ea59190613f61565b612eaf9190613f61565b9050600080831480612ec15750600082145b15612ece5750505061316f565b6014600b54612edd9190613d40565b831115612ef6576014600b54612ef39190613d40565b92505b6000600283600f5486612f099190613d40565b612f139190613d0f565b612f1d9190613d0f565b90506000612f34828661323690919063ffffffff16565b90506000479050612f4482613280565b6000612f59824761323690919063ffffffff16565b90506000612f8487612f76600e548561317190919063ffffffff16565b6131ec90919063ffffffff16565b90506000612faf88612fa16010548661317190919063ffffffff16565b6131ec90919063ffffffff16565b905060008183612fbf9190613f61565b84612fca9190614363565b90506000600f819055506000600e819055506000601081905550600087118015612ff45750600081115b1561303d5761300387826134cc565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051613034929190614397565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476130829190614363565b60405161308e906143f1565b60006040518083038185875af1925050503d80600081146130cb576040519150601f19603f3d011682016040523d82523d6000602084013e6130d0565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161311c906143f1565b60006040518083038185875af1925050503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b505080985050505050505050505050505b565b60008083141561318457600090506131e6565b600082846131929190613d40565b90508284826131a19190613d0f565b146131e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d890614478565b60405180910390fd5b809150505b92915050565b600061322e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135b5565b905092915050565b600061327883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c75565b905092915050565b6000600267ffffffffffffffff81111561329d5761329c614498565b5b6040519080825280602002602001820160405280156132cb5781602001602082028036833780820191505090505b50905030816000815181106132e3576132e26144c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561338357600080fd5b505afa158015613397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133bb919061450b565b816001815181106133cf576133ce6144c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613434307f0000000000000000000000000000000000000000000000000000000000000000846120b4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613496959493929190614631565b600060405180830381600087803b1580156134b057600080fd5b505af11580156134c4573d6000803e3d6000fd5b505050505050565b6134f7307f0000000000000000000000000000000000000000000000000000000000000000846120b4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161355c9695949392919061468b565b6060604051808303818588803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135ae9190614701565b5050505050565b600080831182906135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f391906136b1565b60405180910390fd5b506000838561360b9190613d0f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613652578082015181840152602081019050613637565b83811115613661576000848401525b50505050565b6000601f19601f8301169050919050565b600061368382613618565b61368d8185613623565b935061369d818560208601613634565b6136a681613667565b840191505092915050565b600060208201905081810360008301526136cb8184613678565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613703826136d8565b9050919050565b613713816136f8565b811461371e57600080fd5b50565b6000813590506137308161370a565b92915050565b6000819050919050565b61374981613736565b811461375457600080fd5b50565b60008135905061376681613740565b92915050565b60008060408385031215613783576137826136d3565b5b600061379185828601613721565b92505060206137a285828601613757565b9150509250929050565b60008115159050919050565b6137c1816137ac565b82525050565b60006020820190506137dc60008301846137b8565b92915050565b6000602082840312156137f8576137f76136d3565b5b600061380684828501613721565b91505092915050565b60008060408385031215613826576138256136d3565b5b600061383485828601613757565b925050602061384585828601613757565b9150509250929050565b61385881613736565b82525050565b6000602082019050613873600083018461384f565b92915050565b613882816137ac565b811461388d57600080fd5b50565b60008135905061389f81613879565b92915050565b6000602082840312156138bb576138ba6136d3565b5b60006138c984828501613890565b91505092915050565b6000806000606084860312156138eb576138ea6136d3565b5b60006138f986828701613721565b935050602061390a86828701613721565b925050604061391b86828701613757565b9150509250925092565b600060ff82169050919050565b61393b81613925565b82525050565b60006020820190506139566000830184613932565b92915050565b61396581613925565b811461397057600080fd5b50565b6000813590506139828161395c565b92915050565b60008060008060008060c087890312156139a5576139a46136d3565b5b60006139b389828a01613973565b96505060206139c489828a01613973565b95505060406139d589828a01613973565b94505060606139e689828a01613973565b93505060806139f789828a01613973565b92505060a0613a0889828a01613973565b9150509295509295509295565b613a1e816136f8565b82525050565b6000602082019050613a396000830184613a15565b92915050565b600060208284031215613a5557613a546136d3565b5b6000613a6384828501613757565b91505092915050565b60008060408385031215613a8357613a826136d3565b5b6000613a9185828601613721565b9250506020613aa285828601613890565b9150509250929050565b600061010082019050613ac2600083018b613932565b613acf602083018a613932565b613adc6040830189613932565b613ae96060830188613932565b613af66080830187613932565b613b0360a0830186613932565b613b1060c0830185613932565b613b1d60e0830184613932565b9998505050505050505050565b60008060408385031215613b4157613b406136d3565b5b6000613b4f85828601613721565b9250506020613b6085828601613721565b9150509250929050565b6000819050919050565b6000613b8f613b8a613b85846136d8565b613b6a565b6136d8565b9050919050565b6000613ba182613b74565b9050919050565b6000613bb382613b96565b9050919050565b613bc381613ba8565b82525050565b6000602082019050613bde6000830184613bba565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c2b57607f821691505b60208210811415613c3f57613c3e613be4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c7b602083613623565b9150613c8682613c45565b602082019050919050565b60006020820190508181036000830152613caa81613c6e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d1a82613736565b9150613d2583613736565b925082613d3557613d34613cb1565b5b828204905092915050565b6000613d4b82613736565b9150613d5683613736565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8f57613d8e613ce0565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613df6602383613623565b9150613e0182613d9a565b604082019050919050565b60006020820190508181036000830152613e2581613de9565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b6000613e88602483613623565b9150613e9382613e2c565b604082019050919050565b60006020820190508181036000830152613eb781613e7b565b9050919050565b6000613ec982613925565b9150613ed483613925565b92508260ff03821115613eea57613ee9613ce0565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613f2b601d83613623565b9150613f3682613ef5565b602082019050919050565b60006020820190508181036000830152613f5a81613f1e565b9050919050565b6000613f6c82613736565b9150613f7783613736565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fac57613fab613ce0565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b6000613fed601783613623565b9150613ff882613fb7565b602082019050919050565b6000602082019050818103600083015261401c81613fe0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061407f602283613623565b915061408a82614023565b604082019050919050565b600060208201905081810360008301526140ae81614072565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614111602683613623565b915061411c826140b5565b604082019050919050565b6000602082019050818103600083015261414081614104565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061417d601b83613623565b915061418882614147565b602082019050919050565b600060208201905081810360008301526141ac81614170565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141e9601683613623565b91506141f4826141b3565b602082019050919050565b60006020820190508181036000830152614218816141dc565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614255601c83613623565b91506142608261421f565b602082019050919050565b6000602082019050818103600083015261428481614248565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006142c1601d83613623565b91506142cc8261428b565b602082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061432d601383613623565b9150614338826142f7565b602082019050919050565b6000602082019050818103600083015261435c81614320565b9050919050565b600061436e82613736565b915061437983613736565b92508282101561438c5761438b613ce0565b5b828203905092915050565b60006040820190506143ac600083018561384f565b6143b9602083018461384f565b9392505050565b600081905092915050565b50565b60006143db6000836143c0565b91506143e6826143cb565b600082019050919050565b60006143fc826143ce565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614462602183613623565b915061446d82614406565b604082019050919050565b6000602082019050818103600083015261449181614455565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506145058161370a565b92915050565b600060208284031215614521576145206136d3565b5b600061452f848285016144f6565b91505092915050565b6000819050919050565b600061455d61455861455384614538565b613b6a565b613736565b9050919050565b61456d81614542565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145a8816136f8565b82525050565b60006145ba838361459f565b60208301905092915050565b6000602082019050919050565b60006145de82614573565b6145e8818561457e565b93506145f38361458f565b8060005b8381101561462457815161460b88826145ae565b9750614616836145c6565b9250506001810190506145f7565b5085935050505092915050565b600060a082019050614646600083018861384f565b6146536020830187614564565b818103604083015261466581866145d3565b90506146746060830185613a15565b614681608083018461384f565b9695505050505050565b600060c0820190506146a06000830189613a15565b6146ad602083018861384f565b6146ba6040830187614564565b6146c76060830186614564565b6146d46080830185613a15565b6146e160a083018461384f565b979650505050505050565b6000815190506146fb81613740565b92915050565b60008060006060848603121561471a576147196136d3565b5b6000614728868287016146ec565b9350506020614739868287016146ec565b925050604061474a868287016146ec565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212205ea287e4712db2343c800e96b792909ea099d5aebc85812c26adee79083f08e164736f6c63430008090033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80637571336a11610123578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e1461080d578063e16830a81461084a578063f2fde38b14610873578063f5b3c3bf1461089c578063f887ea40146108d957610225565b8063c024666814610737578063c16dd4a414610760578063c18bc19514610789578063d212a69a146107b2578063d3f6a157146107e457610225565b80639fccce32116100f25780639fccce3214610650578063a457c2d71461067b578063a9059cbb146106b8578063b8863115146106f5578063b9e418e71461072057610225565b80637571336a146105945780638da5cb5b146105bd57806395d89b41146105e857806396880b171461061357610225565b8063313ce567116101a65780634fbee193116101755780634fbee1931461049b578063555467a1146104d85780636ddd17131461051557806370a0823114610540578063715018a61461057d57610225565b8063313ce567146103df5780633265e8461461040a578063395093511461043357806349bd5a5e1461047057610225565b806318160ddd116101ed57806318160ddd146102f85780631a8145bb146103235780631c6e8a751461034e5780631f3fed8f1461037757806323b872dd146103a257610225565b806306fdde031461022a578063095ea7b31461025557806310d5de531461029257806311a582c3146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610904565b60405161024c91906136b1565b60405180910390f35b34801561026157600080fd5b5061027c6004803603810190610277919061376c565b610996565b60405161028991906137c7565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906137e2565b6109b4565b6040516102c691906137c7565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061380f565b6109d4565b005b34801561030457600080fd5b5061030d610ba5565b60405161031a919061385e565b60405180910390f35b34801561032f57600080fd5b50610338610baf565b604051610345919061385e565b60405180910390f35b34801561035a57600080fd5b50610375600480360381019061037091906138a5565b610bb5565b005b34801561038357600080fd5b5061038c610c69565b604051610399919061385e565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906138d2565b610c6f565b6040516103d691906137c7565b60405180910390f35b3480156103eb57600080fd5b506103f4610d48565b6040516104019190613941565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190613988565b610d51565b005b34801561043f57600080fd5b5061045a6004803603810190610455919061376c565b61102a565b60405161046791906137c7565b60405180910390f35b34801561047c57600080fd5b506104856110dd565b6040516104929190613a24565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906137e2565b611101565b6040516104cf91906137c7565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190613a3f565b611157565b60405161050c91906137c7565b60405180910390f35b34801561052157600080fd5b5061052a611200565b60405161053791906137c7565b60405180910390f35b34801561054c57600080fd5b50610567600480360381019061056291906137e2565b611213565b604051610574919061385e565b60405180910390f35b34801561058957600080fd5b5061059261125b565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190613a6c565b6113b3565b005b3480156105c957600080fd5b506105d26114a5565b6040516105df9190613a24565b60405180910390f35b3480156105f457600080fd5b506105fd6114cf565b60405161060a91906136b1565b60405180910390f35b34801561061f57600080fd5b5061063a600480360381019061063591906137e2565b611561565b60405161064791906137c7565b60405180910390f35b34801561065c57600080fd5b50610665611581565b604051610672919061385e565b60405180910390f35b34801561068757600080fd5b506106a2600480360381019061069d919061376c565b611587565b6040516106af91906137c7565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da919061376c565b611654565b6040516106ec91906137c7565b60405180910390f35b34801561070157600080fd5b5061070a611672565b60405161071791906137c7565b60405180910390f35b34801561072c57600080fd5b50610735611685565b005b34801561074357600080fd5b5061075e60048036038101906107599190613a6c565b611767565b005b34801561076c57600080fd5b5061078760048036038101906107829190613a6c565b611859565b005b34801561079557600080fd5b506107b060048036038101906107ab9190613a3f565b6119da565b005b3480156107be57600080fd5b506107c7611b0f565b6040516107db989796959493929190613aac565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190613b2a565b611bad565b005b34801561081957600080fd5b50610834600480360381019061082f9190613b2a565b611cca565b604051610841919061385e565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c9190613a6c565b611d51565b005b34801561087f57600080fd5b5061089a600480360381019061089591906137e2565b611e43565b005b3480156108a857600080fd5b506108c360048036038101906108be91906137e2565b61200a565b6040516108d091906137c7565b60405180910390f35b3480156108e557600080fd5b506108ee61202a565b6040516108fb9190613bc9565b60405180910390f35b60606003805461091390613c13565b80601f016020809104026020016040519081016040528092919081815260200182805461093f90613c13565b801561098c5780601f106109615761010080835404028352916020019161098c565b820191906000526020600020905b81548152906001019060200180831161096f57829003601f168201915b5050505050905090565b60006109aa6109a36120ac565b84846120b4565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b6109dc6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290613c91565b60405180910390fd5b6064610a75610ba5565b610a7f9190613d0f565b6103e883610a8b610ba5565b610a959190613d40565b610a9f9190613d0f565b1015610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad790613e0c565b60405180910390fd5b6064610aea610ba5565b610af49190613d0f565b6103e882610b00610ba5565b610b0a9190613d40565b610b149190613d0f565b1015610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90613e9e565b60405180910390fd5b6103e882610b61610ba5565b610b6b9190613d40565b610b759190613d0f565b6008819055506103e881610b87610ba5565b610b919190613d40565b610b9b9190613d0f565b6009819055505050565b6000600254905090565b600f5481565b610bbd6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613c91565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b600e5481565b6000610c7c84848461219f565b610d3d84610c886120ac565b610d38856040518060600160405280602881526020016147a060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cee6120ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c759092919063ffffffff16565b6120b4565b600190509392505050565b60006012905090565b610d596120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90613c91565b60405180910390fd5b85600d60000160016101000a81548160ff021916908360ff16021790555084600d60000160036101000a81548160ff021916908360ff16021790555083600d60000160026101000a81548160ff021916908360ff160217905550600d60000160029054906101000a900460ff16600d60000160039054906101000a900460ff16600d60000160019054906101000a900460ff16610e859190613ebe565b610e8f9190613ebe565b600d60000160006101000a81548160ff021916908360ff16021790555082600d60000160056101000a81548160ff021916908360ff16021790555081600d60000160076101000a81548160ff021916908360ff16021790555080600d60000160066101000a81548160ff021916908360ff160217905550600d60000160069054906101000a900460ff16600d60000160079054906101000a900460ff16600d60000160059054906101000a900460ff16610f499190613ebe565b610f539190613ebe565b600d60000160046101000a81548160ff021916908360ff160217905550601e600d60000160009054906101000a900460ff1660ff161115610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090613f41565b60405180910390fd5b601e600d60000160049054906101000a900460ff1660ff161115611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613f41565b60405180910390fd5b505050505050565b60006110d36110376120ac565b846110ce85600160006110486120ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204e90919063ffffffff16565b6120b4565b6001905092915050565b7f00000000000000000000000002f1c8a9cf761339aea7c0890f500bfafeb524c181565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006111616120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790613c91565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112636120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990613c91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113bb6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190613c91565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114de90613c13565b80601f016020809104026020016040519081016040528092919081815260200182805461150a90613c13565b80156115575780601f1061152c57610100808354040283529160200191611557565b820191906000526020600020905b81548152906001019060200180831161153a57829003601f168201915b5050505050905090565b60146020528060005260406000206000915054906101000a900460ff1681565b60105481565b600061164a6115946120ac565b846116458560405180606001604052806025815260200161475560259139600160006115be6120ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c759092919063ffffffff16565b6120b4565b6001905092915050565b60006116686116616120ac565b848461219f565b6001905092915050565b600c60029054906101000a900460ff1681565b61168d6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390613c91565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555060024361175f9190613f61565b601181905550565b61176f6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590613c91565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118616120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790613c91565b60405180910390fd5b7f00000000000000000000000002f1c8a9cf761339aea7c0890f500bfafeb524c173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690614003565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6119e26120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890613c91565b60405180910390fd5b6064611a7b610ba5565b611a859190613d0f565b6103e882611a91610ba5565b611a9b9190613d40565b611aa59190613d0f565b1015611ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611add90614095565b60405180910390fd5b6103e881611af2610ba5565b611afc9190613d40565b611b069190613d0f565b600a8190555050565b600d8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905088565b611bb56120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b90613c91565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d596120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90613c91565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e4b6120ac565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613c91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4190614127565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60156020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600080828461205d9190613f61565b9050838110156120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990614193565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612192919061385e565b60405180910390a3505050565b60008114156121b9576121b483836000612cd9565b612c70565b6121c16114a5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561222f57506121ff6114a5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122485750600c60029054906101000a900460ff16155b156125ce57600c60009054906101000a900460ff1661234257601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123025750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612341576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612338906141ff565b60405180910390fd5b5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123e55750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124345760085481111561242f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124269061426b565b60405180910390fd5b612523565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124d75750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561252257600954811115612521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612518906142d7565b60405180910390fd5b5b5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125cd57600a5461258083611213565b8261258b9190613f61565b11156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390614343565b60405180910390fd5b5b5b60006125d930611213565b90506000600b5482101590508080156125fe5750600c60019054906101000a900460ff165b80156126175750600c60029054906101000a900460ff16155b801561266c5750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156126c25750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127185750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561275c576001600c60026101000a81548160ff021916908315150217905550612740612e83565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128125750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561281c57600090505b8015612c615760006011544310156128be57612855606461284760638861317190919063ffffffff16565b6131ec90919063ffffffff16565b90506063605e826128669190613d40565b6128709190613d0f565b600e60008282546128819190613f61565b9250508190555060636005826128979190613d40565b6128a19190613d0f565b601060008282546128b29190613f61565b92505081905550612c3c565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561292c57506000600d60000160049054906101000a900460ff1660ff16115b15612a7e5761296c606461295e600d60000160049054906101000a900460ff1660ff168861317190919063ffffffff16565b6131ec90919063ffffffff16565b9050600d60000160049054906101000a900460ff1660ff16600d60000160079054906101000a900460ff1660ff16826129a59190613d40565b6129af9190613d0f565b600f60008282546129c09190613f61565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160059054906101000a900460ff1660ff16826129fe9190613d40565b612a089190613d0f565b600e6000828254612a199190613f61565b92505081905550600d60000160049054906101000a900460ff1660ff16600d60000160069054906101000a900460ff1660ff1682612a579190613d40565b612a619190613d0f565b60106000828254612a729190613f61565b92505081905550612c3b565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612aec57506000600d60000160009054906101000a900460ff1660ff16115b15612c3a57612b2c6064612b1e600d60000160009054906101000a900460ff1660ff168861317190919063ffffffff16565b6131ec90919063ffffffff16565b9050600d60000160009054906101000a900460ff1660ff16600d60000160039054906101000a900460ff1660ff1682612b659190613d40565b612b6f9190613d0f565b600f6000828254612b809190613f61565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160019054906101000a900460ff1660ff1682612bbe9190613d40565b612bc89190613d0f565b600e6000828254612bd99190613f61565b92505081905550600d60000160009054906101000a900460ff1660ff16600d60000160029054906101000a900460ff1660ff1682612c179190613d40565b612c219190613d0f565b60106000828254612c329190613f61565b925050819055505b5b5b6000811115612c5157612c50873083612cd9565b5b8085612c5d9190614363565b9450505b612c6c868686612cd9565b5050505b505050565b6000838311158290612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb491906136b1565b60405180910390fd5b5060008385612ccc9190614363565b9050809150509392505050565b612d448160405180606001604052806026815260200161477a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c759092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612dd7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204e90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e76919061385e565b60405180910390a3505050565b6000612e8e30611213565b90506000601054600e54600f54612ea59190613f61565b612eaf9190613f61565b9050600080831480612ec15750600082145b15612ece5750505061316f565b6014600b54612edd9190613d40565b831115612ef6576014600b54612ef39190613d40565b92505b6000600283600f5486612f099190613d40565b612f139190613d0f565b612f1d9190613d0f565b90506000612f34828661323690919063ffffffff16565b90506000479050612f4482613280565b6000612f59824761323690919063ffffffff16565b90506000612f8487612f76600e548561317190919063ffffffff16565b6131ec90919063ffffffff16565b90506000612faf88612fa16010548661317190919063ffffffff16565b6131ec90919063ffffffff16565b905060008183612fbf9190613f61565b84612fca9190614363565b90506000600f819055506000600e819055506000601081905550600087118015612ff45750600081115b1561303d5761300387826134cc565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051613034929190614397565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683476130829190614363565b60405161308e906143f1565b60006040518083038185875af1925050503d80600081146130cb576040519150601f19603f3d011682016040523d82523d6000602084013e6130d0565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161311c906143f1565b60006040518083038185875af1925050503d8060008114613159576040519150601f19603f3d011682016040523d82523d6000602084013e61315e565b606091505b505080985050505050505050505050505b565b60008083141561318457600090506131e6565b600082846131929190613d40565b90508284826131a19190613d0f565b146131e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d890614478565b60405180910390fd5b809150505b92915050565b600061322e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135b5565b905092915050565b600061327883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c75565b905092915050565b6000600267ffffffffffffffff81111561329d5761329c614498565b5b6040519080825280602002602001820160405280156132cb5781602001602082028036833780820191505090505b50905030816000815181106132e3576132e26144c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561338357600080fd5b505afa158015613397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133bb919061450b565b816001815181106133cf576133ce6144c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613434307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120b4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613496959493929190614631565b600060405180830381600087803b1580156134b057600080fd5b505af11580156134c4573d6000803e3d6000fd5b505050505050565b6134f7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120b4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161355c9695949392919061468b565b6060604051808303818588803b15801561357557600080fd5b505af1158015613589573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135ae9190614701565b5050505050565b600080831182906135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f391906136b1565b60405180910390fd5b506000838561360b9190613d0f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613652578082015181840152602081019050613637565b83811115613661576000848401525b50505050565b6000601f19601f8301169050919050565b600061368382613618565b61368d8185613623565b935061369d818560208601613634565b6136a681613667565b840191505092915050565b600060208201905081810360008301526136cb8184613678565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613703826136d8565b9050919050565b613713816136f8565b811461371e57600080fd5b50565b6000813590506137308161370a565b92915050565b6000819050919050565b61374981613736565b811461375457600080fd5b50565b60008135905061376681613740565b92915050565b60008060408385031215613783576137826136d3565b5b600061379185828601613721565b92505060206137a285828601613757565b9150509250929050565b60008115159050919050565b6137c1816137ac565b82525050565b60006020820190506137dc60008301846137b8565b92915050565b6000602082840312156137f8576137f76136d3565b5b600061380684828501613721565b91505092915050565b60008060408385031215613826576138256136d3565b5b600061383485828601613757565b925050602061384585828601613757565b9150509250929050565b61385881613736565b82525050565b6000602082019050613873600083018461384f565b92915050565b613882816137ac565b811461388d57600080fd5b50565b60008135905061389f81613879565b92915050565b6000602082840312156138bb576138ba6136d3565b5b60006138c984828501613890565b91505092915050565b6000806000606084860312156138eb576138ea6136d3565b5b60006138f986828701613721565b935050602061390a86828701613721565b925050604061391b86828701613757565b9150509250925092565b600060ff82169050919050565b61393b81613925565b82525050565b60006020820190506139566000830184613932565b92915050565b61396581613925565b811461397057600080fd5b50565b6000813590506139828161395c565b92915050565b60008060008060008060c087890312156139a5576139a46136d3565b5b60006139b389828a01613973565b96505060206139c489828a01613973565b95505060406139d589828a01613973565b94505060606139e689828a01613973565b93505060806139f789828a01613973565b92505060a0613a0889828a01613973565b9150509295509295509295565b613a1e816136f8565b82525050565b6000602082019050613a396000830184613a15565b92915050565b600060208284031215613a5557613a546136d3565b5b6000613a6384828501613757565b91505092915050565b60008060408385031215613a8357613a826136d3565b5b6000613a9185828601613721565b9250506020613aa285828601613890565b9150509250929050565b600061010082019050613ac2600083018b613932565b613acf602083018a613932565b613adc6040830189613932565b613ae96060830188613932565b613af66080830187613932565b613b0360a0830186613932565b613b1060c0830185613932565b613b1d60e0830184613932565b9998505050505050505050565b60008060408385031215613b4157613b406136d3565b5b6000613b4f85828601613721565b9250506020613b6085828601613721565b9150509250929050565b6000819050919050565b6000613b8f613b8a613b85846136d8565b613b6a565b6136d8565b9050919050565b6000613ba182613b74565b9050919050565b6000613bb382613b96565b9050919050565b613bc381613ba8565b82525050565b6000602082019050613bde6000830184613bba565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c2b57607f821691505b60208210811415613c3f57613c3e613be4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c7b602083613623565b9150613c8682613c45565b602082019050919050565b60006020820190508181036000830152613caa81613c6e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d1a82613736565b9150613d2583613736565b925082613d3557613d34613cb1565b5b828204905092915050565b6000613d4b82613736565b9150613d5683613736565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8f57613d8e613ce0565b5b828202905092915050565b7f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60008201527f2031250000000000000000000000000000000000000000000000000000000000602082015250565b6000613df6602383613623565b9150613e0182613d9a565b604082019050919050565b60006020820190508181036000830152613e2581613de9565b9050919050565b7f6d617853656c6c416d6f756e74206d757374206265206869676865722074686160008201527f6e20312500000000000000000000000000000000000000000000000000000000602082015250565b6000613e88602483613623565b9150613e9382613e2c565b604082019050919050565b60006020820190508181036000830152613eb781613e7b565b9050919050565b6000613ec982613925565b9150613ed483613925565b92508260ff03821115613eea57613ee9613ce0565b5b828201905092915050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613f2b601d83613623565b9150613f3682613ef5565b602082019050919050565b60006020820190508181036000830152613f5a81613f1e565b9050919050565b6000613f6c82613736565b9150613f7783613736565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fac57613fab613ce0565b5b828201905092915050565b7f4d757374206b65657020756e6973776170563250616972000000000000000000600082015250565b6000613fed601783613623565b9150613ff882613fb7565b602082019050919050565b6000602082019050818103600083015261401c81613fe0565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061407f602283613623565b915061408a82614023565b604082019050919050565b600060208201905081810360008301526140ae81614072565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614111602683613623565b915061411c826140b5565b604082019050919050565b6000602082019050818103600083015261414081614104565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061417d601b83613623565b915061418882614147565b602082019050919050565b600060208201905081810360008301526141ac81614170565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141e9601683613623565b91506141f4826141b3565b602082019050919050565b60006020820190508181036000830152614218816141dc565b9050919050565b7f627579207472616e73666572206f766572206d617820616d6f756e7400000000600082015250565b6000614255601c83613623565b91506142608261421f565b602082019050919050565b6000602082019050818103600083015261428481614248565b9050919050565b7f53656c6c207472616e73666572206f766572206d617820616d6f756e74000000600082015250565b60006142c1601d83613623565b91506142cc8261428b565b602082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061432d601383613623565b9150614338826142f7565b602082019050919050565b6000602082019050818103600083015261435c81614320565b9050919050565b600061436e82613736565b915061437983613736565b92508282101561438c5761438b613ce0565b5b828203905092915050565b60006040820190506143ac600083018561384f565b6143b9602083018461384f565b9392505050565b600081905092915050565b50565b60006143db6000836143c0565b91506143e6826143cb565b600082019050919050565b60006143fc826143ce565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614462602183613623565b915061446d82614406565b604082019050919050565b6000602082019050818103600083015261449181614455565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506145058161370a565b92915050565b600060208284031215614521576145206136d3565b5b600061452f848285016144f6565b91505092915050565b6000819050919050565b600061455d61455861455384614538565b613b6a565b613736565b9050919050565b61456d81614542565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145a8816136f8565b82525050565b60006145ba838361459f565b60208301905092915050565b6000602082019050919050565b60006145de82614573565b6145e8818561457e565b93506145f38361458f565b8060005b8381101561462457815161460b88826145ae565b9750614616836145c6565b9250506001810190506145f7565b5085935050505092915050565b600060a082019050614646600083018861384f565b6146536020830187614564565b818103604083015261466581866145d3565b90506146746060830185613a15565b614681608083018461384f565b9695505050505050565b600060c0820190506146a06000830189613a15565b6146ad602083018861384f565b6146ba6040830187614564565b6146c76060830186614564565b6146d46080830185613a15565b6146e160a083018461384f565b979650505050505050565b6000815190506146fb81613740565b92915050565b60008060006060848603121561471a576147196136d3565b5b6000614728868287016146ec565b9350506020614739868287016146ec565b925050604061474a868287016146ec565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212205ea287e4712db2343c800e96b792909ea099d5aebc85812c26adee79083f08e164736f6c63430008090033

Deployed Bytecode Sourcemap

20670:12831:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4245:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6405:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22043:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25039:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5362:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21827:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25874:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21787:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7055:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5205:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25983:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7818:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20798:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27630:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24871:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21170:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5532:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13342:148;;;;;;;;;;;;;:::i;:::-;;27112:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12701:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4463:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22113:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21867:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8538:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5871:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21208:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24654:143;;;;;;;;;;;;;:::i;:::-;;26822:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27266:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25507:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21515:251;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;27453:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6108:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26960:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13645:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22329:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20749;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4245:99;4298:13;4331:5;4324:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4245:99;:::o;6405:168::-;6487:4;6504:39;6513:12;:10;:12::i;:::-;6527:7;6536:6;6504:8;:39::i;:::-;6561:4;6554:11;;6405:168;;;;:::o;22043:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25039:458::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25201:3:::1;25185:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25175:4;25162:9;25146:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25145:34;;;;:::i;:::-;25144:61;;25136:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;25322:3;25306:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25296:4;25282:10;25266:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25265:35;;;;:::i;:::-;25264:62;;25256:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25423:4;25410:9;25394:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25393:34;;;;:::i;:::-;25378:12;:49;;;;25485:4;25471:10;25455:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25454:35;;;;:::i;:::-;25438:13;:51;;;;25039:458:::0;;:::o;5362:107::-;5422:7;5449:12;;5442:19;;5362:107;:::o;21827:33::-;;;;:::o;25874:101::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25960:7:::1;25946:11;;:21;;;;;;;;;;;;;;;;;;25874:101:::0;:::o;21787:33::-;;;;:::o;7055:354::-;7194:4;7211:36;7221:6;7229:9;7240:6;7211:9;:36::i;:::-;7258:121;7267:6;7275:12;:10;:12::i;:::-;7289:89;7327:6;7289:89;;;;;;;;;;;;;;;;;:11;:19;7301:6;7289:19;;;;;;;;;;;;;;;:33;7309:12;:10;:12::i;:::-;7289:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7258:8;:121::i;:::-;7397:4;7390:11;;7055:354;;;;;:::o;5205:92::-;5262:5;5287:2;5280:9;;5205:92;:::o;25983:827::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26188:16:::1;26164:5;:21;;;:40;;;;;;;;;;;;;;;;;;26239:16;26215:5;:21;;;:40;;;;;;;;;;;;;;;;;;26284:10;26266:5;:15;;;:28;;;;;;;;;;;;;;;;;;26374:5;:15;;;;;;;;;;;;26350:5;:21;;;;;;;;;;;;26326:5;:21;;;;;;;;;;;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;26305:5;:18;;;:84;;;;;;;;;;;;;;;;;;26427:17;26402:5;:22;;;:42;;;;;;;;;;;;;;;;;;26480:17;26455:5;:22;;;:42;;;;;;;;;;;;;;;;;;26527:11;26508:5;:16;;;:30;;;;;;;;;;;;;;;;;;26621:5;:16;;;;;;;;;;;;26596:5;:22;;;;;;;;;;;;26571:5;:22;;;;;;;;;;;;:47;;;;:::i;:::-;:66;;;;:::i;:::-;26549:5;:19;;;:88;;;;;;;;;;;;;;;;;;26678:2;26656:5;:18;;;;;;;;;;;;:24;;;;26648:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26759:2;26736:5;:19;;;;;;;;;;;;:25;;;;26728:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25983:827:::0;;;;;;:::o;7818:217::-;7905:4;7922:83;7931:12;:10;:12::i;:::-;7945:7;7954:50;7993:10;7954:11;:25;7966:12;:10;:12::i;:::-;7954:25;;;;;;;;;;;;;;;:34;7980:7;7954:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7922:8;:83::i;:::-;8023:4;8016:11;;7818:217;;;;:::o;20798:38::-;;;:::o;27630:125::-;27695:4;27719:19;:28;27739:7;27719:28;;;;;;;;;;;;;;;;;;;;;;;;;27712:35;;27630:125;;;:::o;24871:158::-;24952:4;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24990:9:::1;24968:19;:31;;;;25017:4;25010:11;;24871:158:::0;;;:::o;21170:31::-;;;;;;;;;;;;;:::o;5532:126::-;5605:7;5632:9;:18;5642:7;5632:18;;;;;;;;;;;;;;;;5625:25;;5532:126;;;:::o;13342:148::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13449:1:::1;13412:40;;13433:6;;;;;;;;;;;13412:40;;;;;;;;;;;;13480:1;13463:6;;:19;;;;;;;;;;;;;;;;;;13342:148::o:0;27112:144::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27244:4:::1;27202:31;:39;27234:6;27202:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27112:144:::0;;:::o;12701:78::-;12738:7;12765:6;;;;;;;;;;;12758:13;;12701:78;:::o;4463:103::-;4518:13;4551:7;4544:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4463:103;:::o;22113:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21867:27::-;;;;:::o;8538:268::-;8630:4;8647:129;8656:12;:10;:12::i;:::-;8670:7;8679:96;8718:15;8679:96;;;;;;;;;;;;;;;;;:11;:25;8691:12;:10;:12::i;:::-;8679:25;;;;;;;;;;;;;;;:34;8705:7;8679:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8647:8;:129::i;:::-;8794:4;8787:11;;8538:268;;;;:::o;5871:174::-;5956:4;5973:42;5983:12;:10;:12::i;:::-;5997:9;6008:6;5973:9;:42::i;:::-;6033:4;6026:11;;5871:174;;;;:::o;21208:22::-;;;;;;;;;;;;;:::o;24654:143::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24719:4:::1;24707:9;;:16;;;;;;;;;;;;;;;;;;24748:4;24734:11;;:18;;;;;;;;;;;;;;;;;;24788:1;24773:12;:16;;;;:::i;:::-;24763:7;:26;;;;24654:143::o:0;26822:132::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26938:8:::1;26907:19;:28;26927:7;26907:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26822:132:::0;;:::o;27266:177::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27359:13:::1;27351:21;;:4;:21;;;;27343:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27430:5;27411:10;:16;27422:4;27411:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;27266:177:::0;;:::o;25507:271::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25660:3:::1;25644:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25634:4;25617:13;25601;:11;:13::i;:::-;:29;;;;:::i;:::-;25600:38;;;;:::i;:::-;25599:65;;25591:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;25766:4;25749:13;25733;:11;:13::i;:::-;:29;;;;:::i;:::-;25732:38;;;;:::i;:::-;25714:15;:56;;;;25507:271:::0;:::o;21515:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27453:169::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27565:16:::1;27547:15;;:34;;;;;;;;;;;;;;;;;;27604:10;27592:9;;:22;;;;;;;;;;;;;;;;;;27453:169:::0;;:::o;6108:150::-;6196:7;6223:11;:18;6235:5;6223:18;;;;;;;;;;;;;;;:27;6242:7;6223:27;;;;;;;;;;;;;;;;6216:34;;6108:150;;;;:::o;26960:146::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27090:8:::1;27052:26;:35;27079:7;27052:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26960:146:::0;;:::o;13645:244::-;12922:12;:10;:12::i;:::-;12912:22;;:6;;;;;;;;;;;:22;;;12904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13754:1:::1;13734:22;;:8;:22;;;;13726:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13844:8;13815:38;;13836:6;;;;;;;;;;;13815:38;;;;;;;;;;;;13873:8;13864:6;;:17;;;;;;;;;;;;;;;;;;13645:244:::0;:::o;22329:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20749:::-;;;:::o;10966:180::-;11023:7;11043:9;11059:1;11055;:5;;;;:::i;:::-;11043:17;;11084:1;11079;:6;;11071:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11137:1;11130:8;;;10966:180;;;;:::o;3315:97::-;3367:7;3394:10;3387:17;;3315:97;:::o;10701:220::-;10859:6;10829:11;:18;10841:5;10829:18;;;;;;;;;;;;;;;:27;10848:7;10829:27;;;;;;;;;;;;;;;:36;;;;10897:7;10881:32;;10890:5;10881:32;;;10906:6;10881:32;;;;;;:::i;:::-;;;;;;;;10701:220;;;:::o;27763:3240::-;27920:1;27910:6;:11;27906:102;;;27938:37;27954:6;27962:9;27973:1;27938:15;:37::i;:::-;27990:7;;27906:102;28048:7;:5;:7::i;:::-;28038:17;;:6;:17;;;;:54;;;;;28085:7;:5;:7::i;:::-;28072:20;;:9;:20;;;;28038:54;:82;;;;;28110:10;;;;;;;;;;;28109:11;28038:82;28020:838;;;28154:9;;;;;;;;;;;28149:147;;28192:19;:27;28212:6;28192:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;28223:19;:30;28243:9;28223:30;;;;;;;;;;;;;;;;;;;;;;;;;28192:61;28184:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28149:147;28314:10;:18;28325:6;28314:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28337:31;:42;28369:9;28337:42;;;;;;;;;;;;;;;;;;;;;;;;;28336:43;28314:65;28310:360;;;28418:12;;28408:6;:22;;28400:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28310:360;;;28503:10;:21;28514:9;28503:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28529:31;:39;28561:6;28529:39;;;;;;;;;;;;;;;;;;;;;;;;;28528:40;28503:65;28499:171;;;28607:13;;28597:6;:23;;28589:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28499:171;28310:360;28691:26;:37;28718:9;28691:37;;;;;;;;;;;;;;;;;;;;;;;;;28686:159;;28790:15;;28766:20;28776:9;28766;:20::i;:::-;28757:6;:29;;;;:::i;:::-;:48;;28749:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28686:159;28020:838;28884:28;28915:24;28933:4;28915:9;:24::i;:::-;28884:55;;28953:12;28992:19;;28968:20;:43;;28953:58;;29042:7;:35;;;;;29066:11;;;;;;;;;;;29042:35;:63;;;;;29095:10;;;;;;;;;;;29094:11;29042:63;:101;;;;;29122:10;:21;29133:9;29122:21;;;;;;;;;;;;;;;;;;;;;;;;;29042:101;:146;;;;;29161:19;:27;29181:6;29161:27;;;;;;;;;;;;;;;;;;;;;;;;;29160:28;29042:146;:194;;;;;29206:19;:30;29226:9;29206:30;;;;;;;;;;;;;;;;;;;;;;;;;29205:31;29042:194;29024:326;;;29276:4;29263:10;;:17;;;;;;;;;;;;;;;;;;29295:10;:8;:10::i;:::-;29333:5;29320:10;;:18;;;;;;;;;;;;;;;;;;29024:326;29363:12;29379:10;;;;;;;;;;;29378:11;29363:26;;29491:19;:27;29511:6;29491:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;29522:19;:30;29542:9;29522:30;;;;;;;;;;;;;;;;;;;;;;;;;29491:61;29487:109;;;29579:5;29569:15;;29487:109;29697:7;29693:1248;;;29721:12;29770:7;;29755:12;:22;29752:1036;;;29805:23;29824:3;29805:14;29816:2;29805:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;29798:30;;29883:2;29877;29870:4;:9;;;;:::i;:::-;29869:16;;;;:::i;:::-;29847:18;;:38;;;;;;;:::i;:::-;;;;;;;;29933:2;29928:1;29921:4;:8;;;;:::i;:::-;29920:15;;;;:::i;:::-;29904:12;;:31;;;;;;;:::i;:::-;;;;;;;;29752:1036;;;29961:10;:21;29972:9;29961:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;30008:1;29986:5;:19;;;;;;;;;;;;:23;;;29961:48;29957:831;;;30037:40;30073:3;30037:31;30048:5;:19;;;;;;;;;;;;30037:31;;:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30030:47;;30150:5;:19;;;;;;;;;;;;30118:51;;30125:5;:22;;;;;;;;;;;;30118:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30096:18;;:73;;;;;;;:::i;:::-;;;;;;;;30242:5;:19;;;;;;;;;;;;30210:51;;30217:5;:22;;;;;;;;;;;;30210:29;;:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30188:18;;:73;;;;;;;:::i;:::-;;;;;;;;30322:5;:19;;;;;;;;;;;;30296:45;;30303:5;:16;;;;;;;;;;;;30296:23;;:4;:23;;;;:::i;:::-;:45;;;;:::i;:::-;30280:12;;:61;;;;;;;:::i;:::-;;;;;;;;29957:831;;;30403:10;:18;30414:6;30403:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;30446:1;30425:5;:18;;;;;;;;;;;;:22;;;30403:44;30399:389;;;30475:39;30510:3;30475:30;30486:5;:18;;;;;;;;;;;;30475:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30468:46;;30586:5;:18;;;;;;;;;;;;30555:49;;30562:5;:21;;;;;;;;;;;;30555:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30533:18;;:71;;;;;;;:::i;:::-;;;;;;;;30676:5;:18;;;;;;;;;;;;30645:49;;30652:5;:21;;;;;;;;;;;;30645:28;;:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30623:18;;:71;;;;;;;:::i;:::-;;;;;;;;30754:5;:18;;;;;;;;;;;;30729:43;;30736:5;:15;;;;;;;;;;;;30729:22;;:4;:22;;;;:::i;:::-;:43;;;;:::i;:::-;30713:12;;:59;;;;;;;:::i;:::-;;;;;;;;30399:389;29957:831;29752:1036;30815:1;30808:4;:8;30804:93;;;30837:44;30853:6;30869:4;30876;30837:15;:44::i;:::-;30804:93;30923:4;30913:14;;;;;:::i;:::-;;;29706:1235;29693:1248;30953:42;30969:6;30977:9;30988:6;30953:15;:42::i;:::-;27885:3118;;;27763:3240;;;;:::o;11307:191::-;11392:7;11425:1;11420;:6;;11428:12;11412:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11452:9;11468:1;11464;:5;;;;:::i;:::-;11452:17;;11489:1;11482:8;;;11307:191;;;;;:::o;9296:358::-;9458:71;9480:6;9458:71;;;;;;;;;;;;;;;;;:9;:17;9468:6;9458:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9438:9;:17;9448:6;9438:17;;;;;;;;;;;;;;;:91;;;;9563:32;9588:6;9563:9;:20;9573:9;9563:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9540:9;:20;9550:9;9540:20;;;;;;;;;;;;;;;:55;;;;9628:9;9611:35;;9620:6;9611:35;;;9639:6;9611:35;;;;;;:::i;:::-;;;;;;;;9296:358;;;:::o;31931:1565::-;31970:28;32001:24;32019:4;32001:9;:24::i;:::-;31970:55;;32036:14;32095:12;;32074:18;;32053;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;32036:71;;32118:12;32171:1;32147:20;:25;:40;;;;32186:1;32176:6;:11;32147:40;32143:57;;;32191:7;;;;;32143:57;32261:2;32239:19;;:24;;;;:::i;:::-;32216:20;:47;32212:127;;;32325:2;32303:19;;:24;;;;:::i;:::-;32280:47;;32212:127;32400:23;32479:1;32470:6;32449:18;;32426:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32400:80;;32491:26;32520:41;32545:15;32520:20;:24;;:41;;;;:::i;:::-;32491:70;;32575:25;32603:21;32575:49;;32637:36;32654:18;32637:16;:36::i;:::-;32688:18;32709:44;32735:17;32709:21;:25;;:44;;;;:::i;:::-;32688:65;;32767:23;32793:46;32832:6;32793:34;32808:18;;32793:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;32767:72;;32850:17;32870:40;32903:6;32870:28;32885:12;;32870:10;:14;;:28;;;;:::i;:::-;:32;;:40;;;;:::i;:::-;32850:60;;32921:23;32979:9;32961:15;:27;;;;:::i;:::-;32947:10;:42;;;;:::i;:::-;32921:68;;33025:1;33004:18;:22;;;;33058:1;33037:18;:22;;;;33085:1;33070:12;:16;;;;33123:1;33105:15;:19;:42;;;;;33146:1;33128:15;:19;33105:42;33101:192;;;33164:46;33177:15;33194;33164:12;:46::i;:::-;33230:51;33245:18;33265:15;33230:51;;;;;;;:::i;:::-;;;;;;;;33101:192;33326:9;;;;;;;;;;;33318:23;;33375:15;33351:21;:39;;;;:::i;:::-;33318:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33305:93;;;;;33430:15;;;;;;;;;;;33422:29;;33460:21;33422:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33409:79;;;;;31959:1537;;;;;;;;;;31931:1565;:::o;11506:256::-;11563:7;11598:1;11593;:6;11589:47;;;11623:1;11616:8;;;;11589:47;11649:9;11665:1;11661;:5;;;;:::i;:::-;11649:17;;11694:1;11689;11685;:5;;;;:::i;:::-;:10;11677:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11753:1;11746:8;;;11506:256;;;;;:::o;11773:131::-;11830:7;11857:39;11861:1;11864;11857:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11850:46;;11773:131;;;;:::o;11159:135::-;11216:7;11243:43;11247:1;11250;11243:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11236:50;;11159:135;;;;:::o;31011:554::-;31135:21;31173:1;31159:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31135:40;;31204:4;31186;31191:1;31186:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31230:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31220:4;31225:1;31220:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31256:49;31273:4;31288:6;31297:7;31256:8;:49::i;:::-;31344:6;:57;;;31416:7;31438:1;31482:4;31509;31529:15;31344:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31062:503;31011:554;:::o;31573:350::-;31717:49;31734:4;31749:6;31758:7;31717:8;:49::i;:::-;31809:6;:22;;;31840:9;31861:4;31868:7;31877:1;31880;31892:4;31899:15;31809:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31573:350;;:::o;11916:277::-;12001:7;12033:1;12029;:5;12036:12;12021:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12060:9;12076:1;12072;:5;;;;:::i;:::-;12060:17;;12184:1;12177:8;;;11916:277;;;;;:::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;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:116::-;4731:21;4746:5;4731:21;:::i;:::-;4724:5;4721:32;4711:60;;4767:1;4764;4757:12;4711:60;4661:116;:::o;4783:133::-;4826:5;4864:6;4851:20;4842:29;;4880:30;4904:5;4880:30;:::i;:::-;4783:133;;;;:::o;4922:323::-;4978:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:119;;;5033:79;;:::i;:::-;4995:119;5153:1;5178:50;5220:7;5211:6;5200:9;5196:22;5178:50;:::i;:::-;5168:60;;5124:114;4922:323;;;;:::o;5251:619::-;5328:6;5336;5344;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5490:117;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5251:619;;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:118::-;6377:22;6393:5;6377:22;:::i;:::-;6370:5;6367:33;6357:61;;6414:1;6411;6404:12;6357:61;6306:118;:::o;6430:135::-;6474:5;6512:6;6499:20;6490:29;;6528:31;6553:5;6528:31;:::i;:::-;6430:135;;;;:::o;6571:1033::-;6663:6;6671;6679;6687;6695;6703;6752:3;6740:9;6731:7;6727:23;6723:33;6720:120;;;6759:79;;:::i;:::-;6720:120;6879:1;6904:51;6947:7;6938:6;6927:9;6923:22;6904:51;:::i;:::-;6894:61;;6850:115;7004:2;7030:51;7073:7;7064:6;7053:9;7049:22;7030:51;:::i;:::-;7020:61;;6975:116;7130:2;7156:51;7199:7;7190:6;7179:9;7175:22;7156:51;:::i;:::-;7146:61;;7101:116;7256:2;7282:51;7325:7;7316:6;7305:9;7301:22;7282:51;:::i;:::-;7272:61;;7227:116;7382:3;7409:51;7452:7;7443:6;7432:9;7428:22;7409:51;:::i;:::-;7399:61;;7353:117;7509:3;7536:51;7579:7;7570:6;7559:9;7555:22;7536:51;:::i;:::-;7526:61;;7480:117;6571:1033;;;;;;;;:::o;7610:118::-;7697:24;7715:5;7697:24;:::i;:::-;7692:3;7685:37;7610:118;;:::o;7734:222::-;7827:4;7865:2;7854:9;7850:18;7842:26;;7878:71;7946:1;7935:9;7931:17;7922:6;7878:71;:::i;:::-;7734:222;;;;:::o;7962:329::-;8021:6;8070:2;8058:9;8049:7;8045:23;8041:32;8038:119;;;8076:79;;:::i;:::-;8038:119;8196:1;8221:53;8266:7;8257:6;8246:9;8242:22;8221:53;:::i;:::-;8211:63;;8167:117;7962:329;;;;:::o;8297:468::-;8362:6;8370;8419:2;8407:9;8398:7;8394:23;8390:32;8387:119;;;8425:79;;:::i;:::-;8387:119;8545:1;8570:53;8615:7;8606:6;8595:9;8591:22;8570:53;:::i;:::-;8560:63;;8516:117;8672:2;8698:50;8740:7;8731:6;8720:9;8716:22;8698:50;:::i;:::-;8688:60;;8643:115;8297:468;;;;;:::o;8771:933::-;9028:4;9066:3;9055:9;9051:19;9043:27;;9080:67;9144:1;9133:9;9129:17;9120:6;9080:67;:::i;:::-;9157:68;9221:2;9210:9;9206:18;9197:6;9157:68;:::i;:::-;9235;9299:2;9288:9;9284:18;9275:6;9235:68;:::i;:::-;9313;9377:2;9366:9;9362:18;9353:6;9313:68;:::i;:::-;9391:69;9455:3;9444:9;9440:19;9431:6;9391:69;:::i;:::-;9470;9534:3;9523:9;9519:19;9510:6;9470:69;:::i;:::-;9549;9613:3;9602:9;9598:19;9589:6;9549:69;:::i;:::-;9628;9692:3;9681:9;9677:19;9668:6;9628:69;:::i;:::-;8771:933;;;;;;;;;;;:::o;9710:474::-;9778:6;9786;9835:2;9823:9;9814:7;9810:23;9806:32;9803:119;;;9841:79;;:::i;:::-;9803:119;9961:1;9986:53;10031:7;10022:6;10011:9;10007:22;9986:53;:::i;:::-;9976:63;;9932:117;10088:2;10114:53;10159:7;10150:6;10139:9;10135:22;10114:53;:::i;:::-;10104:63;;10059:118;9710:474;;;;;:::o;10190:60::-;10218:3;10239:5;10232:12;;10190:60;;;:::o;10256:142::-;10306:9;10339:53;10357:34;10366:24;10384:5;10366:24;:::i;:::-;10357:34;:::i;:::-;10339:53;:::i;:::-;10326:66;;10256:142;;;:::o;10404:126::-;10454:9;10487:37;10518:5;10487:37;:::i;:::-;10474:50;;10404:126;;;:::o;10536:153::-;10613:9;10646:37;10677:5;10646:37;:::i;:::-;10633:50;;10536:153;;;:::o;10695:185::-;10809:64;10867:5;10809:64;:::i;:::-;10804:3;10797:77;10695:185;;:::o;10886:276::-;11006:4;11044:2;11033:9;11029:18;11021:26;;11057:98;11152:1;11141:9;11137:17;11128:6;11057:98;:::i;:::-;10886:276;;;;:::o;11168:180::-;11216:77;11213:1;11206:88;11313:4;11310:1;11303:15;11337:4;11334:1;11327:15;11354:320;11398:6;11435:1;11429:4;11425:12;11415:22;;11482:1;11476:4;11472:12;11503:18;11493:81;;11559:4;11551:6;11547:17;11537:27;;11493:81;11621:2;11613:6;11610:14;11590:18;11587:38;11584:84;;;11640:18;;:::i;:::-;11584:84;11405:269;11354:320;;;:::o;11680:182::-;11820:34;11816:1;11808:6;11804:14;11797:58;11680:182;:::o;11868:366::-;12010:3;12031:67;12095:2;12090:3;12031:67;:::i;:::-;12024:74;;12107:93;12196:3;12107:93;:::i;:::-;12225:2;12220:3;12216:12;12209:19;;11868:366;;;:::o;12240:419::-;12406:4;12444:2;12433:9;12429:18;12421:26;;12493:9;12487:4;12483:20;12479:1;12468:9;12464:17;12457:47;12521:131;12647:4;12521:131;:::i;:::-;12513:139;;12240:419;;;:::o;12665:180::-;12713:77;12710:1;12703:88;12810:4;12807:1;12800:15;12834:4;12831:1;12824:15;12851:180;12899:77;12896:1;12889:88;12996:4;12993:1;12986:15;13020:4;13017:1;13010:15;13037:185;13077:1;13094:20;13112:1;13094:20;:::i;:::-;13089:25;;13128:20;13146:1;13128:20;:::i;:::-;13123:25;;13167:1;13157:35;;13172:18;;:::i;:::-;13157:35;13214:1;13211;13207:9;13202:14;;13037:185;;;;:::o;13228:348::-;13268:7;13291:20;13309:1;13291:20;:::i;:::-;13286:25;;13325:20;13343:1;13325:20;:::i;:::-;13320:25;;13513:1;13445:66;13441:74;13438:1;13435:81;13430:1;13423:9;13416:17;13412:105;13409:131;;;13520:18;;:::i;:::-;13409:131;13568:1;13565;13561:9;13550:20;;13228:348;;;;:::o;13582:222::-;13722:34;13718:1;13710:6;13706:14;13699:58;13791:5;13786:2;13778:6;13774:15;13767:30;13582:222;:::o;13810:366::-;13952:3;13973:67;14037:2;14032:3;13973:67;:::i;:::-;13966:74;;14049:93;14138:3;14049:93;:::i;:::-;14167:2;14162:3;14158:12;14151:19;;13810:366;;;:::o;14182:419::-;14348:4;14386:2;14375:9;14371:18;14363:26;;14435:9;14429:4;14425:20;14421:1;14410:9;14406:17;14399:47;14463:131;14589:4;14463:131;:::i;:::-;14455:139;;14182:419;;;:::o;14607:223::-;14747:34;14743:1;14735:6;14731:14;14724:58;14816:6;14811:2;14803:6;14799:15;14792:31;14607:223;:::o;14836:366::-;14978:3;14999:67;15063:2;15058:3;14999:67;:::i;:::-;14992:74;;15075:93;15164:3;15075:93;:::i;:::-;15193:2;15188:3;15184:12;15177:19;;14836:366;;;:::o;15208:419::-;15374:4;15412:2;15401:9;15397:18;15389:26;;15461:9;15455:4;15451:20;15447:1;15436:9;15432:17;15425:47;15489:131;15615:4;15489:131;:::i;:::-;15481:139;;15208:419;;;:::o;15633:237::-;15671:3;15690:18;15706:1;15690:18;:::i;:::-;15685:23;;15722:18;15738:1;15722:18;:::i;:::-;15717:23;;15812:1;15806:4;15802:12;15799:1;15796:19;15793:45;;;15818:18;;:::i;:::-;15793:45;15862:1;15859;15855:9;15848:16;;15633:237;;;;:::o;15876:179::-;16016:31;16012:1;16004:6;16000:14;15993:55;15876:179;:::o;16061:366::-;16203:3;16224:67;16288:2;16283:3;16224:67;:::i;:::-;16217:74;;16300:93;16389:3;16300:93;:::i;:::-;16418:2;16413:3;16409:12;16402:19;;16061:366;;;:::o;16433:419::-;16599:4;16637:2;16626:9;16622:18;16614:26;;16686:9;16680:4;16676:20;16672:1;16661:9;16657:17;16650:47;16714:131;16840:4;16714:131;:::i;:::-;16706:139;;16433:419;;;:::o;16858:305::-;16898:3;16917:20;16935:1;16917:20;:::i;:::-;16912:25;;16951:20;16969:1;16951:20;:::i;:::-;16946:25;;17105:1;17037:66;17033:74;17030:1;17027:81;17024:107;;;17111:18;;:::i;:::-;17024:107;17155:1;17152;17148:9;17141:16;;16858:305;;;;:::o;17169:173::-;17309:25;17305:1;17297:6;17293:14;17286:49;17169:173;:::o;17348:366::-;17490:3;17511:67;17575:2;17570:3;17511:67;:::i;:::-;17504:74;;17587:93;17676:3;17587:93;:::i;:::-;17705:2;17700:3;17696:12;17689:19;;17348:366;;;:::o;17720:419::-;17886:4;17924:2;17913:9;17909:18;17901:26;;17973:9;17967:4;17963:20;17959:1;17948:9;17944:17;17937:47;18001:131;18127:4;18001:131;:::i;:::-;17993:139;;17720:419;;;:::o;18145:221::-;18285:34;18281:1;18273:6;18269:14;18262:58;18354:4;18349:2;18341:6;18337:15;18330:29;18145:221;:::o;18372:366::-;18514:3;18535:67;18599:2;18594:3;18535:67;:::i;:::-;18528:74;;18611:93;18700:3;18611:93;:::i;:::-;18729:2;18724:3;18720:12;18713:19;;18372:366;;;:::o;18744:419::-;18910:4;18948:2;18937:9;18933:18;18925:26;;18997:9;18991:4;18987:20;18983:1;18972:9;18968:17;18961:47;19025:131;19151:4;19025:131;:::i;:::-;19017:139;;18744:419;;;:::o;19169:225::-;19309:34;19305:1;19297:6;19293:14;19286:58;19378:8;19373:2;19365:6;19361:15;19354:33;19169:225;:::o;19400:366::-;19542:3;19563:67;19627:2;19622:3;19563:67;:::i;:::-;19556:74;;19639:93;19728:3;19639:93;:::i;:::-;19757:2;19752:3;19748:12;19741:19;;19400:366;;;:::o;19772:419::-;19938:4;19976:2;19965:9;19961:18;19953:26;;20025:9;20019:4;20015:20;20011:1;20000:9;19996:17;19989:47;20053:131;20179:4;20053:131;:::i;:::-;20045:139;;19772:419;;;:::o;20197:177::-;20337:29;20333:1;20325:6;20321:14;20314:53;20197:177;:::o;20380:366::-;20522:3;20543:67;20607:2;20602:3;20543:67;:::i;:::-;20536:74;;20619:93;20708:3;20619:93;:::i;:::-;20737:2;20732:3;20728:12;20721:19;;20380:366;;;:::o;20752:419::-;20918:4;20956:2;20945:9;20941:18;20933:26;;21005:9;20999:4;20995:20;20991:1;20980:9;20976:17;20969:47;21033:131;21159:4;21033:131;:::i;:::-;21025:139;;20752:419;;;:::o;21177:172::-;21317:24;21313:1;21305:6;21301:14;21294:48;21177:172;:::o;21355:366::-;21497:3;21518:67;21582:2;21577:3;21518:67;:::i;:::-;21511:74;;21594:93;21683:3;21594:93;:::i;:::-;21712:2;21707:3;21703:12;21696:19;;21355:366;;;:::o;21727:419::-;21893:4;21931:2;21920:9;21916:18;21908:26;;21980:9;21974:4;21970:20;21966:1;21955:9;21951:17;21944:47;22008:131;22134:4;22008:131;:::i;:::-;22000:139;;21727:419;;;:::o;22152:178::-;22292:30;22288:1;22280:6;22276:14;22269:54;22152:178;:::o;22336:366::-;22478:3;22499:67;22563:2;22558:3;22499:67;:::i;:::-;22492:74;;22575:93;22664:3;22575:93;:::i;:::-;22693:2;22688:3;22684:12;22677:19;;22336:366;;;:::o;22708:419::-;22874:4;22912:2;22901:9;22897:18;22889:26;;22961:9;22955:4;22951:20;22947:1;22936:9;22932:17;22925:47;22989:131;23115:4;22989:131;:::i;:::-;22981:139;;22708:419;;;:::o;23133:179::-;23273:31;23269:1;23261:6;23257:14;23250:55;23133:179;:::o;23318:366::-;23460:3;23481:67;23545:2;23540:3;23481:67;:::i;:::-;23474:74;;23557:93;23646:3;23557:93;:::i;:::-;23675:2;23670:3;23666:12;23659:19;;23318:366;;;:::o;23690:419::-;23856:4;23894:2;23883:9;23879:18;23871:26;;23943:9;23937:4;23933:20;23929:1;23918:9;23914:17;23907:47;23971:131;24097:4;23971:131;:::i;:::-;23963:139;;23690:419;;;:::o;24115:169::-;24255:21;24251:1;24243:6;24239:14;24232:45;24115:169;:::o;24290:366::-;24432:3;24453:67;24517:2;24512:3;24453:67;:::i;:::-;24446:74;;24529:93;24618:3;24529:93;:::i;:::-;24647:2;24642:3;24638:12;24631:19;;24290:366;;;:::o;24662:419::-;24828:4;24866:2;24855:9;24851:18;24843:26;;24915:9;24909:4;24905:20;24901:1;24890:9;24886:17;24879:47;24943:131;25069:4;24943:131;:::i;:::-;24935:139;;24662:419;;;:::o;25087:191::-;25127:4;25147:20;25165:1;25147:20;:::i;:::-;25142:25;;25181:20;25199:1;25181:20;:::i;:::-;25176:25;;25220:1;25217;25214:8;25211:34;;;25225:18;;:::i;:::-;25211:34;25270:1;25267;25263:9;25255:17;;25087:191;;;;:::o;25284:332::-;25405:4;25443:2;25432:9;25428:18;25420:26;;25456:71;25524:1;25513:9;25509:17;25500:6;25456:71;:::i;:::-;25537:72;25605:2;25594:9;25590:18;25581:6;25537:72;:::i;:::-;25284:332;;;;;:::o;25622:147::-;25723:11;25760:3;25745:18;;25622:147;;;;:::o;25775:114::-;;:::o;25895:398::-;26054:3;26075:83;26156:1;26151:3;26075:83;:::i;:::-;26068:90;;26167:93;26256:3;26167:93;:::i;:::-;26285:1;26280:3;26276:11;26269:18;;25895:398;;;:::o;26299:379::-;26483:3;26505:147;26648:3;26505:147;:::i;:::-;26498:154;;26669:3;26662:10;;26299:379;;;:::o;26684:220::-;26824:34;26820:1;26812:6;26808:14;26801:58;26893:3;26888:2;26880:6;26876:15;26869:28;26684:220;:::o;26910:366::-;27052:3;27073:67;27137:2;27132:3;27073:67;:::i;:::-;27066:74;;27149:93;27238:3;27149:93;:::i;:::-;27267:2;27262:3;27258:12;27251:19;;26910:366;;;:::o;27282:419::-;27448:4;27486:2;27475:9;27471:18;27463:26;;27535:9;27529:4;27525:20;27521:1;27510:9;27506:17;27499:47;27563:131;27689:4;27563:131;:::i;:::-;27555:139;;27282:419;;;:::o;27707:180::-;27755:77;27752:1;27745:88;27852:4;27849:1;27842:15;27876:4;27873:1;27866:15;27893:180;27941:77;27938:1;27931:88;28038:4;28035:1;28028:15;28062:4;28059:1;28052:15;28079:143;28136:5;28167:6;28161:13;28152:22;;28183:33;28210:5;28183:33;:::i;:::-;28079:143;;;;:::o;28228:351::-;28298:6;28347:2;28335:9;28326:7;28322:23;28318:32;28315:119;;;28353:79;;:::i;:::-;28315:119;28473:1;28498:64;28554:7;28545:6;28534:9;28530:22;28498:64;:::i;:::-;28488:74;;28444:128;28228:351;;;;:::o;28585:85::-;28630:7;28659:5;28648:16;;28585:85;;;:::o;28676:158::-;28734:9;28767:61;28785:42;28794:32;28820:5;28794:32;:::i;:::-;28785:42;:::i;:::-;28767:61;:::i;:::-;28754:74;;28676:158;;;:::o;28840:147::-;28935:45;28974:5;28935:45;:::i;:::-;28930:3;28923:58;28840:147;;:::o;28993:114::-;29060:6;29094:5;29088:12;29078:22;;28993:114;;;:::o;29113:184::-;29212:11;29246:6;29241:3;29234:19;29286:4;29281:3;29277:14;29262:29;;29113:184;;;;:::o;29303:132::-;29370:4;29393:3;29385:11;;29423:4;29418:3;29414:14;29406:22;;29303:132;;;:::o;29441:108::-;29518:24;29536:5;29518:24;:::i;:::-;29513:3;29506:37;29441:108;;:::o;29555:179::-;29624:10;29645:46;29687:3;29679:6;29645:46;:::i;:::-;29723:4;29718:3;29714:14;29700:28;;29555:179;;;;:::o;29740:113::-;29810:4;29842;29837:3;29833:14;29825:22;;29740:113;;;:::o;29889:732::-;30008:3;30037:54;30085:5;30037:54;:::i;:::-;30107:86;30186:6;30181:3;30107:86;:::i;:::-;30100:93;;30217:56;30267:5;30217:56;:::i;:::-;30296:7;30327:1;30312:284;30337:6;30334:1;30331:13;30312:284;;;30413:6;30407:13;30440:63;30499:3;30484:13;30440:63;:::i;:::-;30433:70;;30526:60;30579:6;30526:60;:::i;:::-;30516:70;;30372:224;30359:1;30356;30352:9;30347:14;;30312:284;;;30316:14;30612:3;30605:10;;30013:608;;;29889:732;;;;:::o;30627:831::-;30890:4;30928:3;30917:9;30913:19;30905:27;;30942:71;31010:1;30999:9;30995:17;30986:6;30942:71;:::i;:::-;31023:80;31099:2;31088:9;31084:18;31075:6;31023:80;:::i;:::-;31150:9;31144:4;31140:20;31135:2;31124:9;31120:18;31113:48;31178:108;31281:4;31272:6;31178:108;:::i;:::-;31170:116;;31296:72;31364:2;31353:9;31349:18;31340:6;31296:72;:::i;:::-;31378:73;31446:3;31435:9;31431:19;31422:6;31378:73;:::i;:::-;30627:831;;;;;;;;:::o;31464:807::-;31713:4;31751:3;31740:9;31736:19;31728:27;;31765:71;31833:1;31822:9;31818:17;31809:6;31765:71;:::i;:::-;31846:72;31914:2;31903:9;31899:18;31890:6;31846:72;:::i;:::-;31928:80;32004:2;31993:9;31989:18;31980:6;31928:80;:::i;:::-;32018;32094:2;32083:9;32079:18;32070:6;32018:80;:::i;:::-;32108:73;32176:3;32165:9;32161:19;32152:6;32108:73;:::i;:::-;32191;32259:3;32248:9;32244:19;32235:6;32191:73;:::i;:::-;31464:807;;;;;;;;;:::o;32277:143::-;32334:5;32365:6;32359:13;32350:22;;32381:33;32408:5;32381:33;:::i;:::-;32277:143;;;;:::o;32426:663::-;32514:6;32522;32530;32579:2;32567:9;32558:7;32554:23;32550:32;32547:119;;;32585:79;;:::i;:::-;32547:119;32705:1;32730:64;32786:7;32777:6;32766:9;32762:22;32730:64;:::i;:::-;32720:74;;32676:128;32843:2;32869:64;32925:7;32916:6;32905:9;32901:22;32869:64;:::i;:::-;32859:74;;32814:129;32982:2;33008:64;33064:7;33055:6;33044:9;33040:22;33008:64;:::i;:::-;32998:74;;32953:129;32426:663;;;;;:::o

Swarm Source

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