ETH Price: $3,033.43 (+0.32%)
Gas: 3 Gwei

Token

Baby VLaunch (BABYVPAD)
 

Overview

Max Total Supply

1,000,000,000 BABYVPAD

Holders

130

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,988,335.884462879 BABYVPAD

Value
$0.00
0x81f88aae9b36f26e8f3b127dbcdf4e18c46cfcca
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:
BabyVLaunch

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

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



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        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;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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

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

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

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

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

// pragma solidity >=0.6.2;

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

/*
To be modified before deploying this contract for a project:
- Uniswap Router address if not on ETH
- Dev address
*/

contract BabyVLaunch is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMax;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) isBlacklisted;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1 * 10**9 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    address private _devAddress = 0xb994a426D0A9f1343123db79c2a55a3dDaE03377;
    address private _burnAddress = 0x0000000000000000000000000000000000000001;

    string private _name = "Baby VLaunch";
    string private _symbol = "BABYVPAD";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _devFee = 10;
    uint256 private _previousDevFee = _devFee;

    uint256 public _burnFee = 2;
    uint256 private _previousBurnFee = _burnFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
        
    uint256 public _maxTxAmount = _tTotal.div(200).mul(1);
    uint256 public _maxWalletToken = _tTotal.div(100).mul(1);
        
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // exclude owner, dev wallet, and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_devAddress] = true;

        _isExcludedFromMax[owner()] = true;
        _isExcludedFromMax[address(this)] = true;
        _isExcludedFromMax[_devAddress] = true;
        _isExcludedFromMax[uniswapV2Pair] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setIsBlacklisted(address holder, bool exempt) external onlyOwner() {
        isBlacklisted[holder] = exempt;
    }

    function isExcludedFromMax(address holder, bool exempt) external onlyOwner() {
        _isExcludedFromMax[holder] = exempt;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function burnAddress() public view returns (address) {
        return _burnAddress;
    }

    function devAddress() public view returns (address) {
        return _devAddress;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");

        (,uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount,,) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate());
        
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        
        (,uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount,) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate());

        if (!deductTransferFee) {
            return rAmount;
        } else {
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
        
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate());

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeDevFee(tDev);
        _takeBurnFee(tBurn);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
        
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setMaxWalletPercent(uint256 maxWalletToken) external onlyOwner() {
        _maxWalletToken = _tTotal.mul(maxWalletToken).div(
            10**2
        );
    }
    
     //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tDev = calculateDevFee(tAmount);
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tDev);
                tTransferAmount = tTransferAmount.sub(tBurn);

        return (tTransferAmount, tFee, tDev, tBurn);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tDev, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rDev = tDev.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rDev).sub(rBurn);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeDevFee(uint256 tDev) private {
        uint256 currentRate =  _getRate();
        uint256 rDev = tDev.mul(currentRate);
        _rOwned[_devAddress] = _rOwned[_devAddress].add(rDev);
        if(_isExcluded[_devAddress])
            _tOwned[_devAddress] = _tOwned[_devAddress].add(tDev);
    }

    function _takeBurnFee(uint256 tBurn) private {
        uint256 currentRate =  _getRate();
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[_burnAddress] = _rOwned[_burnAddress].add(rBurn);
        if(_isExcluded[_burnAddress])
            _tOwned[_burnAddress] = _tOwned[_burnAddress].add(tBurn);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateDevFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devFee).div(
            10**2
        );
    }

    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _devFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousDevFee = _devFee;
        _previousBurnFee = _burnFee;
        
        _taxFee = 0;
        _devFee = 0;
        _burnFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _devFee = _previousDevFee;
        _burnFee = _previousBurnFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isBlacklisted[from], "Blacklisted address");

        if(!_isExcludedFromMax[from] || !_isExcludedFromMax[to]) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            uint256 heldTokens = balanceOf(to);
            require((heldTokens + amount) <= _maxWalletToken, "Total Holding is currently limited, you can not buy that much.");
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate());
        
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeDevFee(tDev);
        _takeBurnFee(tBurn);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate());

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeDevFee(tDev);
        _takeBurnFee(tBurn);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate());

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeDevFee(tDev);
        _takeBurnFee(tBurn);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

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":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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"isExcludedFromMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletToken","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052670de0b6b3a7640000600b55600b54600019816200001e57fe5b0660001903600c5573b994a426d0a9f1343123db79c2a55a3ddae03377600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600c81526020017f4261627920564c61756e63680000000000000000000000000000000000000000815250601090805190602001906200010a92919062000abb565b506040518060400160405280600881526020017f4241425956504144000000000000000000000000000000000000000000000000815250601190805190602001906200015892919062000abb565b506009601260006101000a81548160ff021916908360ff1602179055506002601355601354601455600a6015556015546016556002601755601754601855620001cd6001620001b960c8600b54620008e260201b62002e411790919060201c565b6200093460201b62002e8b1790919060201c565b601a55620002076001620001f36064600b54620008e260201b62002e411790919060201c565b6200093460201b62002e8b1790919060201c565b601b553480156200021757600080fd5b5060006200022a620009bf60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c5460036000620002df620009bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037d57600080fd5b505afa15801562000392573d6000803e3d6000fd5b505050506040513d6020811015620003a957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041d57600080fd5b505afa15801562000432573d6000803e3d6000fd5b505050506040513d60208110156200044957600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004c457600080fd5b505af1158015620004d9573d6000803e3d6000fd5b505050506040513d6020811015620004f057600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600660006200058e620009c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620006c7620009c760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000874620009bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35062000b61565b60006200092c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620009f060201b60201c565b905092915050565b600080831415620009495760009050620009b9565b60008284029050828482816200095b57fe5b0414620009b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062005c856021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000aa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000a6457808201518184015260208101905062000a47565b50505050905090810190601f16801562000a925780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000aad57fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000afe57805160ff191683800117855562000b2f565b8280016001018555821562000b2f579182015b8281111562000b2e57825182559160200191906001019062000b11565b5b50905062000b3e919062000b42565b5090565b5b8082111562000b5d57600081600090555060010162000b43565b5090565b60805160601c61510662000b7f6000398061103a52506151066000f3fe60806040526004361061024a5760003560e01c806370d5ae0511610139578063a457c2d7116100b6578063c0b0fda21161007a578063c0b0fda214610cd4578063d543dbeb14610cff578063dd46706414610d3a578063dd62ed3e14610d75578063ea2f0b3714610dfa578063f2fde38b14610e4b57610251565b8063a457c2d714610b85578063a69df4b514610bf6578063a9059cbb14610c0d578063aa45026b14610c7e578063b6c5232414610ca957610251565b806382bf293c116100fd57806382bf293c146109b557806388f82020146109f05780638da5cb5b14610a5757806395d89b4114610a98578063a0e3849214610b2857610251565b806370d5ae05146108aa578063715018a6146108eb57806378109e54146109025780637d1db4a51461092d5780637fef35941461095857610251565b806339509351116101c75780634549b0391161018b5780634549b039146106f157806349bd5a5e1461074c57806352390c021461078d5780635342acb4146107de57806370a082311461084557610251565b806339509351146105885780633ad10ef6146105f95780633b124fe71461063a5780633bd5d17314610665578063437823ec146106a057610251565b806318160ddd1161020e57806318160ddd146103fe57806323b872dd146104295780632d838119146104ba578063313ce567146105095780633685d4191461053757610251565b8063061c82d01461025657806306fdde0314610291578063095ea7b31461032157806313114a9d146103925780631694505e146103bd57610251565b3661025157005b600080fd5b34801561026257600080fd5b5061028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610e9c565b005b34801561029d57600080fd5b506102a6610f6e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e65780820151818401526020810190506102cb565b50505050905090810190601f1680156103135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032d57600080fd5b5061037a6004803603604081101561034457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611010565b60405180821515815260200191505060405180910390f35b34801561039e57600080fd5b506103a761102e565b6040518082815260200191505060405180910390f35b3480156103c957600080fd5b506103d2611038565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040a57600080fd5b5061041361105c565b6040518082815260200191505060405180910390f35b34801561043557600080fd5b506104a26004803603606081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611066565b60405180821515815260200191505060405180910390f35b3480156104c657600080fd5b506104f3600480360360208110156104dd57600080fd5b810190808035906020019092919050505061113f565b6040518082815260200191505060405180910390f35b34801561051557600080fd5b5061051e6111c3565b604051808260ff16815260200191505060405180910390f35b34801561054357600080fd5b506105866004803603602081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111da565b005b34801561059457600080fd5b506105e1600480360360408110156105ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611564565b60405180821515815260200191505060405180910390f35b34801561060557600080fd5b5061060e611617565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064657600080fd5b5061064f611641565b6040518082815260200191505060405180910390f35b34801561067157600080fd5b5061069e6004803603602081101561068857600080fd5b8101908080359060200190929190505050611647565b005b3480156106ac57600080fd5b506106ef600480360360208110156106c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f8565b005b3480156106fd57600080fd5b506107366004803603604081101561071457600080fd5b810190808035906020019092919080351515906020019092919050505061191b565b6040518082815260200191505060405180910390f35b34801561075857600080fd5b506107616119e7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079957600080fd5b506107dc600480360360208110156107b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a0d565b005b3480156107ea57600080fd5b5061082d6004803603602081101561080157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d27565b60405180821515815260200191505060405180910390f35b34801561085157600080fd5b506108946004803603602081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d7d565b6040518082815260200191505060405180910390f35b3480156108b657600080fd5b506108bf611e68565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108f757600080fd5b50610900611e92565b005b34801561090e57600080fd5b50610917612018565b6040518082815260200191505060405180910390f35b34801561093957600080fd5b5061094261201e565b6040518082815260200191505060405180910390f35b34801561096457600080fd5b506109b36004803603604081101561097b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612024565b005b3480156109c157600080fd5b506109ee600480360360208110156109d857600080fd5b8101908080359060200190929190505050612147565b005b3480156109fc57600080fd5b50610a3f60048036036020811015610a1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612240565b60405180821515815260200191505060405180910390f35b348015610a6357600080fd5b50610a6c612296565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa457600080fd5b50610aad6122bf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aed578082015181840152602081019050610ad2565b50505050905090810190601f168015610b1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3457600080fd5b50610b8360048036036040811015610b4b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612361565b005b348015610b9157600080fd5b50610bde60048036036040811015610ba857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612484565b60405180821515815260200191505060405180910390f35b348015610c0257600080fd5b50610c0b612551565b005b348015610c1957600080fd5b50610c6660048036036040811015610c3057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061276e565b60405180821515815260200191505060405180910390f35b348015610c8a57600080fd5b50610c9361278c565b6040518082815260200191505060405180910390f35b348015610cb557600080fd5b50610cbe612792565b6040518082815260200191505060405180910390f35b348015610ce057600080fd5b50610ce961279c565b6040518082815260200191505060405180910390f35b348015610d0b57600080fd5b50610d3860048036036020811015610d2257600080fd5b81019080803590602001909291905050506127a2565b005b348015610d4657600080fd5b50610d7360048036036020811015610d5d57600080fd5b810190808035906020019092919050505061289b565b005b348015610d8157600080fd5b50610de460048036036040811015610d9857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a8c565b6040518082815260200191505060405180910390f35b348015610e0657600080fd5b50610e4960048036036020811015610e1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b13565b005b348015610e5757600080fd5b50610e9a60048036036020811015610e6e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c36565b005b610ea4612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b606060108054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110065780601f10610fdb57610100808354040283529160200191611006565b820191906000526020600020905b815481529060010190602001808311610fe957829003601f168201915b5050505050905090565b600061102461101d612f11565b8484612f19565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b6000611073848484613110565b6111348461107f612f11565b61112f85604051806060016040528060288152602001614f8560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110e5612f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b612f19565b600190509392505050565b6000600c5482111561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614eca602a913960400191505060405180910390fd5b60006111a6613627565b90506111bb8184612e4190919063ffffffff16565b915050919050565b6000601260009054906101000a900460ff16905090565b6111e2612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60005b600a80549050811015611560578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061139557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561155357600a6001600a8054905003815481106113f157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061142957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061151957fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611560565b8080600101915050611364565b5050565b600061160d611571612f11565b846116088560056000611582612f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b612f19565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6000611651612f11565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061505d602c913960400191505060405180910390fd5b6000806000611704856136da565b9350935093505060006117218685858561171c613627565b61375c565b5050905061177781600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117cf81600c5461381090919063ffffffff16565b600c819055506117ea86600d5461365290919063ffffffff16565b600d81905550505050505050565b611800612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54831115611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b60008060006119a3866136da565b935093509350506000806119c1888686866119bc613627565b61375c565b5091509150866119d85781955050505050506119e1565b80955050505050505b92915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a15612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c6957611c25600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e1857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e63565b611e60600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113f565b90505b919050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e9a612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b5481565b601a5481565b61202c612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61214f612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461220f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612237606461222983600b54612e8b90919063ffffffff16565b612e4190919063ffffffff16565b601b8190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123575780601f1061232c57610100808354040283529160200191612357565b820191906000526020600020905b81548152906001019060200180831161233a57829003601f168201915b5050505050905090565b612369612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612429576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000612547612491612f11565b84612542856040518060600160405280602581526020016150ac60259139600560006124bb612f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b612f19565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150896023913960400191505060405180910390fd5b600254421161266e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061278261277b612f11565b8484613110565b6001905092915050565b60155481565b6000600254905090565b60175481565b6127aa612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461286a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612892606461288483600b54612e8b90919063ffffffff16565b612e4190919063ffffffff16565b601a8190555050565b6128a3612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612963576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612b1b612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612c3e612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614ef46026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612e8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061385a565b905092915050565b600080831415612e9e5760009050612f0b565b6000828402905082848281612eaf57fe5b0414612f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f646021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806150396024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613025576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f1a6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613196576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806150146025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ea76023913960400191505060405180910390fd5b60008111613275576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fad6029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613335576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f426c61636b6c697374656420616464726573730000000000000000000000000081525060200191505060405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806133d85750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134a457601a54811115613438576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f3c6028913960400191505060405180910390fd5b600061344383611d7d565b9050601b5482820111156134a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614fd6603e913960400191505060405180910390fd5b505b600060019050600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061354b5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561355557600090505b61356184848484613920565b50505050565b6000838311158290613614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135d95780820151818401526020810190506135be565b50505050905090810190601f1680156136065780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613634613c31565b9150915061364b8183612e4190919063ffffffff16565b9250505090565b6000808284019050838110156136d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060006136eb86613ec2565b905060006136f887613ef3565b9050600061370588613f24565b9050600061372e83613720868c61381090919063ffffffff16565b61381090919063ffffffff16565b9050613743828261381090919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613775858a612e8b90919063ffffffff16565b9050600061378c868a612e8b90919063ffffffff16565b905060006137a3878a612e8b90919063ffffffff16565b905060006137ba888a612e8b90919063ffffffff16565b905060006137f5826137e7856137d9888a61381090919063ffffffff16565b61381090919063ffffffff16565b61381090919063ffffffff16565b90508481859750975097505050505050955095509592505050565b600061385283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613567565b905092915050565b60008083118290613906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138cb5780820151818401526020810190506138b0565b50505050905090810190601f1680156138f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161391257fe5b049050809150509392505050565b8061392e5761392d613f55565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139d15750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139e6576139e1848484613fa9565b613c1d565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a895750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a9e57613a9984848461422b565b613c1c565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b425750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b5757613b528484846144ad565b613c1b565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613bf95750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c0e57613c0984848461469a565b613c1a565b613c198484846144ad565b5b5b5b5b80613c2b57613c2a6149b1565b5b50505050565b6000806000600c5490506000600b54905060005b600a80549050811015613e85578260036000600a8481548110613c6457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613d4b57508160046000600a8481548110613ce357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d6257600c54600b5494509450505050613ebe565b613deb60036000600a8481548110613d7657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461381090919063ffffffff16565b9250613e7660046000600a8481548110613e0157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361381090919063ffffffff16565b91508080600101915050613c45565b50613e9d600b54600c54612e4190919063ffffffff16565b821015613eb557600c54600b54935093505050613ebe565b81819350935050505b9091565b6000613eec6064613ede60135485612e8b90919063ffffffff16565b612e4190919063ffffffff16565b9050919050565b6000613f1d6064613f0f60155485612e8b90919063ffffffff16565b612e4190919063ffffffff16565b9050919050565b6000613f4e6064613f4060175485612e8b90919063ffffffff16565b612e4190919063ffffffff16565b9050919050565b6000601354148015613f6957506000601554145b15613f7357613fa7565b6013546014819055506015546016819055506017546018819055506000601381905550600060158190555060006017819055505b565b600080600080613fb8856136da565b93509350935093506000806000613fd988878787613fd4613627565b61375c565b92509250925061403188600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140c683600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061415b82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141a7856149ce565b6141b084614c1d565b6141ba8187614e6c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b60008060008061423a856136da565b9350935093509350600080600061425b88878787614256613627565b61375c565b9250925092506142b383600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061434887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143dd82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614429856149ce565b61443284614c1d565b61443c8187614e6c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b6000806000806144bc856136da565b935093509350935060008060006144dd888787876144d8613627565b61375c565b92509250925061453583600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145ca82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614616856149ce565b61461f84614c1d565b6146298187614e6c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b6000806000806146a9856136da565b935093509350935060008060006146ca888787876146c5613627565b61375c565b92509250925061472288600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147b783600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061484c87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148e182600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061492d856149ce565b61493684614c1d565b6149408187614e6c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b601454601381905550601654601581905550601854601781905550565b60006149d8613627565b905060006149ef8284612e8b90919063ffffffff16565b9050614a658160036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b60036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060086000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614c1857614bb28360046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b60046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000614c27613627565b90506000614c3e8284612e8b90919063ffffffff16565b9050614cb48160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b60036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060086000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e6757614e018360046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b60046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e8182600c5461381090919063ffffffff16565b600c81905550614e9c81600d5461365290919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3f1230b199a0db6a2be5b4f762c8407716f20343c9faaf4a152bd9ec619283364736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77

Deployed Bytecode

0x60806040526004361061024a5760003560e01c806370d5ae0511610139578063a457c2d7116100b6578063c0b0fda21161007a578063c0b0fda214610cd4578063d543dbeb14610cff578063dd46706414610d3a578063dd62ed3e14610d75578063ea2f0b3714610dfa578063f2fde38b14610e4b57610251565b8063a457c2d714610b85578063a69df4b514610bf6578063a9059cbb14610c0d578063aa45026b14610c7e578063b6c5232414610ca957610251565b806382bf293c116100fd57806382bf293c146109b557806388f82020146109f05780638da5cb5b14610a5757806395d89b4114610a98578063a0e3849214610b2857610251565b806370d5ae05146108aa578063715018a6146108eb57806378109e54146109025780637d1db4a51461092d5780637fef35941461095857610251565b806339509351116101c75780634549b0391161018b5780634549b039146106f157806349bd5a5e1461074c57806352390c021461078d5780635342acb4146107de57806370a082311461084557610251565b806339509351146105885780633ad10ef6146105f95780633b124fe71461063a5780633bd5d17314610665578063437823ec146106a057610251565b806318160ddd1161020e57806318160ddd146103fe57806323b872dd146104295780632d838119146104ba578063313ce567146105095780633685d4191461053757610251565b8063061c82d01461025657806306fdde0314610291578063095ea7b31461032157806313114a9d146103925780631694505e146103bd57610251565b3661025157005b600080fd5b34801561026257600080fd5b5061028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610e9c565b005b34801561029d57600080fd5b506102a6610f6e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e65780820151818401526020810190506102cb565b50505050905090810190601f1680156103135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032d57600080fd5b5061037a6004803603604081101561034457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611010565b60405180821515815260200191505060405180910390f35b34801561039e57600080fd5b506103a761102e565b6040518082815260200191505060405180910390f35b3480156103c957600080fd5b506103d2611038565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040a57600080fd5b5061041361105c565b6040518082815260200191505060405180910390f35b34801561043557600080fd5b506104a26004803603606081101561044c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611066565b60405180821515815260200191505060405180910390f35b3480156104c657600080fd5b506104f3600480360360208110156104dd57600080fd5b810190808035906020019092919050505061113f565b6040518082815260200191505060405180910390f35b34801561051557600080fd5b5061051e6111c3565b604051808260ff16815260200191505060405180910390f35b34801561054357600080fd5b506105866004803603602081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111da565b005b34801561059457600080fd5b506105e1600480360360408110156105ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611564565b60405180821515815260200191505060405180910390f35b34801561060557600080fd5b5061060e611617565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064657600080fd5b5061064f611641565b6040518082815260200191505060405180910390f35b34801561067157600080fd5b5061069e6004803603602081101561068857600080fd5b8101908080359060200190929190505050611647565b005b3480156106ac57600080fd5b506106ef600480360360208110156106c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117f8565b005b3480156106fd57600080fd5b506107366004803603604081101561071457600080fd5b810190808035906020019092919080351515906020019092919050505061191b565b6040518082815260200191505060405180910390f35b34801561075857600080fd5b506107616119e7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079957600080fd5b506107dc600480360360208110156107b057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a0d565b005b3480156107ea57600080fd5b5061082d6004803603602081101561080157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d27565b60405180821515815260200191505060405180910390f35b34801561085157600080fd5b506108946004803603602081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d7d565b6040518082815260200191505060405180910390f35b3480156108b657600080fd5b506108bf611e68565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108f757600080fd5b50610900611e92565b005b34801561090e57600080fd5b50610917612018565b6040518082815260200191505060405180910390f35b34801561093957600080fd5b5061094261201e565b6040518082815260200191505060405180910390f35b34801561096457600080fd5b506109b36004803603604081101561097b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612024565b005b3480156109c157600080fd5b506109ee600480360360208110156109d857600080fd5b8101908080359060200190929190505050612147565b005b3480156109fc57600080fd5b50610a3f60048036036020811015610a1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612240565b60405180821515815260200191505060405180910390f35b348015610a6357600080fd5b50610a6c612296565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa457600080fd5b50610aad6122bf565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aed578082015181840152602081019050610ad2565b50505050905090810190601f168015610b1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b3457600080fd5b50610b8360048036036040811015610b4b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612361565b005b348015610b9157600080fd5b50610bde60048036036040811015610ba857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612484565b60405180821515815260200191505060405180910390f35b348015610c0257600080fd5b50610c0b612551565b005b348015610c1957600080fd5b50610c6660048036036040811015610c3057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061276e565b60405180821515815260200191505060405180910390f35b348015610c8a57600080fd5b50610c9361278c565b6040518082815260200191505060405180910390f35b348015610cb557600080fd5b50610cbe612792565b6040518082815260200191505060405180910390f35b348015610ce057600080fd5b50610ce961279c565b6040518082815260200191505060405180910390f35b348015610d0b57600080fd5b50610d3860048036036020811015610d2257600080fd5b81019080803590602001909291905050506127a2565b005b348015610d4657600080fd5b50610d7360048036036020811015610d5d57600080fd5b810190808035906020019092919050505061289b565b005b348015610d8157600080fd5b50610de460048036036040811015610d9857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a8c565b6040518082815260200191505060405180910390f35b348015610e0657600080fd5b50610e4960048036036020811015610e1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b13565b005b348015610e5757600080fd5b50610e9a60048036036020811015610e6e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c36565b005b610ea4612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b606060108054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110065780601f10610fdb57610100808354040283529160200191611006565b820191906000526020600020905b815481529060010190602001808311610fe957829003601f168201915b5050505050905090565b600061102461101d612f11565b8484612f19565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b6000611073848484613110565b6111348461107f612f11565b61112f85604051806060016040528060288152602001614f8560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110e5612f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b612f19565b600190509392505050565b6000600c5482111561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614eca602a913960400191505060405180910390fd5b60006111a6613627565b90506111bb8184612e4190919063ffffffff16565b915050919050565b6000601260009054906101000a900460ff16905090565b6111e2612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60005b600a80549050811015611560578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061139557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561155357600a6001600a8054905003815481106113f157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061142957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061151957fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611560565b8080600101915050611364565b5050565b600061160d611571612f11565b846116088560056000611582612f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b612f19565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6000611651612f11565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061505d602c913960400191505060405180910390fd5b6000806000611704856136da565b9350935093505060006117218685858561171c613627565b61375c565b5050905061177781600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117cf81600c5461381090919063ffffffff16565b600c819055506117ea86600d5461365290919063ffffffff16565b600d81905550505050505050565b611800612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54831115611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b60008060006119a3866136da565b935093509350506000806119c1888686866119bc613627565b61375c565b5091509150866119d85781955050505050506119e1565b80955050505050505b92915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a15612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c6957611c25600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e1857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e63565b611e60600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113f565b90505b919050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e9a612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601b5481565b601a5481565b61202c612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61214f612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461220f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612237606461222983600b54612e8b90919063ffffffff16565b612e4190919063ffffffff16565b601b8190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123575780601f1061232c57610100808354040283529160200191612357565b820191906000526020600020905b81548152906001019060200180831161233a57829003601f168201915b5050505050905090565b612369612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612429576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000612547612491612f11565b84612542856040518060600160405280602581526020016150ac60259139600560006124bb612f11565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135679092919063ffffffff16565b612f19565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150896023913960400191505060405180910390fd5b600254421161266e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061278261277b612f11565b8484613110565b6001905092915050565b60155481565b6000600254905090565b60175481565b6127aa612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461286a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612892606461288483600b54612e8b90919063ffffffff16565b612e4190919063ffffffff16565b601a8190555050565b6128a3612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612963576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612b1b612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bdb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612c3e612f11565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614ef46026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612e8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061385a565b905092915050565b600080831415612e9e5760009050612f0b565b6000828402905082848281612eaf57fe5b0414612f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f646021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806150396024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613025576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f1a6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613196576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806150146025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614ea76023913960400191505060405180910390fd5b60008111613275576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fad6029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613335576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f426c61636b6c697374656420616464726573730000000000000000000000000081525060200191505060405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615806133d85750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134a457601a54811115613438576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f3c6028913960400191505060405180910390fd5b600061344383611d7d565b9050601b5482820111156134a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180614fd6603e913960400191505060405180910390fd5b505b600060019050600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061354b5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561355557600090505b61356184848484613920565b50505050565b6000838311158290613614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135d95780820151818401526020810190506135be565b50505050905090810190601f1680156136065780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613634613c31565b9150915061364b8183612e4190919063ffffffff16565b9250505090565b6000808284019050838110156136d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060006136eb86613ec2565b905060006136f887613ef3565b9050600061370588613f24565b9050600061372e83613720868c61381090919063ffffffff16565b61381090919063ffffffff16565b9050613743828261381090919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613775858a612e8b90919063ffffffff16565b9050600061378c868a612e8b90919063ffffffff16565b905060006137a3878a612e8b90919063ffffffff16565b905060006137ba888a612e8b90919063ffffffff16565b905060006137f5826137e7856137d9888a61381090919063ffffffff16565b61381090919063ffffffff16565b61381090919063ffffffff16565b90508481859750975097505050505050955095509592505050565b600061385283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613567565b905092915050565b60008083118290613906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138cb5780820151818401526020810190506138b0565b50505050905090810190601f1680156138f85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161391257fe5b049050809150509392505050565b8061392e5761392d613f55565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139d15750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139e6576139e1848484613fa9565b613c1d565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613a895750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a9e57613a9984848461422b565b613c1c565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b425750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b5757613b528484846144ad565b613c1b565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613bf95750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c0e57613c0984848461469a565b613c1a565b613c198484846144ad565b5b5b5b5b80613c2b57613c2a6149b1565b5b50505050565b6000806000600c5490506000600b54905060005b600a80549050811015613e85578260036000600a8481548110613c6457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613d4b57508160046000600a8481548110613ce357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613d6257600c54600b5494509450505050613ebe565b613deb60036000600a8481548110613d7657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461381090919063ffffffff16565b9250613e7660046000600a8481548110613e0157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361381090919063ffffffff16565b91508080600101915050613c45565b50613e9d600b54600c54612e4190919063ffffffff16565b821015613eb557600c54600b54935093505050613ebe565b81819350935050505b9091565b6000613eec6064613ede60135485612e8b90919063ffffffff16565b612e4190919063ffffffff16565b9050919050565b6000613f1d6064613f0f60155485612e8b90919063ffffffff16565b612e4190919063ffffffff16565b9050919050565b6000613f4e6064613f4060175485612e8b90919063ffffffff16565b612e4190919063ffffffff16565b9050919050565b6000601354148015613f6957506000601554145b15613f7357613fa7565b6013546014819055506015546016819055506017546018819055506000601381905550600060158190555060006017819055505b565b600080600080613fb8856136da565b93509350935093506000806000613fd988878787613fd4613627565b61375c565b92509250925061403188600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140c683600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061415b82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141a7856149ce565b6141b084614c1d565b6141ba8187614e6c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b60008060008061423a856136da565b9350935093509350600080600061425b88878787614256613627565b61375c565b9250925092506142b383600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061434887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143dd82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614429856149ce565b61443284614c1d565b61443c8187614e6c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b6000806000806144bc856136da565b935093509350935060008060006144dd888787876144d8613627565b61375c565b92509250925061453583600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145ca82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614616856149ce565b61461f84614c1d565b6146298187614e6c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b6000806000806146a9856136da565b935093509350935060008060006146ca888787876146c5613627565b61375c565b92509250925061472288600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147b783600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461381090919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061484c87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148e182600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061492d856149ce565b61493684614c1d565b6149408187614e6c565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b601454601381905550601654601581905550601854601781905550565b60006149d8613627565b905060006149ef8284612e8b90919063ffffffff16565b9050614a658160036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b60036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060086000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614c1857614bb28360046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b60046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6000614c27613627565b90506000614c3e8284612e8b90919063ffffffff16565b9050614cb48160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b60036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060086000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e6757614e018360046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461365290919063ffffffff16565b60046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e8182600c5461381090919063ffffffff16565b600c81905550614e9c81600d5461365290919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f3f1230b199a0db6a2be5b4f762c8407716f20343c9faaf4a152bd9ec619283364736f6c634300060c0033

Deployed Bytecode Sourcemap

25734:17310:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33922:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28220:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29132:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30525:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27022:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28497:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29301:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31836:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28406:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32438:475;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29622:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30719:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26769:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30816:496;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33677:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31320:508;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27080:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32097:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37905:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28600:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30620:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16208:148;;;;;;;;;;;;;:::i;:::-;;27185:56;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27125:53;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30386:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34202:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30125:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15565:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28311:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30253:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29848:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17218:293;;;;;;;;;;;;;:::i;:::-;;28806:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26852:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16763:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26936:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34032:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16928:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28981:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33800:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16511:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33922:98;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34006:6:::1;33996:7;:16;;;;33922:98:::0;:::o;28220:83::-;28257:13;28290:5;28283:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28220:83;:::o;29132:161::-;29207:4;29224:39;29233:12;:10;:12::i;:::-;29247:7;29256:6;29224:8;:39::i;:::-;29281:4;29274:11;;29132:161;;;;:::o;30525:87::-;30567:7;30594:10;;30587:17;;30525:87;:::o;27022:51::-;;;:::o;28497:95::-;28550:7;28577;;28570:14;;28497:95;:::o;29301:313::-;29399:4;29416:36;29426:6;29434:9;29445:6;29416:9;:36::i;:::-;29463:121;29472:6;29480:12;:10;:12::i;:::-;29494:89;29532:6;29494:89;;;;;;;;;;;;;;;;;:11;:19;29506:6;29494:19;;;;;;;;;;;;;;;:33;29514:12;:10;:12::i;:::-;29494:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29463:8;:121::i;:::-;29602:4;29595:11;;29301:313;;;;;:::o;31836:253::-;31902:7;31941;;31930;:18;;31922:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32006:19;32029:10;:8;:10::i;:::-;32006:33;;32057:24;32069:11;32057:7;:11;;:24;;;;:::i;:::-;32050:31;;;31836:253;;;:::o;28406:83::-;28447:5;28472:9;;;;;;;;;;;28465:16;;28406:83;:::o;32438:475::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32520:11:::1;:20;32532:7;32520:20;;;;;;;;;;;;;;;;;;;;;;;;;32512:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32584:9;32579:327;32603:9;:16;;;;32599:1;:20;32579:327;;;32661:7;32645:23;;:9;32655:1;32645:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;32641:254;;;32704:9;32733:1;32714:9;:16;;;;:20;32704:31;;;;;;;;;;;;;;;;;;;;;;;;;32689:9;32699:1;32689:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32773:1;32754:7;:16;32762:7;32754:16;;;;;;;;;;;;;;;:20;;;;32816:5;32793:11;:20;32805:7;32793:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32840:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32874:5;;32641:254;32621:3;;;;;;;32579:327;;;;32438:475:::0;:::o;29622:218::-;29710:4;29727:83;29736:12;:10;:12::i;:::-;29750:7;29759:50;29798:10;29759:11;:25;29771:12;:10;:12::i;:::-;29759:25;;;;;;;;;;;;;;;:34;29785:7;29759:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29727:8;:83::i;:::-;29828:4;29821:11;;29622:218;;;;:::o;30719:89::-;30762:7;30789:11;;;;;;;;;;;30782:18;;30719:89;:::o;26769:26::-;;;;:::o;30816:496::-;30868:14;30885:12;:10;:12::i;:::-;30868:29;;30917:11;:19;30929:6;30917:19;;;;;;;;;;;;;;;;;;;;;;;;;30916:20;30908:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31000:12;31014;31028:13;31045:20;31057:7;31045:11;:20::i;:::-;30998:67;;;;;;;31077:15;31098:51;31110:7;31119:4;31125;31131:5;31138:10;:8;:10::i;:::-;31098:11;:51::i;:::-;31076:73;;;;31188:28;31208:7;31188;:15;31196:6;31188:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31170:7;:15;31178:6;31170:15;;;;;;;;;;;;;;;:46;;;;31237:20;31249:7;31237;;:11;;:20;;;;:::i;:::-;31227:7;:30;;;;31281:23;31296:7;31281:10;;:14;;:23;;;;:::i;:::-;31268:10;:36;;;;30816:496;;;;;;:::o;33677:111::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33776:4:::1;33746:18;:27;33765:7;33746:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33677:111:::0;:::o;31320:508::-;31410:7;31449;;31438;:18;;31430:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31515:12;31529;31543:13;31560:20;31572:7;31560:11;:20::i;:::-;31513:67;;;;;;;31592:15;31609:23;31637:51;31649:7;31658:4;31664;31670:5;31677:10;:8;:10::i;:::-;31637:11;:51::i;:::-;31591:97;;;;;31706:17;31701:120;;31747:7;31740:14;;;;;;;;;31701:120;31794:15;31787:22;;;;;;;31320:508;;;;;:::o;27080:28::-;;;;;;;;;;;;;:::o;32097:333::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32180:11:::1;:20;32192:7;32180:20;;;;;;;;;;;;;;;;;;;;;;;;;32179:21;32171:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32265:1;32246:7;:16;32254:7;32246:16;;;;;;;;;;;;;;;;:20;32243:108;;;32302:37;32322:7;:16;32330:7;32322:16;;;;;;;;;;;;;;;;32302:19;:37::i;:::-;32283:7;:16;32291:7;32283:16;;;;;;;;;;;;;;;:56;;;;32243:108;32384:4;32361:11;:20;32373:7;32361:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;32399:9;32414:7;32399:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32097:333:::0;:::o;37905:123::-;37969:4;37993:18;:27;38012:7;37993:27;;;;;;;;;;;;;;;;;;;;;;;;;37986:34;;37905:123;;;:::o;28600:198::-;28666:7;28690:11;:20;28702:7;28690:20;;;;;;;;;;;;;;;;;;;;;;;;;28686:49;;;28719:7;:16;28727:7;28719:16;;;;;;;;;;;;;;;;28712:23;;;;28686:49;28753:37;28773:7;:16;28781:7;28773:16;;;;;;;;;;;;;;;;28753:19;:37::i;:::-;28746:44;;28600:198;;;;:::o;30620:91::-;30664:7;30691:12;;;;;;;;;;;30684:19;;30620:91;:::o;16208:148::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16315:1:::1;16278:40;;16299:6;::::0;::::1;;;;;;;;16278:40;;;;;;;;;;;;16346:1;16329:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16208:148::o:0;27185:56::-;;;;:::o;27125:53::-;;;;:::o;30386:131::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30503:6:::1;30474:18;:26;30493:6;30474:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30386:131:::0;;:::o;34202:173::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34305:62:::1;34351:5;34305:27;34317:14;34305:7;;:11;;:27;;;;:::i;:::-;:31;;:62;;;;:::i;:::-;34287:15;:80;;;;34202:173:::0;:::o;30125:120::-;30193:4;30217:11;:20;30229:7;30217:20;;;;;;;;;;;;;;;;;;;;;;;;;30210:27;;30125:120;;;:::o;15565:79::-;15603:7;15630:6;;;;;;;;;;;15623:13;;15565:79;:::o;28311:87::-;28350:13;28383:7;28376:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28311:87;:::o;30253:125::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30364:6:::1;30340:13;:21;30354:6;30340:21;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;30253:125:::0;;:::o;29848:269::-;29941:4;29958:129;29967:12;:10;:12::i;:::-;29981:7;29990:96;30029:15;29990:96;;;;;;;;;;;;;;;;;:11;:25;30002:12;:10;:12::i;:::-;29990:25;;;;;;;;;;;;;;;:34;30016:7;29990:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29958:8;:129::i;:::-;30105:4;30098:11;;29848:269;;;;:::o;17218:293::-;17288:10;17270:28;;:14;;;;;;;;;;;:28;;;17262:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17363:9;;17357:3;:15;17349:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17454:14;;;;;;;;;;;17425:44;;17446:6;;;;;;;;;;17425:44;;;;;;;;;;;;17489:14;;;;;;;;;;;17480:6;;:23;;;;;;;;;;;;;;;;;;17218:293::o;28806:167::-;28884:4;28901:42;28911:12;:10;:12::i;:::-;28925:9;28936:6;28901:9;:42::i;:::-;28961:4;28954:11;;28806:167;;;;:::o;26852:27::-;;;;:::o;16763:89::-;16808:7;16835:9;;16828:16;;16763:89;:::o;26936:27::-;;;;:::o;34032:162::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34126:60:::1;34170:5;34126:25;34138:12;34126:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;34111:12;:75;;;;34032:162:::0;:::o;16928:214::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17009:6:::1;::::0;::::1;;;;;;;;16992:14;;:23;;;;;;;;;;;;;;;;;;17043:1;17026:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17074:4;17068:3;:10;17056:9;:22;;;;17131:1;17094:40;;17115:6;::::0;::::1;;;;;;;;17094:40;;;;;;;;;;;;16928:214:::0;:::o;28981:143::-;29062:7;29089:11;:18;29101:5;29089:18;;;;;;;;;;;;;;;:27;29108:7;29089:27;;;;;;;;;;;;;;;;29082:34;;28981:143;;;;:::o;33800:110::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33897:5:::1;33867:18;:27;33886:7;33867:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33800:110:::0;:::o;16511:244::-;15787:12;:10;:12::i;:::-;15777:22;;:6;;;;;;;;;;:22;;;15769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16620:1:::1;16600:22;;:8;:22;;;;16592:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16710:8;16681:38;;16702:6;::::0;::::1;;;;;;;;16681:38;;;;;;;;;;;;16739:8;16730:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16511:244:::0;:::o;5781:132::-;5839:7;5866:39;5870:1;5873;5866:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5859:46;;5781:132;;;;:::o;4834:471::-;4892:7;5142:1;5137;:6;5133:47;;;5167:1;5160:8;;;;5133:47;5192:9;5208:1;5204;:5;5192:17;;5237:1;5232;5228;:5;;;;;;:10;5220:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5296:1;5289:8;;;4834:471;;;;;:::o;7973:106::-;8026:15;8061:10;8054:17;;7973:106;:::o;38036:337::-;38146:1;38129:19;;:5;:19;;;;38121:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38227:1;38208:21;;:7;:21;;;;38200:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38311:6;38281:11;:18;38293:5;38281:18;;;;;;;;;;;;;;;:27;38300:7;38281:27;;;;;;;;;;;;;;;:36;;;;38349:7;38333:32;;38342:5;38333:32;;;38358:6;38333:32;;;;;;;;;;;;;;;;;;38036:337;;;:::o;38381:1168::-;38519:1;38503:18;;:4;:18;;;;38495:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38596:1;38582:16;;:2;:16;;;;38574:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38666:1;38657:6;:10;38649:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38733:13;:19;38747:4;38733:19;;;;;;;;;;;;;;;;;;;;;;;;;38732:20;38724:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38793:18;:24;38812:4;38793:24;;;;;;;;;;;;;;;;;;;;;;;;;38792:25;:52;;;;38822:18;:22;38841:2;38822:22;;;;;;;;;;;;;;;;;;;;;;;;;38821:23;38792:52;38789:338;;;38879:12;;38869:6;:22;;38861:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38951:18;38972:13;38982:2;38972:9;:13::i;:::-;38951:34;;39033:15;;39022:6;39009:10;:19;39008:40;;39000:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38789:338;;39208:12;39223:4;39208:19;;39335:18;:24;39354:4;39335:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;39363:18;:22;39382:2;39363:22;;;;;;;;;;;;;;;;;;;;;;;;;39335:50;39332:96;;;39411:5;39401:15;;39332:96;39503:38;39518:4;39523:2;39526:6;39533:7;39503:14;:38::i;:::-;38381:1168;;;;:::o;4383:192::-;4469:7;4502:1;4497;:6;;4505:12;4489:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4529:9;4545:1;4541;:5;4529:17;;4566:1;4559:8;;;4383:192;;;;;:::o;35572:163::-;35613:7;35634:15;35651;35670:19;:17;:19::i;:::-;35633:56;;;;35707:20;35719:7;35707;:11;;:20;;;;:::i;:::-;35700:27;;;;35572:163;:::o;3480:181::-;3538:7;3558:9;3574:1;3570;:5;3558:17;;3599:1;3594;:6;;3586:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3652:1;3645:8;;;3480:181;;;;:::o;34637:439::-;34697:7;34706;34715;34724;34744:12;34759:24;34775:7;34759:15;:24::i;:::-;34744:39;;34794:12;34809:24;34825:7;34809:15;:24::i;:::-;34794:39;;34844:13;34860:25;34877:7;34860:16;:25::i;:::-;34844:41;;34896:23;34922:27;34944:4;34922:17;34934:4;34922:7;:11;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;34896:53;;34986:26;35006:5;34986:15;:19;;:26;;;;:::i;:::-;34968:44;;35033:15;35050:4;35056;35062:5;35025:43;;;;;;;;;;;;34637:439;;;;;:::o;35084:480::-;35208:7;35217;35226;35246:15;35264:24;35276:11;35264:7;:11;;:24;;;;:::i;:::-;35246:42;;35299:12;35314:21;35323:11;35314:4;:8;;:21;;;;:::i;:::-;35299:36;;35346:12;35361:21;35370:11;35361:4;:8;;:21;;;;:::i;:::-;35346:36;;35393:13;35409:22;35419:11;35409:5;:9;;:22;;;;:::i;:::-;35393:38;;35442:23;35468:38;35500:5;35468:27;35490:4;35468:17;35480:4;35468:7;:11;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;:31;;:38;;;;:::i;:::-;35442:64;;35525:7;35534:15;35551:4;35517:39;;;;;;;;;;;35084:480;;;;;;;;;:::o;3944:136::-;4002:7;4029:43;4033:1;4036;4029:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4022:50;;3944:136;;;;:::o;6409:278::-;6495:7;6527:1;6523;:5;6530:12;6515:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6554:9;6570:1;6566;:5;;;;;;6554:17;;6678:1;6671:8;;;6409:278;;;;;:::o;40227:834::-;40338:7;40334:40;;40360:14;:12;:14::i;:::-;40334:40;40399:11;:19;40411:6;40399:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40423:11;:22;40435:9;40423:22;;;;;;;;;;;;;;;;;;;;;;;;;40422:23;40399:46;40395:597;;;40462:48;40484:6;40492:9;40503:6;40462:21;:48::i;:::-;40395:597;;;40533:11;:19;40545:6;40533:19;;;;;;;;;;;;;;;;;;;;;;;;;40532:20;:46;;;;;40556:11;:22;40568:9;40556:22;;;;;;;;;;;;;;;;;;;;;;;;;40532:46;40528:464;;;40595:46;40615:6;40623:9;40634:6;40595:19;:46::i;:::-;40528:464;;;40664:11;:19;40676:6;40664:19;;;;;;;;;;;;;;;;;;;;;;;;;40663:20;:47;;;;;40688:11;:22;40700:9;40688:22;;;;;;;;;;;;;;;;;;;;;;;;;40687:23;40663:47;40659:333;;;40727:44;40745:6;40753:9;40764:6;40727:17;:44::i;:::-;40659:333;;;40793:11;:19;40805:6;40793:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40816:11;:22;40828:9;40816:22;;;;;;;;;;;;;;;;;;;;;;;;;40793:45;40789:203;;;40855:48;40877:6;40885:9;40896:6;40855:21;:48::i;:::-;40789:203;;;40936:44;40954:6;40962:9;40973:6;40936:17;:44::i;:::-;40789:203;40659:333;40528:464;40395:597;41016:7;41012:41;;41038:15;:13;:15::i;:::-;41012:41;40227:834;;;;:::o;35743:561::-;35793:7;35802;35822:15;35840:7;;35822:25;;35858:15;35876:7;;35858:25;;35905:9;35900:289;35924:9;:16;;;;35920:1;:20;35900:289;;;35990:7;35966;:21;35974:9;35984:1;35974:12;;;;;;;;;;;;;;;;;;;;;;;;;35966:21;;;;;;;;;;;;;;;;:31;:66;;;;36025:7;36001;:21;36009:9;36019:1;36009:12;;;;;;;;;;;;;;;;;;;;;;;;;36001:21;;;;;;;;;;;;;;;;:31;35966:66;35962:97;;;36042:7;;36051;;36034:25;;;;;;;;;35962:97;36084:34;36096:7;:21;36104:9;36114:1;36104:12;;;;;;;;;;;;;;;;;;;;;;;;;36096:21;;;;;;;;;;;;;;;;36084:7;:11;;:34;;;;:::i;:::-;36074:44;;36143:34;36155:7;:21;36163:9;36173:1;36163:12;;;;;;;;;;;;;;;;;;;;;;;;;36155:21;;;;;;;;;;;;;;;;36143:7;:11;;:34;;;;:::i;:::-;36133:44;;35942:3;;;;;;;35900:289;;;;36213:20;36225:7;;36213;;:11;;:20;;;;:::i;:::-;36203:7;:30;36199:61;;;36243:7;;36252;;36235:25;;;;;;;;36199:61;36279:7;36288;36271:25;;;;;;35743:561;;;:::o;36963:154::-;37027:7;37054:55;37093:5;37054:20;37066:7;;37054;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;37047:62;;36963:154;;;:::o;37125:::-;37189:7;37216:55;37255:5;37216:20;37228:7;;37216;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;37209:62;;37125:154;;;:::o;37287:156::-;37352:7;37379:56;37419:5;37379:21;37391:8;;37379:7;:11;;:21;;;;:::i;:::-;:25;;:56;;;;:::i;:::-;37372:63;;37287:156;;;:::o;37451:287::-;37508:1;37497:7;;:12;:28;;;;;37524:1;37513:7;;:12;37497:28;37494:40;;;37527:7;;37494:40;37572:7;;37554:15;:25;;;;37608:7;;37590:15;:25;;;;37645:8;;37626:16;:27;;;;37684:1;37674:7;:11;;;;37706:1;37696:7;:11;;;;37729:1;37718:8;:12;;;;37451:287;:::o;42377:664::-;42480:23;42505:12;42519;42533:13;42550:20;42562:7;42550:11;:20::i;:::-;42479:91;;;;;;;;42582:15;42599:23;42624:12;42640:51;42652:7;42661:4;42667;42673:5;42680:10;:8;:10::i;:::-;42640:11;:51::i;:::-;42581:110;;;;;;42722:28;42742:7;42722;:15;42730:6;42722:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42704:7;:15;42712:6;42704:15;;;;;;;;;;;;;;;:46;;;;42779:28;42799:7;42779;:15;42787:6;42779:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42761:7;:15;42769:6;42761:15;;;;;;;;;;;;;;;:46;;;;42839:39;42862:15;42839:7;:18;42847:9;42839:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42818:7;:18;42826:9;42818:18;;;;;;;;;;;;;;;:60;;;;42892:17;42904:4;42892:11;:17::i;:::-;42920:19;42933:5;42920:12;:19::i;:::-;42950:23;42962:4;42968;42950:11;:23::i;:::-;43006:9;42989:44;;42998:6;42989:44;;;43017:15;42989:44;;;;;;;;;;;;;;;;;;42377:664;;;;;;;;;;:::o;41685:684::-;41786:23;41811:12;41825;41839:13;41856:20;41868:7;41856:11;:20::i;:::-;41785:91;;;;;;;;41888:15;41905:23;41930:12;41946:51;41958:7;41967:4;41973;41979:5;41986:10;:8;:10::i;:::-;41946:11;:51::i;:::-;41887:110;;;;;;42028:28;42048:7;42028;:15;42036:6;42028:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42010:7;:15;42018:6;42010:15;;;;;;;;;;;;;;;:46;;;;42088:39;42111:15;42088:7;:18;42096:9;42088:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42067:7;:18;42075:9;42067:18;;;;;;;;;;;;;;;:60;;;;42159:39;42182:15;42159:7;:18;42167:9;42159:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42138:7;:18;42146:9;42138:18;;;;;;;;;;;;;;;:60;;;;42220:17;42232:4;42220:11;:17::i;:::-;42248:19;42261:5;42248:12;:19::i;:::-;42278:23;42290:4;42296;42278:11;:23::i;:::-;42334:9;42317:44;;42326:6;42317:44;;;42345:15;42317:44;;;;;;;;;;;;;;;;;;41685:684;;;;;;;;;;:::o;41069:608::-;41168:23;41193:12;41207;41221:13;41238:20;41250:7;41238:11;:20::i;:::-;41167:91;;;;;;;;41270:15;41287:23;41312:12;41328:51;41340:7;41349:4;41355;41361:5;41368:10;:8;:10::i;:::-;41328:11;:51::i;:::-;41269:110;;;;;;41418:28;41438:7;41418;:15;41426:6;41418:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41400:7;:15;41408:6;41400:15;;;;;;;;;;;;;;;:46;;;;41478:39;41501:15;41478:7;:18;41486:9;41478:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41457:7;:18;41465:9;41457:18;;;;;;;;;;;;;;;:60;;;;41528:17;41540:4;41528:11;:17::i;:::-;41556:19;41569:5;41556:12;:19::i;:::-;41586:23;41598:4;41604;41586:11;:23::i;:::-;41642:9;41625:44;;41634:6;41625:44;;;41653:15;41625:44;;;;;;;;;;;;;;;;;;41069:608;;;;;;;;;;:::o;32929:732::-;33032:23;33057:12;33071;33085:13;33102:20;33114:7;33102:11;:20::i;:::-;33031:91;;;;;;;;33134:15;33151:23;33176:12;33192:51;33204:7;33213:4;33219;33225:5;33232:10;:8;:10::i;:::-;33192:11;:51::i;:::-;33133:110;;;;;;33274:28;33294:7;33274;:15;33282:6;33274:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33256:7;:15;33264:6;33256:15;;;;;;;;;;;;;;;:46;;;;33331:28;33351:7;33331;:15;33339:6;33331:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33313:7;:15;33321:6;33313:15;;;;;;;;;;;;;;;:46;;;;33391:39;33414:15;33391:7;:18;33399:9;33391:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33370:7;:18;33378:9;33370:18;;;;;;;;;;;;;;;:60;;;;33462:39;33485:15;33462:7;:18;33470:9;33462:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33441:7;:18;33449:9;33441:18;;;;;;;;;;;;;;;:60;;;;33512:17;33524:4;33512:11;:17::i;:::-;33540:19;33553:5;33540:12;:19::i;:::-;33570:23;33582:4;33588;33570:11;:23::i;:::-;33626:9;33609:44;;33618:6;33609:44;;;33637:15;33609:44;;;;;;;;;;;;;;;;;;32929:732;;;;;;;;;;:::o;37746:151::-;37800:15;;37790:7;:25;;;;37836:15;;37826:7;:25;;;;37873:16;;37862:8;:27;;;;37746:151::o;36312:312::-;36366:19;36389:10;:8;:10::i;:::-;36366:33;;36410:12;36425:21;36434:11;36425:4;:8;;:21;;;;:::i;:::-;36410:36;;36480:30;36505:4;36480:7;:20;36488:11;;;;;;;;;;;36480:20;;;;;;;;;;;;;;;;:24;;:30;;;;:::i;:::-;36457:7;:20;36465:11;;;;;;;;;;;36457:20;;;;;;;;;;;;;;;:53;;;;36524:11;:24;36536:11;;;;;;;;;;;36524:24;;;;;;;;;;;;;;;;;;;;;;;;;36521:95;;;36586:30;36611:4;36586:7;:20;36594:11;;;;;;;;;;;36586:20;;;;;;;;;;;;;;;;:24;;:30;;;;:::i;:::-;36563:7;:20;36571:11;;;;;;;;;;;36563:20;;;;;;;;;;;;;;;:53;;;;36521:95;36312:312;;;:::o;36632:323::-;36688:19;36711:10;:8;:10::i;:::-;36688:33;;36732:13;36748:22;36758:11;36748:5;:9;;:22;;;;:::i;:::-;36732:38;;36805:32;36831:5;36805:7;:21;36813:12;;;;;;;;;;;36805:21;;;;;;;;;;;;;;;;:25;;:32;;;;:::i;:::-;36781:7;:21;36789:12;;;;;;;;;;;36781:21;;;;;;;;;;;;;;;:56;;;;36851:11;:25;36863:12;;;;;;;;;;;36851:25;;;;;;;;;;;;;;;;;;;;;;;;;36848:99;;;36915:32;36941:5;36915:7;:21;36923:12;;;;;;;;;;;36915:21;;;;;;;;;;;;;;;;:25;;:32;;;;:::i;:::-;36891:7;:21;36899:12;;;;;;;;;;;36891:21;;;;;;;;;;;;;;;:56;;;;36848:99;36632:323;;;:::o;34482:147::-;34560:17;34572:4;34560:7;;:11;;:17;;;;:::i;:::-;34550:7;:27;;;;34601:20;34616:4;34601:10;;:14;;:20;;;;:::i;:::-;34588:10;:33;;;;34482:147;;:::o

Swarm Source

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