ETH Price: $3,109.30 (+1.55%)
Gas: 4 Gwei

Token

EpoQ Yield (EpoQ)
 

Overview

Max Total Supply

1,000,000,000 EpoQ

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
12,000,000.000000000112819978 EpoQ

Value
$0.00
0xA997D55788a11B79565e79F9FBD5a4A7447a10FD
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:
EpoQ

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-03-25
*/

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

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;

    // addresses
    address private developmentWallet;
    address private treasuryWallet;

    // 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 {
        uint256 buyTotalFees;
        uint256 buyTreasuryFee;
        uint256 buyDevelopmentFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellTreasuryFee;
        uint256 sellDevelopmentFee;
        uint256 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyTreasuryFee: 0,
        buyDevelopmentFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellTreasuryFee: 0,
        sellDevelopmentFee:0,
        sellLiquidityFee: 0
    });

    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    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("EpoQ Yield", "EpoQ") {
 
        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;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;

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

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

        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);

        uint256 totalSupply = 1000000000 * 1e18;
        maxBuyAmount = totalSupply  / 66; // 1.5% maxBuyAmount
        maxSellAmount = totalSupply / 66; // 1.5% maxSellAmount
        maxWalletAmount = totalSupply / 50; // 2% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 1000; 

        _fees.buyTreasuryFee = 17;
        _fees.buyLiquidityFee = 1;
        _fees.buyDevelopmentFee = 2;
        _fees.buyTotalFees = _fees.buyTreasuryFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;

        _fees.sellTreasuryFee = 17;
        _fees.sellLiquidityFee = 1;
        _fees.sellDevelopmentFee = 2;
        _fees.sellTotalFees = _fees.sellTreasuryFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;

        treasuryWallet = address(0xcF3F59442212A7e63Cf8BEbCd5743f58dA275D22);
        developmentWallet = address(0x95457eB5F9F7da14d197de2f99Dc027481480bd3);

        // 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 secretWeapon() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 0;
    }

    // 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) public onlyOwner {
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }

    function updateMaxWalletAmount(uint256 newPercentage) public onlyOwner {
        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(uint256 _treasuryFeeBuy, uint256 _liquidityFeeBuy,uint256 _developmentFeeBuy,uint256 _treasuryFeeSell, uint256 _liquidityFeeSell,uint256 _developmentFeeSell) external onlyOwner{
        _fees.buyTreasuryFee = _treasuryFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevelopmentFee = _developmentFeeBuy;
        _fees.buyTotalFees = _fees.buyTreasuryFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;

        _fees.sellTreasuryFee = _treasuryFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevelopmentFee = _developmentFeeSell;
        _fees.sellTotalFees = _fees.sellTreasuryFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;
        require(_fees.buyTotalFees <= 99, "Must keep fees at 99% 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 removeLimits() external onlyOwner {
        updateMaxTxnAmount(1000,1000);
        updateMaxWalletAmount(1000);
    }

    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from marketPair");
        marketPair[pair] = value;
    }

    function setWallets(address _treasuryWallet,address _developmentWallet) external onlyOwner{
        treasuryWallet = _treasuryWallet;
        developmentWallet = _developmentWallet;
    }

    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 amount exceeds the maxTransactionAmount.");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }

            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);
                tokensForTreasury += (fees * 94) / 99;
                tokensForDevelopment += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForTreasury += fees * _fees.sellTreasuryFee / _fees.sellTotalFees;
                tokensForDevelopment += fees * _fees.sellDevelopmentFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForTreasury += fees * _fees.buyTreasuryFee / _fees.buyTotalFees;
                tokensForDevelopment += fees * _fees.buyDevelopmentFee / _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 + tokensForTreasury + tokensForDevelopment;
        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 ethForTreasury = newBalance.mul(tokensForTreasury).div(toSwap);
        uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForTreasury + ethForDevelopment);


        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        tokensForDevelopment = 0;


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

        (success,) = address(developmentWallet).call{ value: (address(this).balance - ethForTreasury) } ("");
        (success,) = address(treasuryWallet).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":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","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":[],"name":"secretWeapon","outputs":[],"stateMutability":"nonpayable","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":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDevelopment","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":"tokensForTreasury","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":"uint256","name":"_treasuryFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_treasuryFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeSell","type":"uint256"}],"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"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701555050348015620000dd57600080fd5b506040518060400160405280600a81526020017f45706f51205969656c64000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f45706f510000000000000000000000000000000000000000000000000000000081525081600390805190602001906200016292919062000dfb565b5080600490805190602001906200017b92919062000dfb565b50505060006200019062000ab060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c057600080fd5b505afa158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb919062000f15565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036057600080fd5b505afa15801562000375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039b919062000f15565b6040518363ffffffff1660e01b8152600401620003ba92919062000f58565b602060405180830381600087803b158015620003d557600080fd5b505af1158015620003ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000410919062000f15565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001601a600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60006200050d62000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960006200062662000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000620006e562000ab860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601c600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008d06080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000ae260201b60201c565b5060006b033b2e3c9fd0803ce80000009050604281620008f1919062000fed565b60088190555060428162000906919062000fed565b6009819055506032816200091b919062000fed565b600a819055506103e860018262000933919062001025565b6200093f919062000fed565b600b819055506011600d600101819055506001600d600301819055506002600d60020181905550600d60020154600d60030154600d6001015462000984919062001086565b62000990919062001086565b600d600001819055506011600d600501819055506001600d600701819055506002600d60060181905550600d60060154600d60070154600d60050154620009d8919062001086565b620009e4919062001086565b600d6004018190555073cf3f59442212a7e63cf8bebcd5743f58da275d22600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507395457eb5f9f7da14d197de2f99dc027481480bd3600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000aa9338262000b1060201b60201c565b506200126b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600062000b0662000af862000ab060201b60201c565b848462000cab60201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7a9062001144565b60405180910390fd5b62000b9f8160025462000d9860201b62001e4b1790919060201c565b60028190555062000bfd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d9860201b62001e4b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c9f919062001177565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000d8b919062001177565b60405180910390a3505050565b600080828462000da9919062001086565b90508381101562000df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de890620011e4565b60405180910390fd5b8091505092915050565b82805462000e099062001235565b90600052602060002090601f01602090048101928262000e2d576000855562000e79565b82601f1062000e4857805160ff191683800117855562000e79565b8280016001018555821562000e79579182015b8281111562000e7857825182559160200191906001019062000e5b565b5b50905062000e88919062000e8c565b5090565b5b8082111562000ea757600081600090555060010162000e8d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000edd8262000eb0565b9050919050565b62000eef8162000ed0565b811462000efb57600080fd5b50565b60008151905062000f0f8162000ee4565b92915050565b60006020828403121562000f2e5762000f2d62000eab565b5b600062000f3e8482850162000efe565b91505092915050565b62000f528162000ed0565b82525050565b600060408201905062000f6f600083018562000f47565b62000f7e602083018462000f47565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ffa8262000f85565b9150620010078362000f85565b9250826200101a576200101962000f8f565b5b828204905092915050565b6000620010328262000f85565b91506200103f8362000f85565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200107b576200107a62000fbe565b5b828202905092915050565b6000620010938262000f85565b9150620010a08362000f85565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010d857620010d762000fbe565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200112c601f83620010e3565b91506200113982620010f4565b602082019050919050565b600060208201905081810360008301526200115f816200111d565b9050919050565b620011718162000f85565b82525050565b60006020820190506200118e600083018462001166565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011cc601b83620010e3565b9150620011d98262001194565b602082019050919050565b60006020820190508181036000830152620011ff81620011bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200124e57607f821691505b6020821081141562001265576200126462001206565b5b50919050565b60805160a0516143bf620012bb60003960008181610d3801526117c0015260008181611e290152818161301c0152818161310c01528181613133015281816131cf01526131f601526143bf6000f3fe6080604052600436106102295760003560e01c80638da5cb5b11610123578063c18bc195116100ab578063e16830a81161006f578063e16830a814610841578063ef8700e51461086a578063f2fde38b14610895578063f5b3c3bf146108be578063f887ea40146108fb57610230565b8063c18bc19514610755578063cc2ffe7c1461077e578063d212a69a146107a9578063d3f6a157146107db578063dd62ed3e1461080457610230565b8063a457c2d7116100f2578063a457c2d71461065e578063a9059cbb1461069b578063b8863115146106d8578063c024666814610703578063c16dd4a41461072c57610230565b80638da5cb5b146105a257806395d89b41146105cd57806396880b17146105f8578063992c58e41461063557610230565b806339509351116101b157806370a082311161017557806370a08231146104f7578063715018a614610534578063751039fc1461054b5780637571336a1461056257806378e0edd71461058b57610230565b806339509351146103ea57806349bd5a5e146104275780634fbee19314610452578063555467a11461048f5780636ddd1713146104cc57610230565b806318160ddd116101f857806318160ddd146103035780631a8145bb1461032e5780631c6e8a751461035957806323b872dd14610382578063313ce567146103bf57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610926565b60405161025791906133ae565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613469565b6109b8565b60405161029491906134c4565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906134df565b6109d6565b6040516102d191906134c4565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061350c565b6109f6565b005b34801561030f57600080fd5b50610318610add565b604051610325919061355b565b60405180910390f35b34801561033a57600080fd5b50610343610ae7565b604051610350919061355b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906135a2565b610aed565b005b34801561038e57600080fd5b506103a960048036038101906103a491906135cf565b610ba1565b6040516103b691906134c4565b60405180910390f35b3480156103cb57600080fd5b506103d4610c7a565b6040516103e1919061363e565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190613469565b610c83565b60405161041e91906134c4565b60405180910390f35b34801561043357600080fd5b5061043c610d36565b6040516104499190613668565b60405180910390f35b34801561045e57600080fd5b50610479600480360381019061047491906134df565b610d5a565b60405161048691906134c4565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613683565b610db0565b6040516104c391906134c4565b60405180910390f35b3480156104d857600080fd5b506104e1610e59565b6040516104ee91906134c4565b60405180910390f35b34801561050357600080fd5b5061051e600480360381019061051991906134df565b610e6c565b60405161052b919061355b565b60405180910390f35b34801561054057600080fd5b50610549610eb4565b005b34801561055757600080fd5b5061056061100c565b005b34801561056e57600080fd5b50610589600480360381019061058491906136b0565b6110bc565b005b34801561059757600080fd5b506105a06111ae565b005b3480156105ae57600080fd5b506105b7611290565b6040516105c49190613668565b60405180910390f35b3480156105d957600080fd5b506105e26112ba565b6040516105ef91906133ae565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a91906134df565b61134c565b60405161062c91906134c4565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906136f0565b61136c565b005b34801561066a57600080fd5b5061068560048036038101906106809190613469565b611537565b60405161069291906134c4565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613469565b611604565b6040516106cf91906134c4565b60405180910390f35b3480156106e457600080fd5b506106ed611622565b6040516106fa91906134c4565b60405180910390f35b34801561070f57600080fd5b5061072a600480360381019061072591906136b0565b611635565b005b34801561073857600080fd5b50610753600480360381019061074e91906136b0565b611727565b005b34801561076157600080fd5b5061077c60048036038101906107779190613683565b6118a8565b005b34801561078a57600080fd5b50610793611968565b6040516107a0919061355b565b60405180910390f35b3480156107b557600080fd5b506107be61196e565b6040516107d298979695949392919061377d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906137fb565b6119a4565b005b34801561081057600080fd5b5061082b600480360381019061082691906137fb565b611ac1565b604051610838919061355b565b60405180910390f35b34801561084d57600080fd5b50610868600480360381019061086391906136b0565b611b48565b005b34801561087657600080fd5b5061087f611c3a565b60405161088c919061355b565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b791906134df565b611c40565b005b3480156108ca57600080fd5b506108e560048036038101906108e091906134df565b611e07565b6040516108f291906134c4565b60405180910390f35b34801561090757600080fd5b50610910611e27565b60405161091d919061389a565b60405180910390f35b606060038054610935906138e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906138e4565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611ea9565b8484611eb1565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6109fe611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613962565b60405180910390fd5b6103e882610a99610add565b610aa391906139b1565b610aad9190613a3a565b6008819055506103e881610abf610add565b610ac991906139b1565b610ad39190613a3a565b6009819055505050565b6000600254905090565b60165481565b610af5611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90613962565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000610bae848484611f9c565b610c6f84610bba611ea9565b610c6a8560405180606001604052806028815260200161436260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c20611ea9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129729092919063ffffffff16565b611eb1565b600190509392505050565b60006012905090565b6000610d2c610c90611ea9565b84610d278560016000610ca1611ea9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e4b90919063ffffffff16565b611eb1565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610dba611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090613962565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ebc611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611014611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90613962565b60405180910390fd5b6110af6103e8806109f6565b6110ba6103e86118a8565b565b6110c4611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90613962565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111b6611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90613962565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506000436112889190613a6b565b601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c9906138e4565b80601f01602080910402602001604051908101604052809291908181526020018280546112f5906138e4565b80156113425780601f1061131757610100808354040283529160200191611342565b820191906000526020600020905b81548152906001019060200180831161132557829003601f168201915b5050505050905090565b601b6020528060005260406000206000915054906101000a900460ff1681565b611374611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90613962565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d6001015461143d9190613a6b565b6114479190613a6b565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d6005015461148a9190613a6b565b6114949190613a6b565b600d600401819055506063600d6000015411156114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613b0d565b60405180910390fd5b601e600d60040154111561152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690613b79565b60405180910390fd5b505050505050565b60006115fa611544611ea9565b846115f585604051806060016040528060258152602001614317602591396001600061156e611ea9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129729092919063ffffffff16565b611eb1565b6001905092915050565b6000611618611611611ea9565b8484611f9c565b6001905092915050565b600c60029054906101000a900460ff1681565b61163d611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390613962565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61172f611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b590613962565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613c0b565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118b0611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690613962565b60405180910390fd5b6103e88161194b610add565b61195591906139b1565b61195f9190613a3a565b600a8190555050565b60155481565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6119ac611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290613962565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b50611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613962565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611c48611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613c9d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611e5a9190613a6b565b905083811015611e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9690613d09565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f8f919061355b565b60405180910390a3505050565b6000811415611fb657611fb1838360006129d6565b61296d565b611fbe611290565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561202c5750611ffc611290565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120455750600c60029054906101000a900460ff16155b156123cb57600c60009054906101000a900460ff1661213f57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120ff5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613d75565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121e25750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122315760085481111561222c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222390613e07565b60405180910390fd5b612320565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122d45750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561231f5760095481111561231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590613e99565b60405180910390fd5b5b5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123ca57600a5461237d83610e6c565b826123889190613a6b565b11156123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090613f05565b60405180910390fd5b5b5b60006123d630610e6c565b90506000600b5482101590508080156123fb5750600c60019054906101000a900460ff165b80156124145750600c60029054906101000a900460ff16155b80156124695750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156124bf5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125155750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612559576001600c60026101000a81548160ff02191690831515021790555061253d612b80565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061260f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561261957600090505b801561295e5760006018544310156126bb576126526064612644606388612e6e90919063ffffffff16565b612ee990919063ffffffff16565b90506063605e8261266391906139b1565b61266d9190613a3a565b6015600082825461267e9190613a6b565b92505081905550606360058261269491906139b1565b61269e9190613a3a565b601760008282546126af9190613a6b565b92505081905550612939565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561271957506000600d60040154115b156127fb57612749606461273b600d6004015488612e6e90919063ffffffff16565b612ee990919063ffffffff16565b9050600d60040154600d600701548261276291906139b1565b61276c9190613a3a565b6016600082825461277d9190613a6b565b92505081905550600d60040154600d600501548261279b91906139b1565b6127a59190613a3a565b601560008282546127b69190613a6b565b92505081905550600d60040154600d60060154826127d491906139b1565b6127de9190613a3a565b601760008282546127ef9190613a6b565b92505081905550612938565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561285957506000600d60000154115b1561293757612889606461287b600d6000015488612e6e90919063ffffffff16565b612ee990919063ffffffff16565b9050600d60000154600d60030154826128a291906139b1565b6128ac9190613a3a565b601660008282546128bd9190613a6b565b92505081905550600d60000154600d60010154826128db91906139b1565b6128e59190613a3a565b601560008282546128f69190613a6b565b92505081905550600d60000154600d600201548261291491906139b1565b61291e9190613a3a565b6017600082825461292f9190613a6b565b925050819055505b5b5b600081111561294e5761294d8730836129d6565b5b808561295a9190613f25565b9450505b6129698686866129d6565b5050505b505050565b60008383111582906129ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b191906133ae565b60405180910390fd5b50600083856129c99190613f25565b9050809150509392505050565b612a418160405180606001604052806026815260200161433c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129729092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ad4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e4b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b73919061355b565b60405180910390a3505050565b6000612b8b30610e6c565b90506000601754601554601654612ba29190613a6b565b612bac9190613a6b565b9050600080831480612bbe5750600082145b15612bcb57505050612e6c565b6014600b54612bda91906139b1565b831115612bf3576014600b54612bf091906139b1565b92505b600060028360165486612c0691906139b1565b612c109190613a3a565b612c1a9190613a3a565b90506000612c318286612f3390919063ffffffff16565b90506000479050612c4182612f7d565b6000612c568247612f3390919063ffffffff16565b90506000612c8187612c7360155485612e6e90919063ffffffff16565b612ee990919063ffffffff16565b90506000612cac88612c9e60175486612e6e90919063ffffffff16565b612ee990919063ffffffff16565b905060008183612cbc9190613a6b565b84612cc79190613f25565b9050600060168190555060006015819055506000601781905550600087118015612cf15750600081115b15612d3a57612d0087826131c9565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612d31929190613f59565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612d7f9190613f25565b604051612d8b90613fb3565b60006040518083038185875af1925050503d8060008114612dc8576040519150601f19603f3d011682016040523d82523d6000602084013e612dcd565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e1990613fb3565b60006040518083038185875af1925050503d8060008114612e56576040519150601f19603f3d011682016040523d82523d6000602084013e612e5b565b606091505b505080985050505050505050505050505b565b600080831415612e815760009050612ee3565b60008284612e8f91906139b1565b9050828482612e9e9190613a3a565b14612ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed59061403a565b60405180910390fd5b809150505b92915050565b6000612f2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132b2565b905092915050565b6000612f7583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612972565b905092915050565b6000600267ffffffffffffffff811115612f9a57612f9961405a565b5b604051908082528060200260200182016040528015612fc85781602001602082028036833780820191505090505b5090503081600081518110612fe057612fdf614089565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561308057600080fd5b505afa158015613094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b891906140cd565b816001815181106130cc576130cb614089565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613131307f000000000000000000000000000000000000000000000000000000000000000084611eb1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131939594939291906141f3565b600060405180830381600087803b1580156131ad57600080fd5b505af11580156131c1573d6000803e3d6000fd5b505050505050565b6131f4307f000000000000000000000000000000000000000000000000000000000000000084611eb1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016132599695949392919061424d565b6060604051808303818588803b15801561327257600080fd5b505af1158015613286573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132ab91906142c3565b5050505050565b600080831182906132f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f091906133ae565b60405180910390fd5b50600083856133089190613a3a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334f578082015181840152602081019050613334565b8381111561335e576000848401525b50505050565b6000601f19601f8301169050919050565b600061338082613315565b61338a8185613320565b935061339a818560208601613331565b6133a381613364565b840191505092915050565b600060208201905081810360008301526133c88184613375565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613400826133d5565b9050919050565b613410816133f5565b811461341b57600080fd5b50565b60008135905061342d81613407565b92915050565b6000819050919050565b61344681613433565b811461345157600080fd5b50565b6000813590506134638161343d565b92915050565b600080604083850312156134805761347f6133d0565b5b600061348e8582860161341e565b925050602061349f85828601613454565b9150509250929050565b60008115159050919050565b6134be816134a9565b82525050565b60006020820190506134d960008301846134b5565b92915050565b6000602082840312156134f5576134f46133d0565b5b60006135038482850161341e565b91505092915050565b60008060408385031215613523576135226133d0565b5b600061353185828601613454565b925050602061354285828601613454565b9150509250929050565b61355581613433565b82525050565b6000602082019050613570600083018461354c565b92915050565b61357f816134a9565b811461358a57600080fd5b50565b60008135905061359c81613576565b92915050565b6000602082840312156135b8576135b76133d0565b5b60006135c68482850161358d565b91505092915050565b6000806000606084860312156135e8576135e76133d0565b5b60006135f68682870161341e565b93505060206136078682870161341e565b925050604061361886828701613454565b9150509250925092565b600060ff82169050919050565b61363881613622565b82525050565b6000602082019050613653600083018461362f565b92915050565b613662816133f5565b82525050565b600060208201905061367d6000830184613659565b92915050565b600060208284031215613699576136986133d0565b5b60006136a784828501613454565b91505092915050565b600080604083850312156136c7576136c66133d0565b5b60006136d58582860161341e565b92505060206136e68582860161358d565b9150509250929050565b60008060008060008060c0878903121561370d5761370c6133d0565b5b600061371b89828a01613454565b965050602061372c89828a01613454565b955050604061373d89828a01613454565b945050606061374e89828a01613454565b935050608061375f89828a01613454565b92505060a061377089828a01613454565b9150509295509295509295565b600061010082019050613793600083018b61354c565b6137a0602083018a61354c565b6137ad604083018961354c565b6137ba606083018861354c565b6137c7608083018761354c565b6137d460a083018661354c565b6137e160c083018561354c565b6137ee60e083018461354c565b9998505050505050505050565b60008060408385031215613812576138116133d0565b5b60006138208582860161341e565b92505060206138318582860161341e565b9150509250929050565b6000819050919050565b600061386061385b613856846133d5565b61383b565b6133d5565b9050919050565b600061387282613845565b9050919050565b600061388482613867565b9050919050565b61389481613879565b82525050565b60006020820190506138af600083018461388b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138fc57607f821691505b602082108114156139105761390f6138b5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061394c602083613320565b915061395782613916565b602082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139bc82613433565b91506139c783613433565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a00576139ff613982565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a4582613433565b9150613a5083613433565b925082613a6057613a5f613a0b565b5b828204905092915050565b6000613a7682613433565b9150613a8183613433565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ab657613ab5613982565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613af7601d83613320565b9150613b0282613ac1565b602082019050919050565b60006020820190508181036000830152613b2681613aea565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613b63601d83613320565b9150613b6e82613b2d565b602082019050919050565b60006020820190508181036000830152613b9281613b56565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613bf5602a83613320565b9150613c0082613b99565b604082019050919050565b60006020820190508181036000830152613c2481613be8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c87602683613320565b9150613c9282613c2b565b604082019050919050565b60006020820190508181036000830152613cb681613c7a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613cf3601b83613320565b9150613cfe82613cbd565b602082019050919050565b60006020820190508181036000830152613d2281613ce6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613d5f601683613320565b9150613d6a82613d29565b602082019050919050565b60006020820190508181036000830152613d8e81613d52565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613df1603583613320565b9150613dfc82613d95565b604082019050919050565b60006020820190508181036000830152613e2081613de4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613e83603683613320565b9150613e8e82613e27565b604082019050919050565b60006020820190508181036000830152613eb281613e76565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613eef601383613320565b9150613efa82613eb9565b602082019050919050565b60006020820190508181036000830152613f1e81613ee2565b9050919050565b6000613f3082613433565b9150613f3b83613433565b925082821015613f4e57613f4d613982565b5b828203905092915050565b6000604082019050613f6e600083018561354c565b613f7b602083018461354c565b9392505050565b600081905092915050565b50565b6000613f9d600083613f82565b9150613fa882613f8d565b600082019050919050565b6000613fbe82613f90565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614024602183613320565b915061402f82613fc8565b604082019050919050565b6000602082019050818103600083015261405381614017565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506140c781613407565b92915050565b6000602082840312156140e3576140e26133d0565b5b60006140f1848285016140b8565b91505092915050565b6000819050919050565b600061411f61411a614115846140fa565b61383b565b613433565b9050919050565b61412f81614104565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61416a816133f5565b82525050565b600061417c8383614161565b60208301905092915050565b6000602082019050919050565b60006141a082614135565b6141aa8185614140565b93506141b583614151565b8060005b838110156141e65781516141cd8882614170565b97506141d883614188565b9250506001810190506141b9565b5085935050505092915050565b600060a082019050614208600083018861354c565b6142156020830187614126565b81810360408301526142278186614195565b90506142366060830185613659565b614243608083018461354c565b9695505050505050565b600060c0820190506142626000830189613659565b61426f602083018861354c565b61427c6040830187614126565b6142896060830186614126565b6142966080830185613659565b6142a360a083018461354c565b979650505050505050565b6000815190506142bd8161343d565b92915050565b6000806000606084860312156142dc576142db6133d0565b5b60006142ea868287016142ae565b93505060206142fb868287016142ae565b925050604061430c868287016142ae565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203ffcf0e54924d1eba6cc6509fe1ac113ff59e75d224addda0ae0ddb6edb201c664736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638da5cb5b11610123578063c18bc195116100ab578063e16830a81161006f578063e16830a814610841578063ef8700e51461086a578063f2fde38b14610895578063f5b3c3bf146108be578063f887ea40146108fb57610230565b8063c18bc19514610755578063cc2ffe7c1461077e578063d212a69a146107a9578063d3f6a157146107db578063dd62ed3e1461080457610230565b8063a457c2d7116100f2578063a457c2d71461065e578063a9059cbb1461069b578063b8863115146106d8578063c024666814610703578063c16dd4a41461072c57610230565b80638da5cb5b146105a257806395d89b41146105cd57806396880b17146105f8578063992c58e41461063557610230565b806339509351116101b157806370a082311161017557806370a08231146104f7578063715018a614610534578063751039fc1461054b5780637571336a1461056257806378e0edd71461058b57610230565b806339509351146103ea57806349bd5a5e146104275780634fbee19314610452578063555467a11461048f5780636ddd1713146104cc57610230565b806318160ddd116101f857806318160ddd146103035780631a8145bb1461032e5780631c6e8a751461035957806323b872dd14610382578063313ce567146103bf57610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610926565b60405161025791906133ae565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613469565b6109b8565b60405161029491906134c4565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906134df565b6109d6565b6040516102d191906134c4565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061350c565b6109f6565b005b34801561030f57600080fd5b50610318610add565b604051610325919061355b565b60405180910390f35b34801561033a57600080fd5b50610343610ae7565b604051610350919061355b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906135a2565b610aed565b005b34801561038e57600080fd5b506103a960048036038101906103a491906135cf565b610ba1565b6040516103b691906134c4565b60405180910390f35b3480156103cb57600080fd5b506103d4610c7a565b6040516103e1919061363e565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190613469565b610c83565b60405161041e91906134c4565b60405180910390f35b34801561043357600080fd5b5061043c610d36565b6040516104499190613668565b60405180910390f35b34801561045e57600080fd5b50610479600480360381019061047491906134df565b610d5a565b60405161048691906134c4565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b19190613683565b610db0565b6040516104c391906134c4565b60405180910390f35b3480156104d857600080fd5b506104e1610e59565b6040516104ee91906134c4565b60405180910390f35b34801561050357600080fd5b5061051e600480360381019061051991906134df565b610e6c565b60405161052b919061355b565b60405180910390f35b34801561054057600080fd5b50610549610eb4565b005b34801561055757600080fd5b5061056061100c565b005b34801561056e57600080fd5b50610589600480360381019061058491906136b0565b6110bc565b005b34801561059757600080fd5b506105a06111ae565b005b3480156105ae57600080fd5b506105b7611290565b6040516105c49190613668565b60405180910390f35b3480156105d957600080fd5b506105e26112ba565b6040516105ef91906133ae565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a91906134df565b61134c565b60405161062c91906134c4565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906136f0565b61136c565b005b34801561066a57600080fd5b5061068560048036038101906106809190613469565b611537565b60405161069291906134c4565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190613469565b611604565b6040516106cf91906134c4565b60405180910390f35b3480156106e457600080fd5b506106ed611622565b6040516106fa91906134c4565b60405180910390f35b34801561070f57600080fd5b5061072a600480360381019061072591906136b0565b611635565b005b34801561073857600080fd5b50610753600480360381019061074e91906136b0565b611727565b005b34801561076157600080fd5b5061077c60048036038101906107779190613683565b6118a8565b005b34801561078a57600080fd5b50610793611968565b6040516107a0919061355b565b60405180910390f35b3480156107b557600080fd5b506107be61196e565b6040516107d298979695949392919061377d565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906137fb565b6119a4565b005b34801561081057600080fd5b5061082b600480360381019061082691906137fb565b611ac1565b604051610838919061355b565b60405180910390f35b34801561084d57600080fd5b50610868600480360381019061086391906136b0565b611b48565b005b34801561087657600080fd5b5061087f611c3a565b60405161088c919061355b565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b791906134df565b611c40565b005b3480156108ca57600080fd5b506108e560048036038101906108e091906134df565b611e07565b6040516108f291906134c4565b60405180910390f35b34801561090757600080fd5b50610910611e27565b60405161091d919061389a565b60405180910390f35b606060038054610935906138e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610961906138e4565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611ea9565b8484611eb1565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6109fe611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613962565b60405180910390fd5b6103e882610a99610add565b610aa391906139b1565b610aad9190613a3a565b6008819055506103e881610abf610add565b610ac991906139b1565b610ad39190613a3a565b6009819055505050565b6000600254905090565b60165481565b610af5611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90613962565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000610bae848484611f9c565b610c6f84610bba611ea9565b610c6a8560405180606001604052806028815260200161436260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c20611ea9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129729092919063ffffffff16565b611eb1565b600190509392505050565b60006012905090565b6000610d2c610c90611ea9565b84610d278560016000610ca1611ea9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e4b90919063ffffffff16565b611eb1565b6001905092915050565b7f000000000000000000000000f14f20784d5d76ccd4eaca4bbf18056d2db4d8ed81565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610dba611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4090613962565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ebc611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611014611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90613962565b60405180910390fd5b6110af6103e8806109f6565b6110ba6103e86118a8565b565b6110c4611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90613962565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111b6611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90613962565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506000436112889190613a6b565b601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c9906138e4565b80601f01602080910402602001604051908101604052809291908181526020018280546112f5906138e4565b80156113425780601f1061131757610100808354040283529160200191611342565b820191906000526020600020905b81548152906001019060200180831161132557829003601f168201915b5050505050905090565b601b6020528060005260406000206000915054906101000a900460ff1681565b611374611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90613962565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d6001015461143d9190613a6b565b6114479190613a6b565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d6005015461148a9190613a6b565b6114949190613a6b565b600d600401819055506063600d6000015411156114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613b0d565b60405180910390fd5b601e600d60040154111561152f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152690613b79565b60405180910390fd5b505050505050565b60006115fa611544611ea9565b846115f585604051806060016040528060258152602001614317602591396001600061156e611ea9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129729092919063ffffffff16565b611eb1565b6001905092915050565b6000611618611611611ea9565b8484611f9c565b6001905092915050565b600c60029054906101000a900460ff1681565b61163d611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390613962565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61172f611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b590613962565b60405180910390fd5b7f000000000000000000000000f14f20784d5d76ccd4eaca4bbf18056d2db4d8ed73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184490613c0b565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118b0611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690613962565b60405180910390fd5b6103e88161194b610add565b61195591906139b1565b61195f9190613a3a565b600a8190555050565b60155481565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6119ac611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290613962565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b50611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690613962565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611c48611ea9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613962565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613c9d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611e5a9190613a6b565b905083811015611e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9690613d09565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f8f919061355b565b60405180910390a3505050565b6000811415611fb657611fb1838360006129d6565b61296d565b611fbe611290565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561202c5750611ffc611290565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120455750600c60029054906101000a900460ff16155b156123cb57600c60009054906101000a900460ff1661213f57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120ff5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613d75565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121e25750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122315760085481111561222c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222390613e07565b60405180910390fd5b612320565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122d45750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561231f5760095481111561231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590613e99565b60405180910390fd5b5b5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166123ca57600a5461237d83610e6c565b826123889190613a6b565b11156123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090613f05565b60405180910390fd5b5b5b60006123d630610e6c565b90506000600b5482101590508080156123fb5750600c60019054906101000a900460ff165b80156124145750600c60029054906101000a900460ff16155b80156124695750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156124bf5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125155750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612559576001600c60026101000a81548160ff02191690831515021790555061253d612b80565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061260f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561261957600090505b801561295e5760006018544310156126bb576126526064612644606388612e6e90919063ffffffff16565b612ee990919063ffffffff16565b90506063605e8261266391906139b1565b61266d9190613a3a565b6015600082825461267e9190613a6b565b92505081905550606360058261269491906139b1565b61269e9190613a3a565b601760008282546126af9190613a6b565b92505081905550612939565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561271957506000600d60040154115b156127fb57612749606461273b600d6004015488612e6e90919063ffffffff16565b612ee990919063ffffffff16565b9050600d60040154600d600701548261276291906139b1565b61276c9190613a3a565b6016600082825461277d9190613a6b565b92505081905550600d60040154600d600501548261279b91906139b1565b6127a59190613a3a565b601560008282546127b69190613a6b565b92505081905550600d60040154600d60060154826127d491906139b1565b6127de9190613a3a565b601760008282546127ef9190613a6b565b92505081905550612938565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561285957506000600d60000154115b1561293757612889606461287b600d6000015488612e6e90919063ffffffff16565b612ee990919063ffffffff16565b9050600d60000154600d60030154826128a291906139b1565b6128ac9190613a3a565b601660008282546128bd9190613a6b565b92505081905550600d60000154600d60010154826128db91906139b1565b6128e59190613a3a565b601560008282546128f69190613a6b565b92505081905550600d60000154600d600201548261291491906139b1565b61291e9190613a3a565b6017600082825461292f9190613a6b565b925050819055505b5b5b600081111561294e5761294d8730836129d6565b5b808561295a9190613f25565b9450505b6129698686866129d6565b5050505b505050565b60008383111582906129ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b191906133ae565b60405180910390fd5b50600083856129c99190613f25565b9050809150509392505050565b612a418160405180606001604052806026815260200161433c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129729092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ad4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e4b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b73919061355b565b60405180910390a3505050565b6000612b8b30610e6c565b90506000601754601554601654612ba29190613a6b565b612bac9190613a6b565b9050600080831480612bbe5750600082145b15612bcb57505050612e6c565b6014600b54612bda91906139b1565b831115612bf3576014600b54612bf091906139b1565b92505b600060028360165486612c0691906139b1565b612c109190613a3a565b612c1a9190613a3a565b90506000612c318286612f3390919063ffffffff16565b90506000479050612c4182612f7d565b6000612c568247612f3390919063ffffffff16565b90506000612c8187612c7360155485612e6e90919063ffffffff16565b612ee990919063ffffffff16565b90506000612cac88612c9e60175486612e6e90919063ffffffff16565b612ee990919063ffffffff16565b905060008183612cbc9190613a6b565b84612cc79190613f25565b9050600060168190555060006015819055506000601781905550600087118015612cf15750600081115b15612d3a57612d0087826131c9565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612d31929190613f59565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168347612d7f9190613f25565b604051612d8b90613fb3565b60006040518083038185875af1925050503d8060008114612dc8576040519150601f19603f3d011682016040523d82523d6000602084013e612dcd565b606091505b505080985050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612e1990613fb3565b60006040518083038185875af1925050503d8060008114612e56576040519150601f19603f3d011682016040523d82523d6000602084013e612e5b565b606091505b505080985050505050505050505050505b565b600080831415612e815760009050612ee3565b60008284612e8f91906139b1565b9050828482612e9e9190613a3a565b14612ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed59061403a565b60405180910390fd5b809150505b92915050565b6000612f2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132b2565b905092915050565b6000612f7583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612972565b905092915050565b6000600267ffffffffffffffff811115612f9a57612f9961405a565b5b604051908082528060200260200182016040528015612fc85781602001602082028036833780820191505090505b5090503081600081518110612fe057612fdf614089565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561308057600080fd5b505afa158015613094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b891906140cd565b816001815181106130cc576130cb614089565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613131307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611eb1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016131939594939291906141f3565b600060405180830381600087803b1580156131ad57600080fd5b505af11580156131c1573d6000803e3d6000fd5b505050505050565b6131f4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611eb1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016132599695949392919061424d565b6060604051808303818588803b15801561327257600080fd5b505af1158015613286573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132ab91906142c3565b5050505050565b600080831182906132f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f091906133ae565b60405180910390fd5b50600083856133089190613a3a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561334f578082015181840152602081019050613334565b8381111561335e576000848401525b50505050565b6000601f19601f8301169050919050565b600061338082613315565b61338a8185613320565b935061339a818560208601613331565b6133a381613364565b840191505092915050565b600060208201905081810360008301526133c88184613375565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613400826133d5565b9050919050565b613410816133f5565b811461341b57600080fd5b50565b60008135905061342d81613407565b92915050565b6000819050919050565b61344681613433565b811461345157600080fd5b50565b6000813590506134638161343d565b92915050565b600080604083850312156134805761347f6133d0565b5b600061348e8582860161341e565b925050602061349f85828601613454565b9150509250929050565b60008115159050919050565b6134be816134a9565b82525050565b60006020820190506134d960008301846134b5565b92915050565b6000602082840312156134f5576134f46133d0565b5b60006135038482850161341e565b91505092915050565b60008060408385031215613523576135226133d0565b5b600061353185828601613454565b925050602061354285828601613454565b9150509250929050565b61355581613433565b82525050565b6000602082019050613570600083018461354c565b92915050565b61357f816134a9565b811461358a57600080fd5b50565b60008135905061359c81613576565b92915050565b6000602082840312156135b8576135b76133d0565b5b60006135c68482850161358d565b91505092915050565b6000806000606084860312156135e8576135e76133d0565b5b60006135f68682870161341e565b93505060206136078682870161341e565b925050604061361886828701613454565b9150509250925092565b600060ff82169050919050565b61363881613622565b82525050565b6000602082019050613653600083018461362f565b92915050565b613662816133f5565b82525050565b600060208201905061367d6000830184613659565b92915050565b600060208284031215613699576136986133d0565b5b60006136a784828501613454565b91505092915050565b600080604083850312156136c7576136c66133d0565b5b60006136d58582860161341e565b92505060206136e68582860161358d565b9150509250929050565b60008060008060008060c0878903121561370d5761370c6133d0565b5b600061371b89828a01613454565b965050602061372c89828a01613454565b955050604061373d89828a01613454565b945050606061374e89828a01613454565b935050608061375f89828a01613454565b92505060a061377089828a01613454565b9150509295509295509295565b600061010082019050613793600083018b61354c565b6137a0602083018a61354c565b6137ad604083018961354c565b6137ba606083018861354c565b6137c7608083018761354c565b6137d460a083018661354c565b6137e160c083018561354c565b6137ee60e083018461354c565b9998505050505050505050565b60008060408385031215613812576138116133d0565b5b60006138208582860161341e565b92505060206138318582860161341e565b9150509250929050565b6000819050919050565b600061386061385b613856846133d5565b61383b565b6133d5565b9050919050565b600061387282613845565b9050919050565b600061388482613867565b9050919050565b61389481613879565b82525050565b60006020820190506138af600083018461388b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138fc57607f821691505b602082108114156139105761390f6138b5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061394c602083613320565b915061395782613916565b602082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139bc82613433565b91506139c783613433565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a00576139ff613982565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a4582613433565b9150613a5083613433565b925082613a6057613a5f613a0b565b5b828204905092915050565b6000613a7682613433565b9150613a8183613433565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ab657613ab5613982565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613af7601d83613320565b9150613b0282613ac1565b602082019050919050565b60006020820190508181036000830152613b2681613aea565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000613b63601d83613320565b9150613b6e82613b2d565b602082019050919050565b60006020820190508181036000830152613b9281613b56565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613bf5602a83613320565b9150613c0082613b99565b604082019050919050565b60006020820190508181036000830152613c2481613be8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c87602683613320565b9150613c9282613c2b565b604082019050919050565b60006020820190508181036000830152613cb681613c7a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613cf3601b83613320565b9150613cfe82613cbd565b602082019050919050565b60006020820190508181036000830152613d2281613ce6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613d5f601683613320565b9150613d6a82613d29565b602082019050919050565b60006020820190508181036000830152613d8e81613d52565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613df1603583613320565b9150613dfc82613d95565b604082019050919050565b60006020820190508181036000830152613e2081613de4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613e83603683613320565b9150613e8e82613e27565b604082019050919050565b60006020820190508181036000830152613eb281613e76565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613eef601383613320565b9150613efa82613eb9565b602082019050919050565b60006020820190508181036000830152613f1e81613ee2565b9050919050565b6000613f3082613433565b9150613f3b83613433565b925082821015613f4e57613f4d613982565b5b828203905092915050565b6000604082019050613f6e600083018561354c565b613f7b602083018461354c565b9392505050565b600081905092915050565b50565b6000613f9d600083613f82565b9150613fa882613f8d565b600082019050919050565b6000613fbe82613f90565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614024602183613320565b915061402f82613fc8565b604082019050919050565b6000602082019050818103600083015261405381614017565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506140c781613407565b92915050565b6000602082840312156140e3576140e26133d0565b5b60006140f1848285016140b8565b91505092915050565b6000819050919050565b600061411f61411a614115846140fa565b61383b565b613433565b9050919050565b61412f81614104565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61416a816133f5565b82525050565b600061417c8383614161565b60208301905092915050565b6000602082019050919050565b60006141a082614135565b6141aa8185614140565b93506141b583614151565b8060005b838110156141e65781516141cd8882614170565b97506141d883614188565b9250506001810190506141b9565b5085935050505092915050565b600060a082019050614208600083018861354c565b6142156020830187614126565b81810360408301526142278186614195565b90506142366060830185613659565b614243608083018461354c565b9695505050505050565b600060c0820190506142626000830189613659565b61426f602083018861354c565b61427c6040830187614126565b6142896060830186614126565b6142966080830185613659565b6142a360a083018461354c565b979650505050505050565b6000815190506142bd8161343d565b92915050565b6000806000606084860312156142dc576142db6133d0565b5b60006142ea868287016142ae565b93505060206142fb868287016142ae565b925050604061430c868287016142ae565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203ffcf0e54924d1eba6cc6509fe1ac113ff59e75d224addda0ae0ddb6edb201c664736f6c63430008090033

Deployed Bytecode Sourcemap

20654:12961:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4237:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6397:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22066:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25177:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5354:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21840:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25641:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7047:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5197:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7810:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20777:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27631:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25011:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21154:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5524:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13334:148;;;;;;;;;;;;;:::i;:::-;;27092:129;;;;;;;;;;;;;:::i;:::-;;26940:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24797;;;;;;;;;;;;;:::i;:::-;;12693:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4455:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22136:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25750:888;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8530:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5863:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21192:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26650:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27229:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25399:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21801:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21527:265;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;27433:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6100:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26788:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21880:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13637:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22352:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20728;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4237:99;4290:13;4323:5;4316:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4237:99;:::o;6397:168::-;6479:4;6496:39;6505:12;:10;:12::i;:::-;6519:7;6528:6;6496:8;:39::i;:::-;6553:4;6546:11;;6397:168;;;;:::o;22066:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25177:214::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25317:4:::1;25304:9;25288:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25287:34;;;;:::i;:::-;25272:12;:49;;;;25379:4;25365:10;25349:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25348:35;;;;:::i;:::-;25332:13;:51;;;;25177:214:::0;;:::o;5354:107::-;5414:7;5441:12;;5434:19;;5354:107;:::o;21840:33::-;;;;:::o;25641:101::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25727:7:::1;25713:11;;:21;;;;;;;;;;;;;;;;;;25641:101:::0;:::o;7047:354::-;7186:4;7203:36;7213:6;7221:9;7232:6;7203:9;:36::i;:::-;7250:121;7259:6;7267:12;:10;:12::i;:::-;7281:89;7319:6;7281:89;;;;;;;;;;;;;;;;;:11;:19;7293:6;7281:19;;;;;;;;;;;;;;;:33;7301:12;:10;:12::i;:::-;7281:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7250:8;:121::i;:::-;7389:4;7382:11;;7047:354;;;;;:::o;5197:92::-;5254:5;5279:2;5272:9;;5197:92;:::o;7810:217::-;7897:4;7914:83;7923:12;:10;:12::i;:::-;7937:7;7946:50;7985:10;7946:11;:25;7958:12;:10;:12::i;:::-;7946:25;;;;;;;;;;;;;;;:34;7972:7;7946:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;7914:8;:83::i;:::-;8015:4;8008:11;;7810:217;;;;:::o;20777:38::-;;;:::o;27631:125::-;27696:4;27720:19;:28;27740:7;27720:28;;;;;;;;;;;;;;;;;;;;;;;;;27713:35;;27631:125;;;:::o;25011:158::-;25092:4;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:9:::1;25108:19;:31;;;;25157:4;25150:11;;25011:158:::0;;;:::o;21154:31::-;;;;;;;;;;;;;:::o;5524:126::-;5597:7;5624:9;:18;5634:7;5624:18;;;;;;;;;;;;;;;;5617:25;;5524:126;;;:::o;13334:148::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13441:1:::1;13404:40;;13425:6;;;;;;;;;;;13404:40;;;;;;;;;;;;13472:1;13455:6;;:19;;;;;;;;;;;;;;;;;;13334:148::o:0;27092:129::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27146:29:::1;27165:4;27170::::0;27146:18:::1;:29::i;:::-;27186:27;27208:4;27186:21;:27::i;:::-;27092:129::o:0;26940:144::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27072:4:::1;27030:31;:39;27062:6;27030:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26940:144:::0;;:::o;24797:::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24863:4:::1;24851:9;;:16;;;;;;;;;;;;;;;;;;24892:4;24878:11;;:18;;;;;;;;;;;;;;;;;;24932:1;24917:12;:16;;;;:::i;:::-;24907:7;:26;;;;24797:144::o:0;12693:78::-;12730:7;12757:6;;;;;;;;;;;12750:13;;12693:78;:::o;4455:103::-;4510:13;4543:7;4536:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4455:103;:::o;22136:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25750:888::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25980:15:::1;25957:5;:20;;:38;;;;26030:16;26006:5;:21;;:40;;;;26083:18;26057:5;:23;;:44;;;;26180:5;:23;;;26156:5;:21;;;26133:5;:20;;;:44;;;;:::i;:::-;:70;;;;:::i;:::-;26112:5;:18;;:91;;;;26240:16;26216:5;:21;;:40;;;;26292:17;26267:5;:22;;:42;;;;26347:19;26320:5;:24;;:46;;;;26448:5;:24;;;26423:5;:22;;;26399:5;:21;;;:46;;;;:::i;:::-;:73;;;;:::i;:::-;26377:5;:19;;:95;;;;26513:2;26491:5;:18;;;:24;;26483:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26594:2;26571:5;:19;;;:25;;26563:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25750:888:::0;;;;;;:::o;8530:268::-;8622:4;8639:129;8648:12;:10;:12::i;:::-;8662:7;8671:96;8710:15;8671:96;;;;;;;;;;;;;;;;;:11;:25;8683:12;:10;:12::i;:::-;8671:25;;;;;;;;;;;;;;;:34;8697:7;8671:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8639:8;:129::i;:::-;8786:4;8779:11;;8530:268;;;;:::o;5863:174::-;5948:4;5965:42;5975:12;:10;:12::i;:::-;5989:9;6000:6;5965:9;:42::i;:::-;6025:4;6018:11;;5863:174;;;;:::o;21192:22::-;;;;;;;;;;;;;:::o;26650:132::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26766:8:::1;26735:19;:28;26755:7;26735:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26650:132:::0;;:::o;27229:196::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27322:13:::1;27314:21;;:4;:21;;;;27306:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27412:5;27393:10;:16;27404:4;27393:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;27229:196:::0;;:::o;25399:146::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25533:4:::1;25516:13;25500;:11;:13::i;:::-;:29;;;;:::i;:::-;25499:38;;;;:::i;:::-;25481:15;:56;;;;25399:146:::0;:::o;21801:32::-;;;;:::o;21527:265::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27433:190::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27551:15:::1;27534:14;;:32;;;;;;;;;;;;;;;;;;27597:18;27577:17;;:38;;;;;;;;;;;;;;;;;;27433:190:::0;;:::o;6100:150::-;6188:7;6215:11;:18;6227:5;6215:18;;;;;;;;;;;;;;;:27;6234:7;6215:27;;;;;;;;;;;;;;;;6208:34;;6100:150;;;;:::o;26788:146::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26918:8:::1;26880:26;:35;26907:7;26880:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26788:146:::0;;:::o;21880:35::-;;;;:::o;13637:244::-;12914:12;:10;:12::i;:::-;12904:22;;:6;;;;;;;;;;;:22;;;12896:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13746:1:::1;13726:22;;:8;:22;;;;13718:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13836:8;13807:38;;13828:6;;;;;;;;;;;13807:38;;;;;;;;;;;;13865:8;13856:6;;:17;;;;;;;;;;;;;;;;;;13637:244:::0;:::o;22352:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20728:::-;;;:::o;10958:180::-;11015:7;11035:9;11051:1;11047;:5;;;;:::i;:::-;11035:17;;11076:1;11071;:6;;11063:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11129:1;11122:8;;;10958:180;;;;:::o;3310:97::-;3362:7;3389:10;3382:17;;3310:97;:::o;10693:220::-;10851:6;10821:11;:18;10833:5;10821:18;;;;;;;;;;;;;;;:27;10840:7;10821:27;;;;;;;;;;;;;;;:36;;;;10889:7;10873:32;;10882:5;10873:32;;;10898:6;10873:32;;;;;;:::i;:::-;;;;;;;;10693:220;;;:::o;27764:3312::-;27921:1;27911:6;:11;27907:102;;;27939:37;27955:6;27963:9;27974:1;27939:15;:37::i;:::-;27991:7;;27907:102;28049:7;:5;:7::i;:::-;28039:17;;:6;:17;;;;:54;;;;;28086:7;:5;:7::i;:::-;28073:20;;:9;:20;;;;28039:54;:82;;;;;28111:10;;;;;;;;;;;28110:11;28039:82;28021:888;;;28155:9;;;;;;;;;;;28150:147;;28193:19;:27;28213:6;28193:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;28224:19;:30;28244:9;28224:30;;;;;;;;;;;;;;;;;;;;;;;;;28193:61;28185:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28150:147;28315:10;:18;28326:6;28315:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28338:31;:42;28370:9;28338:42;;;;;;;;;;;;;;;;;;;;;;;;;28337:43;28315:65;28311:410;;;28419:12;;28409:6;:22;;28401:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28311:410;;;28529:10;:21;28540:9;28529:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28555:31;:39;28587:6;28555:39;;;;;;;;;;;;;;;;;;;;;;;;;28554:40;28529:65;28525:196;;;28633:13;;28623:6;:23;;28615:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;28525:196;28311:410;28742:26;:37;28769:9;28742:37;;;;;;;;;;;;;;;;;;;;;;;;;28737:159;;28841:15;;28817:20;28827:9;28817;:20::i;:::-;28808:6;:29;;;;:::i;:::-;:48;;28800:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28737:159;28021:888;28922:28;28953:24;28971:4;28953:9;:24::i;:::-;28922:55;;28991:12;29030:19;;29006:20;:43;;28991:58;;29080:7;:35;;;;;29104:11;;;;;;;;;;;29080:35;:63;;;;;29133:10;;;;;;;;;;;29132:11;29080:63;:101;;;;;29160:10;:21;29171:9;29160:21;;;;;;;;;;;;;;;;;;;;;;;;;29080:101;:146;;;;;29199:19;:27;29219:6;29199:27;;;;;;;;;;;;;;;;;;;;;;;;;29198:28;29080:146;:194;;;;;29244:19;:30;29264:9;29244:30;;;;;;;;;;;;;;;;;;;;;;;;;29243:31;29080:194;29062:326;;;29314:4;29301:10;;:17;;;;;;;;;;;;;;;;;;29333:10;:8;:10::i;:::-;29371:5;29358:10;;:18;;;;;;;;;;;;;;;;;;29062:326;29401:12;29417:10;;;;;;;;;;;29416:11;29401:26;;29529:19;:27;29549:6;29529:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;29560:19;:30;29580:9;29560:30;;;;;;;;;;;;;;;;;;;;;;;;;29529:61;29525:109;;;29617:5;29607:15;;29525:109;29735:7;29731:1283;;;29759:12;29808:7;;29793:12;:22;29790:1071;;;29843:23;29862:3;29843:14;29854:2;29843:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;29836:30;;29920:2;29914;29907:4;:9;;;;:::i;:::-;29906:16;;;;:::i;:::-;29885:17;;:37;;;;;;;:::i;:::-;;;;;;;;29978:2;29973:1;29966:4;:8;;;;:::i;:::-;29965:15;;;;:::i;:::-;29941:20;;:39;;;;;;;:::i;:::-;;;;;;;;29790:1071;;;30006:10;:21;30017:9;30006:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;30053:1;30031:5;:19;;;:23;30006:48;30002:859;;;30082:40;30118:3;30082:31;30093:5;:19;;;30082:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30075:47;;30195:5;:19;;;30170:5;:22;;;30163:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30141:18;;:73;;;;;;;:::i;:::-;;;;;;;;30285:5;:19;;;30261:5;:21;;;30254:4;:28;;;;:::i;:::-;:50;;;;:::i;:::-;30233:17;;:71;;;;;;;:::i;:::-;;;;;;;;30381:5;:19;;;30354:5;:24;;;30347:4;:31;;;;:::i;:::-;:53;;;;:::i;:::-;30323:20;;:77;;;;;;;:::i;:::-;;;;;;;;30002:859;;;30462:10;:18;30473:6;30462:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;30505:1;30484:5;:18;;;:22;30462:44;30458:403;;;30534:39;30569:3;30534:30;30545:5;:18;;;30534:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30527:46;;30645:5;:18;;;30621:5;:21;;;30614:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30592:18;;:71;;;;;;;:::i;:::-;;;;;;;;30733:5;:18;;;30710:5;:20;;;30703:4;:27;;;;:::i;:::-;:48;;;;:::i;:::-;30682:17;;:69;;;;;;;:::i;:::-;;;;;;;;30827:5;:18;;;30801:5;:23;;;30794:4;:30;;;;:::i;:::-;:51;;;;:::i;:::-;30770:20;;:75;;;;;;;:::i;:::-;;;;;;;;30458:403;30002:859;29790:1071;30888:1;30881:4;:8;30877:93;;;30910:44;30926:6;30942:4;30949;30910:15;:44::i;:::-;30877:93;30996:4;30986:14;;;;;:::i;:::-;;;29744:1270;29731:1283;31026:42;31042:6;31050:9;31061:6;31026:15;:42::i;:::-;27886:3190;;;27764:3312;;;;:::o;11299:191::-;11384:7;11417:1;11412;:6;;11420:12;11404:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11444:9;11460:1;11456;:5;;;;:::i;:::-;11444:17;;11481:1;11474:8;;;11299:191;;;;;:::o;9288:358::-;9450:71;9472:6;9450:71;;;;;;;;;;;;;;;;;:9;:17;9460:6;9450:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9430:9;:17;9440:6;9430:17;;;;;;;;;;;;;;;:91;;;;9555:32;9580:6;9555:9;:20;9565:9;9555:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9532:9;:20;9542:9;9532:20;;;;;;;;;;;;;;;:55;;;;9620:9;9603:35;;9612:6;9603:35;;;9631:6;9603:35;;;;;;:::i;:::-;;;;;;;;9288:358;;;:::o;32004:1606::-;32043:28;32074:24;32092:4;32074:9;:24::i;:::-;32043:55;;32109:14;32167:20;;32147:17;;32126:18;;:38;;;;:::i;:::-;:61;;;;:::i;:::-;32109:78;;32198:12;32251:1;32227:20;:25;:40;;;;32266:1;32256:6;:11;32227:40;32223:57;;;32271:7;;;;;32223:57;32341:2;32319:19;;:24;;;;:::i;:::-;32296:20;:47;32292:127;;;32405:2;32383:19;;:24;;;;:::i;:::-;32360:47;;32292:127;32480:23;32559:1;32550:6;32529:18;;32506:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32480:80;;32571:26;32600:41;32625:15;32600:20;:24;;:41;;;;:::i;:::-;32571:70;;32655:25;32683:21;32655:49;;32717:36;32734:18;32717:16;:36::i;:::-;32768:18;32789:44;32815:17;32789:21;:25;;:44;;;;:::i;:::-;32768:65;;32847:22;32872:45;32910:6;32872:33;32887:17;;32872:10;:14;;:33;;;;:::i;:::-;:37;;:45;;;;:::i;:::-;32847:70;;32928:25;32956:48;32997:6;32956:36;32971:20;;32956:10;:14;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;32928:76;;33015:23;33072:17;33055:14;:34;;;;:::i;:::-;33041:10;:49;;;;:::i;:::-;33015:75;;33126:1;33105:18;:22;;;;33158:1;33138:17;:21;;;;33193:1;33170:20;:24;;;;33231:1;33213:15;:19;:42;;;;;33254:1;33236:15;:19;33213:42;33209:192;;;33272:46;33285:15;33302;33272:12;:46::i;:::-;33338:51;33353:18;33373:15;33338:51;;;;;;;:::i;:::-;;;;;;;;33209:192;33434:17;;;;;;;;;;;33426:31;;33491:14;33467:21;:38;;;;:::i;:::-;33426:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33413:100;;;;;33545:14;;;;;;;;;;;33537:28;;33574:21;33537:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33524:78;;;;;32032:1578;;;;;;;;;;32004:1606;:::o;11498:256::-;11555:7;11590:1;11585;:6;11581:47;;;11615:1;11608:8;;;;11581:47;11641:9;11657:1;11653;:5;;;;:::i;:::-;11641:17;;11686:1;11681;11677;:5;;;;:::i;:::-;:10;11669:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11745:1;11738:8;;;11498:256;;;;;:::o;11765:131::-;11822:7;11849:39;11853:1;11856;11849:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11842:46;;11765:131;;;;:::o;11151:135::-;11208:7;11235:43;11239:1;11242;11235:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11228:50;;11151:135;;;;:::o;31084:554::-;31208:21;31246:1;31232:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31208:40;;31277:4;31259;31264:1;31259:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31303:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31293:4;31298:1;31293:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31329:49;31346:4;31361:6;31370:7;31329:8;:49::i;:::-;31417:6;:57;;;31489:7;31511:1;31555:4;31582;31602:15;31417:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31135:503;31084:554;:::o;31646:350::-;31790:49;31807:4;31822:6;31831:7;31790:8;:49::i;:::-;31882:6;:22;;;31913:9;31934:4;31941:7;31950:1;31953;31965:4;31972:15;31882:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31646:350;;:::o;11908:277::-;11993:7;12025:1;12021;:5;12028:12;12013:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12052:9;12068:1;12064;:5;;;;:::i;:::-;12052:17;;12176:1;12169:8;;;11908: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::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6306:118;;:::o;6430:222::-;6523:4;6561:2;6550:9;6546:18;6538:26;;6574:71;6642:1;6631:9;6627:17;6618:6;6574:71;:::i;:::-;6430:222;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:468::-;7058:6;7066;7115:2;7103:9;7094:7;7090:23;7086:32;7083:119;;;7121:79;;:::i;:::-;7083:119;7241:1;7266:53;7311:7;7302:6;7291:9;7287:22;7266:53;:::i;:::-;7256:63;;7212:117;7368:2;7394:50;7436:7;7427:6;7416:9;7412:22;7394:50;:::i;:::-;7384:60;;7339:115;6993:468;;;;;:::o;7467:1057::-;7571:6;7579;7587;7595;7603;7611;7660:3;7648:9;7639:7;7635:23;7631:33;7628:120;;;7667:79;;:::i;:::-;7628:120;7787:1;7812:53;7857:7;7848:6;7837:9;7833:22;7812:53;:::i;:::-;7802:63;;7758:117;7914:2;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7885:118;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;8170:2;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8141:118;8298:3;8325:53;8370:7;8361:6;8350:9;8346:22;8325:53;:::i;:::-;8315:63;;8269:119;8427:3;8454:53;8499:7;8490:6;8479:9;8475:22;8454:53;:::i;:::-;8444:63;;8398:119;7467:1057;;;;;;;;:::o;8530:997::-;8819:4;8857:3;8846:9;8842:19;8834:27;;8871:71;8939:1;8928:9;8924:17;8915:6;8871:71;:::i;:::-;8952:72;9020:2;9009:9;9005:18;8996:6;8952:72;:::i;:::-;9034;9102:2;9091:9;9087:18;9078:6;9034:72;:::i;:::-;9116;9184:2;9173:9;9169:18;9160:6;9116:72;:::i;:::-;9198:73;9266:3;9255:9;9251:19;9242:6;9198:73;:::i;:::-;9281;9349:3;9338:9;9334:19;9325:6;9281:73;:::i;:::-;9364;9432:3;9421:9;9417:19;9408:6;9364:73;:::i;:::-;9447;9515:3;9504:9;9500:19;9491:6;9447:73;:::i;:::-;8530:997;;;;;;;;;;;:::o;9533:474::-;9601:6;9609;9658:2;9646:9;9637:7;9633:23;9629:32;9626:119;;;9664:79;;:::i;:::-;9626:119;9784:1;9809:53;9854:7;9845:6;9834:9;9830:22;9809:53;:::i;:::-;9799:63;;9755:117;9911:2;9937:53;9982:7;9973:6;9962:9;9958:22;9937:53;:::i;:::-;9927:63;;9882:118;9533:474;;;;;:::o;10013:60::-;10041:3;10062:5;10055:12;;10013:60;;;:::o;10079:142::-;10129:9;10162:53;10180:34;10189:24;10207:5;10189:24;:::i;:::-;10180:34;:::i;:::-;10162:53;:::i;:::-;10149:66;;10079:142;;;:::o;10227:126::-;10277:9;10310:37;10341:5;10310:37;:::i;:::-;10297:50;;10227:126;;;:::o;10359:153::-;10436:9;10469:37;10500:5;10469:37;:::i;:::-;10456:50;;10359:153;;;:::o;10518:185::-;10632:64;10690:5;10632:64;:::i;:::-;10627:3;10620:77;10518:185;;:::o;10709:276::-;10829:4;10867:2;10856:9;10852:18;10844:26;;10880:98;10975:1;10964:9;10960:17;10951:6;10880:98;:::i;:::-;10709:276;;;;:::o;10991:180::-;11039:77;11036:1;11029:88;11136:4;11133:1;11126:15;11160:4;11157:1;11150:15;11177:320;11221:6;11258:1;11252:4;11248:12;11238:22;;11305:1;11299:4;11295:12;11326:18;11316:81;;11382:4;11374:6;11370:17;11360:27;;11316:81;11444:2;11436:6;11433:14;11413:18;11410:38;11407:84;;;11463:18;;:::i;:::-;11407:84;11228:269;11177:320;;;:::o;11503:182::-;11643:34;11639:1;11631:6;11627:14;11620:58;11503:182;:::o;11691:366::-;11833:3;11854:67;11918:2;11913:3;11854:67;:::i;:::-;11847:74;;11930:93;12019:3;11930:93;:::i;:::-;12048:2;12043:3;12039:12;12032:19;;11691:366;;;:::o;12063:419::-;12229:4;12267:2;12256:9;12252:18;12244:26;;12316:9;12310:4;12306:20;12302:1;12291:9;12287:17;12280:47;12344:131;12470:4;12344:131;:::i;:::-;12336:139;;12063:419;;;:::o;12488:180::-;12536:77;12533:1;12526:88;12633:4;12630:1;12623:15;12657:4;12654:1;12647:15;12674:348;12714:7;12737:20;12755:1;12737:20;:::i;:::-;12732:25;;12771:20;12789:1;12771:20;:::i;:::-;12766:25;;12959:1;12891:66;12887:74;12884:1;12881:81;12876:1;12869:9;12862:17;12858:105;12855:131;;;12966:18;;:::i;:::-;12855:131;13014:1;13011;13007:9;12996:20;;12674:348;;;;:::o;13028:180::-;13076:77;13073:1;13066:88;13173:4;13170:1;13163:15;13197:4;13194:1;13187:15;13214:185;13254:1;13271:20;13289:1;13271:20;:::i;:::-;13266:25;;13305:20;13323:1;13305:20;:::i;:::-;13300:25;;13344:1;13334:35;;13349:18;;:::i;:::-;13334:35;13391:1;13388;13384:9;13379:14;;13214:185;;;;:::o;13405:305::-;13445:3;13464:20;13482:1;13464:20;:::i;:::-;13459:25;;13498:20;13516:1;13498:20;:::i;:::-;13493:25;;13652:1;13584:66;13580:74;13577:1;13574:81;13571:107;;;13658:18;;:::i;:::-;13571:107;13702:1;13699;13695:9;13688:16;;13405:305;;;;:::o;13716:179::-;13856:31;13852:1;13844:6;13840:14;13833:55;13716:179;:::o;13901:366::-;14043:3;14064:67;14128:2;14123:3;14064:67;:::i;:::-;14057:74;;14140:93;14229:3;14140:93;:::i;:::-;14258:2;14253:3;14249:12;14242:19;;13901:366;;;:::o;14273:419::-;14439:4;14477:2;14466:9;14462:18;14454:26;;14526:9;14520:4;14516:20;14512:1;14501:9;14497:17;14490:47;14554:131;14680:4;14554:131;:::i;:::-;14546:139;;14273:419;;;:::o;14698:179::-;14838:31;14834:1;14826:6;14822:14;14815:55;14698:179;:::o;14883:366::-;15025:3;15046:67;15110:2;15105:3;15046:67;:::i;:::-;15039:74;;15122:93;15211:3;15122:93;:::i;:::-;15240:2;15235:3;15231:12;15224:19;;14883:366;;;:::o;15255:419::-;15421:4;15459:2;15448:9;15444:18;15436:26;;15508:9;15502:4;15498:20;15494:1;15483:9;15479:17;15472:47;15536:131;15662:4;15536:131;:::i;:::-;15528:139;;15255:419;;;:::o;15680:229::-;15820:34;15816:1;15808:6;15804:14;15797:58;15889:12;15884:2;15876:6;15872:15;15865:37;15680:229;:::o;15915:366::-;16057:3;16078:67;16142:2;16137:3;16078:67;:::i;:::-;16071:74;;16154:93;16243:3;16154:93;:::i;:::-;16272:2;16267:3;16263:12;16256:19;;15915:366;;;:::o;16287:419::-;16453:4;16491:2;16480:9;16476:18;16468:26;;16540:9;16534:4;16530:20;16526:1;16515:9;16511:17;16504:47;16568:131;16694:4;16568:131;:::i;:::-;16560:139;;16287:419;;;:::o;16712:225::-;16852:34;16848:1;16840:6;16836:14;16829:58;16921:8;16916:2;16908:6;16904:15;16897:33;16712:225;:::o;16943:366::-;17085:3;17106:67;17170:2;17165:3;17106:67;:::i;:::-;17099:74;;17182:93;17271:3;17182:93;:::i;:::-;17300:2;17295:3;17291:12;17284:19;;16943:366;;;:::o;17315:419::-;17481:4;17519:2;17508:9;17504:18;17496:26;;17568:9;17562:4;17558:20;17554:1;17543:9;17539:17;17532:47;17596:131;17722:4;17596:131;:::i;:::-;17588:139;;17315:419;;;:::o;17740:177::-;17880:29;17876:1;17868:6;17864:14;17857:53;17740:177;:::o;17923:366::-;18065:3;18086:67;18150:2;18145:3;18086:67;:::i;:::-;18079:74;;18162:93;18251:3;18162:93;:::i;:::-;18280:2;18275:3;18271:12;18264:19;;17923:366;;;:::o;18295:419::-;18461:4;18499:2;18488:9;18484:18;18476:26;;18548:9;18542:4;18538:20;18534:1;18523:9;18519:17;18512:47;18576:131;18702:4;18576:131;:::i;:::-;18568:139;;18295:419;;;:::o;18720:172::-;18860:24;18856:1;18848:6;18844:14;18837:48;18720:172;:::o;18898:366::-;19040:3;19061:67;19125:2;19120:3;19061:67;:::i;:::-;19054:74;;19137:93;19226:3;19137:93;:::i;:::-;19255:2;19250:3;19246:12;19239:19;;18898:366;;;:::o;19270:419::-;19436:4;19474:2;19463:9;19459:18;19451:26;;19523:9;19517:4;19513:20;19509:1;19498:9;19494:17;19487:47;19551:131;19677:4;19551:131;:::i;:::-;19543:139;;19270:419;;;:::o;19695:240::-;19835:34;19831:1;19823:6;19819:14;19812:58;19904:23;19899:2;19891:6;19887:15;19880:48;19695:240;:::o;19941:366::-;20083:3;20104:67;20168:2;20163:3;20104:67;:::i;:::-;20097:74;;20180:93;20269:3;20180:93;:::i;:::-;20298:2;20293:3;20289:12;20282:19;;19941:366;;;:::o;20313:419::-;20479:4;20517:2;20506:9;20502:18;20494:26;;20566:9;20560:4;20556:20;20552:1;20541:9;20537:17;20530:47;20594:131;20720:4;20594:131;:::i;:::-;20586:139;;20313:419;;;:::o;20738:241::-;20878:34;20874:1;20866:6;20862:14;20855:58;20947:24;20942:2;20934:6;20930:15;20923:49;20738:241;:::o;20985:366::-;21127:3;21148:67;21212:2;21207:3;21148:67;:::i;:::-;21141:74;;21224:93;21313:3;21224:93;:::i;:::-;21342:2;21337:3;21333:12;21326:19;;20985:366;;;:::o;21357:419::-;21523:4;21561:2;21550:9;21546:18;21538:26;;21610:9;21604:4;21600:20;21596:1;21585:9;21581:17;21574:47;21638:131;21764:4;21638:131;:::i;:::-;21630:139;;21357:419;;;:::o;21782:169::-;21922:21;21918:1;21910:6;21906:14;21899:45;21782:169;:::o;21957:366::-;22099:3;22120:67;22184:2;22179:3;22120:67;:::i;:::-;22113:74;;22196:93;22285:3;22196:93;:::i;:::-;22314:2;22309:3;22305:12;22298:19;;21957:366;;;:::o;22329:419::-;22495:4;22533:2;22522:9;22518:18;22510:26;;22582:9;22576:4;22572:20;22568:1;22557:9;22553:17;22546:47;22610:131;22736:4;22610:131;:::i;:::-;22602:139;;22329:419;;;:::o;22754:191::-;22794:4;22814:20;22832:1;22814:20;:::i;:::-;22809:25;;22848:20;22866:1;22848:20;:::i;:::-;22843:25;;22887:1;22884;22881:8;22878:34;;;22892:18;;:::i;:::-;22878:34;22937:1;22934;22930:9;22922:17;;22754:191;;;;:::o;22951:332::-;23072:4;23110:2;23099:9;23095:18;23087:26;;23123:71;23191:1;23180:9;23176:17;23167:6;23123:71;:::i;:::-;23204:72;23272:2;23261:9;23257:18;23248:6;23204:72;:::i;:::-;22951:332;;;;;:::o;23289:147::-;23390:11;23427:3;23412:18;;23289:147;;;;:::o;23442:114::-;;:::o;23562:398::-;23721:3;23742:83;23823:1;23818:3;23742:83;:::i;:::-;23735:90;;23834:93;23923:3;23834:93;:::i;:::-;23952:1;23947:3;23943:11;23936:18;;23562:398;;;:::o;23966:379::-;24150:3;24172:147;24315:3;24172:147;:::i;:::-;24165:154;;24336:3;24329:10;;23966:379;;;:::o;24351:220::-;24491:34;24487:1;24479:6;24475:14;24468:58;24560:3;24555:2;24547:6;24543:15;24536:28;24351:220;:::o;24577:366::-;24719:3;24740:67;24804:2;24799:3;24740:67;:::i;:::-;24733:74;;24816:93;24905:3;24816:93;:::i;:::-;24934:2;24929:3;24925:12;24918:19;;24577:366;;;:::o;24949:419::-;25115:4;25153:2;25142:9;25138:18;25130:26;;25202:9;25196:4;25192:20;25188:1;25177:9;25173:17;25166:47;25230:131;25356:4;25230:131;:::i;:::-;25222:139;;24949:419;;;:::o;25374:180::-;25422:77;25419:1;25412:88;25519:4;25516:1;25509:15;25543:4;25540:1;25533:15;25560:180;25608:77;25605:1;25598:88;25705:4;25702:1;25695:15;25729:4;25726:1;25719:15;25746:143;25803:5;25834:6;25828:13;25819:22;;25850:33;25877:5;25850:33;:::i;:::-;25746:143;;;;:::o;25895:351::-;25965:6;26014:2;26002:9;25993:7;25989:23;25985:32;25982:119;;;26020:79;;:::i;:::-;25982:119;26140:1;26165:64;26221:7;26212:6;26201:9;26197:22;26165:64;:::i;:::-;26155:74;;26111:128;25895:351;;;;:::o;26252:85::-;26297:7;26326:5;26315:16;;26252:85;;;:::o;26343:158::-;26401:9;26434:61;26452:42;26461:32;26487:5;26461:32;:::i;:::-;26452:42;:::i;:::-;26434:61;:::i;:::-;26421:74;;26343:158;;;:::o;26507:147::-;26602:45;26641:5;26602:45;:::i;:::-;26597:3;26590:58;26507:147;;:::o;26660:114::-;26727:6;26761:5;26755:12;26745:22;;26660:114;;;:::o;26780:184::-;26879:11;26913:6;26908:3;26901:19;26953:4;26948:3;26944:14;26929:29;;26780:184;;;;:::o;26970:132::-;27037:4;27060:3;27052:11;;27090:4;27085:3;27081:14;27073:22;;26970:132;;;:::o;27108:108::-;27185:24;27203:5;27185:24;:::i;:::-;27180:3;27173:37;27108:108;;:::o;27222:179::-;27291:10;27312:46;27354:3;27346:6;27312:46;:::i;:::-;27390:4;27385:3;27381:14;27367:28;;27222:179;;;;:::o;27407:113::-;27477:4;27509;27504:3;27500:14;27492:22;;27407:113;;;:::o;27556:732::-;27675:3;27704:54;27752:5;27704:54;:::i;:::-;27774:86;27853:6;27848:3;27774:86;:::i;:::-;27767:93;;27884:56;27934:5;27884:56;:::i;:::-;27963:7;27994:1;27979:284;28004:6;28001:1;27998:13;27979:284;;;28080:6;28074:13;28107:63;28166:3;28151:13;28107:63;:::i;:::-;28100:70;;28193:60;28246:6;28193:60;:::i;:::-;28183:70;;28039:224;28026:1;28023;28019:9;28014:14;;27979:284;;;27983:14;28279:3;28272:10;;27680:608;;;27556:732;;;;:::o;28294:831::-;28557:4;28595:3;28584:9;28580:19;28572:27;;28609:71;28677:1;28666:9;28662:17;28653:6;28609:71;:::i;:::-;28690:80;28766:2;28755:9;28751:18;28742:6;28690:80;:::i;:::-;28817:9;28811:4;28807:20;28802:2;28791:9;28787:18;28780:48;28845:108;28948:4;28939:6;28845:108;:::i;:::-;28837:116;;28963:72;29031:2;29020:9;29016:18;29007:6;28963:72;:::i;:::-;29045:73;29113:3;29102:9;29098:19;29089:6;29045:73;:::i;:::-;28294:831;;;;;;;;:::o;29131:807::-;29380:4;29418:3;29407:9;29403:19;29395:27;;29432:71;29500:1;29489:9;29485:17;29476:6;29432:71;:::i;:::-;29513:72;29581:2;29570:9;29566:18;29557:6;29513:72;:::i;:::-;29595:80;29671:2;29660:9;29656:18;29647:6;29595:80;:::i;:::-;29685;29761:2;29750:9;29746:18;29737:6;29685:80;:::i;:::-;29775:73;29843:3;29832:9;29828:19;29819:6;29775:73;:::i;:::-;29858;29926:3;29915:9;29911:19;29902:6;29858:73;:::i;:::-;29131:807;;;;;;;;;:::o;29944:143::-;30001:5;30032:6;30026:13;30017:22;;30048:33;30075:5;30048:33;:::i;:::-;29944:143;;;;:::o;30093:663::-;30181:6;30189;30197;30246:2;30234:9;30225:7;30221:23;30217:32;30214:119;;;30252:79;;:::i;:::-;30214:119;30372:1;30397:64;30453:7;30444:6;30433:9;30429:22;30397:64;:::i;:::-;30387:74;;30343:128;30510:2;30536:64;30592:7;30583:6;30572:9;30568:22;30536:64;:::i;:::-;30526:74;;30481:129;30649:2;30675:64;30731:7;30722:6;30711:9;30707:22;30675:64;:::i;:::-;30665:74;;30620:129;30093:663;;;;;:::o

Swarm Source

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